# PANDUAN ROBOT EA TRADING OTOMATIS — TeamilyQuantEA v28

**Platform target:** MetaTrader 5 (MT5) · **Broker target:** Exness (atau broker MT5 lain yang menyediakan XAUUSD & BTCUSD)
**Berkas sumber:** `TeamilyQuantEA_v28.mq5` (MQL5)
**Versi paket:** v27 · **Tanggal:** 18 Oktober 2026

> **Disclaimer:** Ini analisis prediksi untuk tujuan informasional, bukan nasihat keuangan.
> Uji wajib di **akun demo** minimal 2–4 minggu sebelum akun riil. Robot tidak menjamin profit.

---

## 1. Apa yang dilakukan robot ini

Robot menjalankan **tiga tahap berurutan** setiap kali bar baru terbentuk:

```
RISET / PREDIKSI  ->  PEMBENTUKAN SINYAL  ->  EKSEKUSI OTOMATIS
```

### Tahap 1 — Riset / prediksi arah
EA menghitung **skor arah komposit** (−100 … +100) dari data harga broker, memakai
komponen dan bobot yang **sama dengan mesin prediksi di halaman laporan v27**:

| # | Komponen | Bobot | Cara hitung |
|---|---|---|---|
| 1 | Tren (MA) | 0,30 | jarak harga ke SMA20/SMA50/SMA200 dibagi ATR |
| 2 | Supertrend / kanal ATR | 0,14 | harga vs titik tengah kanal 10-bar ± 0,5 ATR |
| 3 | ADX / DI | 0,16 | (−DI vs +DI) dinormalisasi, dikali kekuatan ADX |
| 4 | RSI(14) | 0,12 | (RSI − 50) / 50 |
| 5 | MACD histogram | 0,12 | histogram / (ATR × 0,6) |
| 6 | Z-score(60) | 0,08 | mean-reversion, −z / 3 |
| 7 | Posisi level S/R | 0,08 | posisi harga dalam rentang support–resistance 20 bar |

**Keyakinan (%)** = 0,55 × kekuatan skor + 0,45 × kesepakatan komponen (rumus identik dengan kolom
"Keyakinan (%)" di tabel prediksi laporan).

### Tahap 2 — Pembentukan sinyal
- **Skor ≥ +18** → sinyal **BULLISH** (cari BUY)
- **Skor ≤ −18** → sinyal **BEARISH** (cari SELL)
- **−18 < skor < +18** → **TIDAK ADA SINYAL**. EA **tidak** membuka posisi dan hanya menulis log.
  Ini disengaja: lebih baik tidak trading daripada memaksa entry di pasar tanpa arah.

### Tahap 3 — Eksekusi otomatis
Untuk sinyal yang lolos semua filter:

1. Hitung **entry** (harga pasar saat itu), **SL** dan **TP1** dari ATR sesuai profil,
   lalu sesuaikan SL dengan **level support/resistance** struktural (SL diberi ruang 0,2 × ATR di
   luar level pelindung).
2. **TP2** = TP1 + jarak yang sama (2 × TP1-ATR).
3. Hitung **lot** dari `risiko % modal ÷ (jarak SL dalam point × nilai per point per lot)`.
4. Kirim order **market** dengan SL + TP1 terpasang, magic number unik.

---

## 2. Dua gaya bermain

| | **SCALPING** (gaya utama) | **LONG SWING** (gaya sekunder) |
|---|---|---|
| Tujuan | profit cepat, frekuensi transaksi tinggi | profit besar, tahan posisi lebih lama |
| Timeframe default | **M15** | **H4** |
| SL | 0,80 × ATR | 2,00 × ATR |
| TP1 | 1,20 × ATR | 4,00 × ATR |
| TP2 | 2 × TP1 | 2 × TP1 |
| Partial close | 50% di TP1 | 50% di TP1 |
| Trailing | mulai 0,80 ATR, jarak 0,50 ATR | idem (lebih longgar karena ATR besar) |
| Karakter | banyak transaksi kecil–menengah | sedikit transaksi, target jauh |

**Mode AUTO (default):** EA memilih profil dari rezim pasar —
**ADX < 25** (tren belum kuat) → **SCALPING**; **ADX ≥ 25** (tren kuat) → **LONG SWING**.
Bila timeframe swing tidak menghasilkan sinyal, EA otomatis memakai profil scalping.

---

## 3. Manajemen risiko (wajib dipahami)

| Mekanisme | Cara kerja | Parameter |
|---|---|---|
| **Stop loss** | Selalu terpasang di order; wajib, tidak opsional | `InpScalpSLatr`, `InpSwingSLatr` |
| **Take profit** | TP1 di order; TP2 dikelola via trailing | `InpScalpTPatr`, `InpSwingTPatr` |
| **Ukuran posisi** | Lot dihitung dari risiko % modal terhadap jarak SL | `InpRiskPercent` (0,1–15%) |
| **Batas lot** | Lot tidak pernah melebihi batas keras | `InpMaxLot` |
| **Batas posisi** | Maksimum posisi terbuka per simbol | `InpMaxPositions` |
| **Filter R:R** | Entry ditolak bila reward/risk < nilai minimum | `InpMinRR` |
| **Stop harian** | EA berhenti membuka posisi bila rugi harian tercapai | `InpMaxDailyLossPct` |
| **Batas transaksi** | Maksimum transaksi per hari | `InpMaxTradesPerDay` |
| **Cooldown** | Jeda minimum antar entry | `InpCooldownSeconds` |
| **Filter spread** | Tidak entry bila spread melebar | `InpMaxSpreadPoints` |
| **Filter sesi** | Batasi jam trading (opsional) | `InpUseSessionFilter` |
| **Penutupan berlawanan** | Posisi ditutup bila sinyal berlawanan kuat muncul | `InpCloseOnOpposite` |

⚠️ **Catatan penting soal "profit besar":** tidak ada konfigurasi yang menjamin profit besar.
Yang bisa diatur hanyalah **rasio risiko–imbal** dan **konsistensi eksekusi**. Menaikkan
`InpRiskPercent` menaikkan potensi profit **dan** potensi kerugian secara proporsional.

---

## 4. Penanganan kondisi "sinyal atau data tidak tersedia"

EA **tidak pernah** mengarang harga atau sinyal. Setiap kondisi tidak tersedia menghasilkan
**status eksplisit** di tab *Experts*:

| Kondisi | Perilaku EA | Pesan log |
|---|---|---|
| Bar historis kurang dari yang dibutuhkan | Tidak ada order | `data harga tidak tersedia (bar kurang dari N)` |
| ATR tidak valid | Tidak ada order | `ATR tidak valid (data harga tidak lengkap)` |
| |skor| di pita netral | Tidak ada order | `skor di dalam pita netral … tidak ada sinyal` |
| Data swing belum siap saat start | EA tetap jalan, menunggu | `STATUS DATA: data … belum tersedia. EA akan menunggu; tidak ada order sampai data lengkap.` |
| AutoTrading mati | Tidak ada order | `AutoTrading terminal NONAKTIF` |
| Spread melebar | Tidak ada order | `spread N points > batas M` |
| Rugi harian tercapai | Berhenti entry (posisi lama tetap dikelola) | `stop harian tercapai …` |
| Pasar tutup / tidak ada tick | `OnTick` tidak dipanggil; tidak ada aksi | — |
| Order ditolak broker | Tidak retry berulang | `order gagal: retcode N (deskripsi)` |

---

## 5. Daftar parameter lengkap

### 5.1 Gaya & instrumen
| Parameter | Default | Penjelasan |
|---|---|---|
| `InpMode` | `EA_MODE_AUTO` | AUTO / SCALP / SWING / BOTH |
| `InpScalpTF` | `PERIOD_M15` | Timeframe profil scalping |
| `InpSwingTF` | `PERIOD_H4` | Timeframe profil long swing |
| `InpTradeScalp` | `true` | Izinkan profil scalping |
| `InpTradeSwing` | `true` | Izinkan profil swing |

### 5.2 Risiko & ukuran posisi
| Parameter | Default | Penjelasan |
|---|---|---|
| `InpRiskPercent` | `1.0` | Risiko per transaksi (% modal). Rentang valid 0,1–15% |
| `InpMaxLot` | `1.0` | Batas keras lot per posisi |
| `InpMinRR` | `0.30` | Minimal reward/risk agar entry diizinkan (0 = nonaktif) |
| `InpMaxPositions` | `2` | Maksimum posisi terbuka per simbol |
| `InpMaxDailyLossPct` | `5.0` | Stop harian (% equity). 0 = nonaktif |
| `InpMaxTradesPerDay` | `40` | Maksimum transaksi per hari. 0 = tanpa batas |

### 5.3 Mesin sinyal
| Parameter | Default | Penjelasan |
|---|---|---|
| `InpScoreThreshold` | `18` | Ambang |skor| untuk sinyal (1–60) |
| `InpFastMA` / `InpMidMA` / `InpSlowMA` | `20` / `50` / `200` | Periode MA tren |
| `InpATRPeriod` | `14` | Periode ATR |
| `InpADXPeriod` | `14` | Periode ADX/DI |
| `InpRSIPeriod` | `14` | Periode RSI |
| `InpZPeriod` | `60` | Periode Z-score |
| `InpLevelLookback` | `20` | Lookback level S/R (bar) |

### 5.4 Stop loss / take profit
| Parameter | Default | Penjelasan |
|---|---|---|
| `InpScalpSLatr` | `0.80` | SCALP: SL = x ATR |
| `InpScalpTPatr` | `1.20` | SCALP: TP1 = x ATR |
| `InpSwingSLatr` | `2.00` | SWING: SL = x ATR |
| `InpSwingTPatr` | `4.00` | SWING: TP1 = x ATR |
| `InpPartialClosePct` | `50.0` | % volume ditutup di TP1 (0–90) |
| `InpUseTrailing` | `true` | Aktifkan trailing stop |
| `InpTrailStartAtr` | `0.80` | Trailing mulai setelah profit x ATR |
| `InpTrailStepAtr` | `0.50` | Jarak trailing = x ATR |

### 5.5 Filter eksekusi
| Parameter | Default | Penjelasan |
|---|---|---|
| `InpMaxSpreadPoints` | `40` | Spread maksimum (points). 0 = nonaktif |
| `InpCooldownSeconds` | `300` | Jeda minimum antar entry (detik) |
| `InpUseSessionFilter` | `false` | Aktifkan filter jam |
| `InpSessionStartHour` / `InpSessionEndHour` | `7` / `21` | Jam trading (server time) |
| `InpCloseOnOpposite` | `true` | Tutup posisi bila sinyal berlawanan kuat |
| `InpVerboseLog` | `true` | Log rinci ke tab Experts |

### 5.6 Identitas
| Parameter | Default | Penjelasan |
|---|---|---|
| `InpMagic` | `27002700` | Magic number unik (pisahkan tiap instance) |
| `InpComment` | `TeamilyEA_v28` | Komentar pada order |

---

## 6. Pemasangan (MetaTrader 5)

1. Buka MT5 → menu **File → Open Data Folder**.
2. Masuk ke `MQL5/Experts/`, buat folder `Teamily`, lalu **salin `TeamilyQuantEA_v28.mq5`** ke sana.
3. Di MT5 tekan **F4** (MetaEditor) → panel *Navigator* → klik kanan **Experts → Refresh**.
4. Buka `TeamilyQuantEA_v28.mq5` → tekan **F7** (Compile). Pastikan **0 error**.
5. Kembali ke MT5 → *Navigator* → **Expert Advisors → Teamily → TeamilyQuantEA_v27**.
6. Buka chart **XAUUSD** (atau **BTCUSD**) pada timeframe **M15** (timeframe chart tidak wajib sama
   dengan `InpScalpTF`, tetapi M15 paling sesuai).
7. Seret EA ke chart → tab **Common**: centang **Allow Algo Trading**.
8. Tab **Inputs**: sesuaikan parameter (mulai dari default), lalu **OK**.
9. Aktifkan tombol **AutoTrading** di toolbar MT5 (harus hijau).
10. Cek tab **Experts** — log awal harus menampilkan:
    `===== TeamilyQuantEA v28 aktif =====` beserta status data dan parameter.

### Menjalankan dua instance (XAUUSD + BTCUSD)
Buka EA pada dua chart berbeda. **Gunakan `InpMagic` berbeda** untuk tiap instance
(mis. `27002701` untuk XAUUSD, `27002702` untuk BTCUSD) agar posisi tidak saling tercampur.

### Uji dulu di akun demo
Menu **File → Open an Account → Demo** di MT5, pilih server demo Exness. Jalankan EA minimal
2–4 minggu, periksa tab **History** dan **Experts**. Baru setelah itu pertimbangkan akun riil.

---

## 7. Keamanan berkas ini

- Berkas `.mq5` **tidak memuat** API key, private key, password, maupun ID akun.
  Tidak ada satu pun string kredensial di dalamnya.
- Login akun dilakukan **di terminal MT5** (menu *File → Login to Trade Account*), bukan di berkas EA.
- EA tidak melakukan permintaan jaringan keluar (tidak ada `WebRequest`), sehingga tidak perlu
  konfigurasi URL di *Tools → Options → Expert Advisors*.
- Log EA hanya menulis simbol, harga, volume, retcode, dan status — **tidak pernah** kredensial.

---

## 8. Batasan yang harus diketahui

1. **Bukan jaminan profit.** Mesin sinyal adalah model statistik; hasil masa lalu tidak menjamin hasil depan.
2. **Kualitas data broker menentukan hasil.** Harga EA berasal dari feed broker, sehingga bisa berbeda
   sedikit dari harga di halaman laporan (yang memakai gold-api.com / Coinbase).
3. **Slippage & spread** nyata dapat mengubah hasil, terutama pada BTCUSD di jam likuiditas rendah.
4. **Tidak ada backtest bawaan** dalam berkas ini; gunakan *Strategy Tester* MT5 untuk menguji
   parameter sebelum dipakai (pilih model *Every tick based on real ticks*).
5. **Bukan penasihat keuangan.** Keputusan trading sepenuhnya tanggung jawab pengguna.

---

**Disclaimer:** Ini analisis prediksi untuk tujuan informasional, bukan nasihat keuangan.

---

## 9. Perubahan & status v28 (ringkas)

Versi 28 adalah **perbaikan audit**, bukan penambahan gaya trading. Semua fitur v27 tetap ada.

| # | Temuan v27 | Perbaikan v28 |
|---|---|---|
| 1 | TP2 hanya label, tidak pernah dikirim ke broker | TP order = **TP2**; disinkronkan setiap siklus lewat `PositionModify`. Log: `SINKRON TP` |
| 2 | Partial close tanpa status selesai/belum | Status eksplisit per posisi: `belum` / `selesai` / `tidak mungkin`, disimpan di state CSV |
| 3 | RSI memproses jendela seed dua kali | Satu lintasan kronologis Wilder, warm-up 240 bar; selisih vs referensi **0,00** |
| 4 | ATR/RSI batas array kurang (`shift+period+1`) | Batas diperbaiki; selisih ATR vs referensi **0,0000** |
| 5 | ADX bukan Wilder (rata-rata DX sederhana) | ADX Wilder penuh (seed SMA + rekursi); selisih **0,00** |
| 6 | Harga `close[0]` vs indikator `shift 1` | Semua berbasis **candle tertutup** (`close[1]`), sinyal hanya pada bar baru |
| 7 | Validasi order hanya boolean `CTrade` | Cek `ResultRetcode()` + jarak `STOPS_LEVEL`/`FREEZE_LEVEL` sebelum kirim |
| 8 | Label "Supertrend" tidak akurat | Label diubah menjadi **PROXY KANAL high–low + toleransi ATR** |
| 9 | Penghitung harian reset saat restart | State persisten di `MQL5/Files/TeamilyEA_v28_state.csv` |
| 10 | Lot minimum dapat menaikkan risiko nominal | Risiko nominal dihitung ulang & dilaporkan; batas keras 15% |
| 11 | Z-score tidak stabil numerik | Varians dua-lintasan (deviasi dari mean) |
| 12 | Konflik sinyal lintas-TF tanpa aturan | Parameter baru `InpMTFConflictRule`: **ikut swing** (default) atau **wajib sepakat** |

### Bukti uji indikator (data nyata, periode 14, shift 1)

| Instrumen | TF | ADX v27 | ADX v28 | ADX referensi | ATR v27 | ATR v28 | ATR referensi | RSI v27 | RSI v28 | RSI referensi |
|---|---|---|---|---|---|---|---|---|---|---|
| XAUUSD | H1 | 66,37 | **41,44** | 41,44 | 18,5279 | **16,0801** | 16,0801 | 20,36 | **23,46** | 23,46 |
| BTCUSD | H1 | 11,95 | **12,06** | 12,06 | 450,7511 | **236,0565** | 236,0565 | 32,46 | **38,22** | 38,22 |
| BTCUSD | D1 | 31,76 | **25,74** | 25,74 | 2.135,1635 | **1.185,3012** | 1.185,3012 | 47,37 | **51,89** | 51,89 |

"Referensi" = implementasi Wilder klasik satu lintasan dari bar tertua (perilaku indikator standar MT5). v28 cocok persis; v27 menyimpang hingga 24,93 poin ADX.

## 10. Parameter baru v28

| Parameter | Default | Arti |
|---|---|---|
| `InpMTFConflictRule` | `MTF_FOLLOW_SWING` | Aturan bila sinyal M15 dan H4 berlawanan arah. `MTF_FOLLOW_SWING` = timeframe lebih tinggi menang; `MTF_REQUIRE_AGREE` = tidak ada order sampai kedua TF sepakat. |
| `InpChannelBars` | 10 | Lookback bar untuk **proxy kanal** high–low (bukan Supertrend). |
| `InpChannelAtrTol` | 0,50 | Toleransi zona netral sekitar titik tengah kanal, dalam kelipatan ATR. |
| `InpWarnLotRisk` | true | Tampilkan peringatan bila pembulatan lot minimum menaikkan risiko nominal di atas target. |

## 11. Status partial close & TP (cara membacanya di log)

1. Saat order dibuka, EA menulis: `EKSEKUSI BUY 0,10 lot @ ... | SL ... | TP1 (partial) ... | TP2 (TP order nyata) ... | retcode 10009 | tiket ... | status partial: belum selesai`.
2. Bila TP order di broker berbeda dari TP2 (mis. setelah restart), EA memperbaikinya: `SINKRON TP: TP order disetel ke TP2 ...`.
3. Saat harga menyentuh TP1: `PARTIAL CLOSE SELESAI: 0,05 lot di TP1 ... — sisa 0,05 lot menuju TP2 ...`.
4. Bila volume partial lebih kecil dari volume minimum broker: `PARTIAL CLOSE TIDAK DAPAT DILAKUKAN ... — status: partial_tidak_mungkin`.
5. Bila broker menolak: `PARTIAL CLOSE GAGAL: retcode ... — status: partial_belum_selesai` (dicoba lagi siklus berikutnya).

## 12. Mencari log di MT5 (tab Experts)

1. `Ctrl+T` (atau **View → Toolbox**) → tab **Experts**.
2. Klik kanan → **Filter** → ketik `TeamilyEA`.
3. Baris pembuka yang harus ada: `===== TeamilyQuantEA v28 aktif =====`.
4. Baris konfirmasi versi: `v28: TP order = TP2 (target broker nyata) | TP1 untuk partial close`.
5. Kode error umum & tindak lanjut ada di tabel bagian **"Kode error umum"** pada halaman interaktif v28.

## 13. Yang TIDAK bisa diverifikasi dari paket ini

- **Kompilasi**: wajib `F7` di MetaEditor pada mesin Anda. Sandbox pembuat laporan tidak memiliki MetaEditor.
- **Eksekusi nyata**: perlu akun demo/riil di MT5. Angka pada laporan adalah level analisis, bukan hasil transaksi.
- **Bobot Supertrend**: komponen 0,14 memakai **proxy kanal**, bukan Supertrend standar. Bila ingin Supertrend asli, bobot sinyal akan berubah dan perlu kalibrasi ulang.

**Disclaimer:** Ini analisis prediksi untuk tujuan informasional, bukan nasihat keuangan.
