Files

323 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hedge Fund Ultimate Pro v5.1 — Dual Engine EA (MT5)
> Expert Advisor MetaTrader 5 dengan dual engine: **Swing Trend-Follow** + **Scalp Mean-Reversion**, dilengkapi 7 lapis proteksi anti-Margin Call dan SL/TP fully adaptive berbasis ATR.
---
## Daftar Isi
- [Fitur Utama](#fitur-utama)
- [Persyaratan](#persyaratan)
- [Cara Install](#cara-install)
- [Cara Menggunakan](#cara-menggunakan)
- [Penjelasan Parameter Input](#penjelasan-parameter-input)
- [Arsitektur & Penjelasan Kode](#arsitektur--penjelasan-kode)
- [Sistem Proteksi Anti-MC](#sistem-proteksi-anti-mc)
- [Cara Backtest](#cara-backtest)
- [Pembaruan Terakhir (Changelog)](#pembaruan-terakhir-changelog)
- [Disclaimer](#disclaimer)
---
## Fitur Utama
| Fitur | Keterangan |
|-------|------------|
| **Dual Engine** | Swing (trend-following) + Scalp (mean-reversion) berjalan bersamaan |
| **Full Adaptive SL/TP** | Semua SL, TP, Breakeven, dan Trailing berbasis ATR — otomatis menyesuaikan volatilitas |
| **Dynamic TP Extension** | TP swing otomatis diperpanjang +1 ATR saat harga mendekati target; TP scalp bergeser ke BB mid |
| **7 Lapis Anti-MC** | Daily loss limit, equity circuit breaker, margin check, total position cap, dynamic risk reduction, cooldown, weekend close |
| **Progressive Trailing** | Trailing stop makin ketat seiring profit bertambah |
| **Partial Close** | Tutup 50% posisi saat R:R 1:1, sisanya biarkan jalan |
| **Auto-Detect Filling** | Otomatis mendeteksi mode filling broker (FOK/IOC/RETURN) |
| **News Filter** | Menghindari entry 30 menit sebelum dan 15 menit sesudah jam news |
| **Multi-Instrument** | Bisa dipakai di pair/instrument apapun tanpa ubah parameter (karena semua ATR-based) |
---
## Persyaratan
- **Platform**: MetaTrader 5 (MT5)
- **Bahasa**: MQL5
- **Library**: `Trade/Trade.mqh` (sudah bawaan MT5)
- **Timeframe Disarankan**: M15 atau M30 (EA akan otomatis ambil HTF H1 untuk trend filter)
- **Akun**: Hedge atau Netting (disarankan akun Hedge)
- **VPS**: Disarankan agar EA berjalan 24/5 tanpa putus
---
## Cara Install
1. **Copy file** `hedge.mq5` ke folder:
```
[MT5 Data Folder]\MQL5\Experts\
```
> Untuk menemukan Data Folder: di MT5, klik **File → Open Data Folder**
2. **Compile**: Buka MetaEditor, buka file `hedge.mq5`, tekan **F7** (Compile). Pastikan **0 errors**.
3. **Attach ke chart**:
- Buka chart pair yang diinginkan (misal EURUSD, XAUUSD)
- Pilih timeframe M15 atau M30
- Drag EA dari Navigator → Expert Advisors ke chart
- Centang **Allow Algo Trading** di tab Common
- Atur parameter sesuai kebutuhan di tab Inputs
- Klik **OK**
4. **Pastikan AutoTrading aktif** (tombol AutoTrading di toolbar MT5 harus hijau/aktif)
---
## Cara Menggunakan
### Penggunaan Standar (Default)
Parameter default sudah dioptimasi untuk pair forex major. Tinggal attach ke chart dan biarkan berjalan.
### Untuk Gold (XAUUSD)
Karena semua SL/TP berbasis ATR, EA otomatis menyesuaikan. Anda bisa menurunkan `MaxSpread` ke 50 dan `Scalp_MaxSpread` ke 30 untuk Gold.
### Scalp Only
Set `MaxSwingPos = 0` untuk menonaktifkan swing, hanya scalp yang berjalan.
### Swing Only
Set `EnableScalp = false` untuk menonaktifkan scalp.
---
## Penjelasan Parameter Input
### Risk Management
| Parameter | Default | Penjelasan |
|-----------|---------|------------|
| `RiskPercent` | 0.75% | Risiko per trade swing terhadap balance |
| `ScalpRiskPercent` | 0.3% | Risiko per trade scalp (lebih kecil karena frekuensi lebih tinggi) |
| `MaxDailyLossP` | 3.0% | Jika total loss hari ini melebihi 3% balance, EA berhenti trading & tutup semua posisi |
| `MaxDrawdownP` | 8.0% | Circuit breaker: jika equity turun 8% dari peak, tutup semua posisi |
| `MaxSwingPos` | 2 | Maksimal posisi swing terbuka bersamaan |
| `MaxScalpPos` | 3 | Maksimal posisi scalp terbuka bersamaan |
| `MagicSwing` | 778899 | Magic number untuk identifikasi posisi swing |
| `MagicScalp` | 778900 | Magic number untuk identifikasi posisi scalp |
| `CooldownBars` | 3 | Jumlah bar menunggu setelah loss sebelum entry lagi |
| `MaxConsecLoss` | 3 | Setelah 3 loss berturut-turut, risk dipotong 50% |
| `MaxTotalPos` | 4 | Maksimal TOTAL posisi (swing + scalp gabungan) |
| `DailyProfitTarget` | 2.0% | Berhenti trading jika profit hari ini sudah >= 2% balance (0 = nonaktif) |
| `MinMarginLevel` | 200% | Tidak entry baru jika margin level di bawah 200% |
### Swing: Trend Filter
| Parameter | Default | Penjelasan |
|-----------|---------|------------|
| `EMA_Fast` | 50 | EMA cepat untuk deteksi trend |
| `EMA_Slow` | 200 | EMA lambat untuk deteksi trend |
| `HTF` | H1 | Timeframe untuk analisis trend (Higher Time Frame) |
| `ADX_Period` | 14 | Period ADX untuk kekuatan trend |
| `ADX_Min` | 20.0 | Minimum ADX untuk konfirmasi trend kuat |
### Swing: Entry
| Parameter | Default | Penjelasan |
|-----------|---------|------------|
| `RSI_Period` | 14 | Period RSI untuk filter overbought/oversold |
| `RSI_OB` | 70.0 | Level RSI overbought (tidak buy di atas ini) |
| `RSI_OS` | 30.0 | Level RSI oversold (tidak sell di bawah ini) |
| `ATR_SL_Multi` | 1.5 | SL ditempatkan di low candle - (ATR × 1.5) |
| `Swing_RR` | 2.5 | Risk:Reward ratio swing (TP = SL distance × 2.5) |
| `ATR_Period` | 14 | Period ATR |
### Swing: Management
| Parameter | Default | Penjelasan |
|-----------|---------|------------|
| `UsePartialClose` | true | Aktifkan partial close (tutup sebagian posisi) |
| `PartialCloseRR` | 1.0 | Partial close saat profit = 1× SL distance |
| `PartialPercent` | 50% | Tutup 50% lot saat partial close |
| `BE_ATR_Multi` | 1.0 | Pindahkan SL ke breakeven saat profit = 1× ATR |
| `Trail_ATR_Multi` | 1.5 | Mulai trailing saat profit = 1.5× ATR |
| `Trail_Step_ATR` | 0.8 | Jarak trailing = 0.8× ATR (makin ketat seiring profit naik) |
| `CloseOnOpposite` | true | Tutup posisi berlawanan saat sinyal baru muncul |
### Scalp: Settings
| Parameter | Default | Penjelasan |
|-----------|---------|------------|
| `EnableScalp` | true | Aktifkan engine scalp |
| `BB_Period` | 20 | Period Bollinger Band |
| `BB_Dev` | 2.0 | Deviasi Bollinger Band |
| `Scalp_RSI_Period` | 7 | Period RSI cepat untuk scalp |
| `Scalp_RSI_OB` | 75.0 | RSI overbought trigger scalp |
| `Scalp_RSI_OS` | 25.0 | RSI oversold trigger scalp |
| `Scalp_RR` | 1.2 | Risk:Reward ratio scalp |
| `Scalp_SL_ATR` | 0.8 | SL scalp = ATR × 0.8 |
| `Scalp_MaxSpread` | 15 | Max spread untuk scalp (lebih ketat dari swing) |
| `Scalp_BE_ATR` | 0.3 | Breakeven trigger scalp = ATR × 0.3 (adaptive) |
| `Scalp_Trail_ATR` | 0.15 | Trail distance scalp = ATR × 0.15 (adaptive) |
### Filters
| Parameter | Default | Penjelasan |
|-----------|---------|------------|
| `MaxSpread` | 30 | Spread maksimal untuk swing entry (dalam points) |
| `UseSessionFilter` | true | Aktifkan filter jam trading |
| `SessionStartHour` | 2 | Jam mulai trading swing (London open) |
| `SessionEndHour` | 20 | Jam akhir trading swing (NY close) |
| `ScalpStartHour` | 7 | Jam mulai scalp (jam sibuk) |
| `ScalpEndHour` | 17 | Jam akhir scalp |
| `CloseBeforeWeekend` | true | Tutup semua posisi hari Jumat jam 20:00 |
| `AvoidHighImpactHour` | true | Hindari entry dekat jam news |
| `NewsHours` | "8,13,15" | Jam server rawan news (pisahkan dengan koma) |
---
## Arsitektur & Penjelasan Kode
### Alur Utama (OnTick)
```
Setiap Tick:
├── ManageSwing() → Kelola posisi swing (partial close, BE, trailing, TP extension)
├── ManageScalp() → Kelola posisi scalp (adaptive BE, trailing, TP adjust)
├── EquitySafe() → Cek equity drawdown circuit breaker
├── CheckWeekendClose() → Tutup semua jika Jumat >= 20:00
└── [Hanya saat Bar Baru]:
├── DailySafe() → Cek daily loss (closed + floating)
├── CooldownOK() → Cek cooldown setelah loss
├── DailyTargetReached() → Cek apakah sudah cukup profit
├── MarginOK() → Cek margin level
├── LoadIndicators() → Load semua data indikator
├── ENGINE 1: SWING
│ ├── SwingBuySignal() → EMA trend + ADX + DI + RSI + Price Action
│ └── SwingSellSignal() → Kebalikan dari buy
└── ENGINE 2: SCALP
├── ScalpBuySignal() → BB lower bounce + RSI(7) oversold
└── ScalpSellSignal() → BB upper bounce + RSI(7) overbought
```
### Penjelasan Fungsi-Fungsi Utama
#### `DetectFilling()`
Mendeteksi mode filling yang didukung broker secara otomatis. Mencegah error order karena salah filling mode.
#### `OnInit()`
Inisialisasi semua handle indikator (EMA, ADX, RSI, ATR, Bollinger Band), restore peak equity dari GlobalVariable (persistent antar restart), hitung consecutive losses dari history.
#### `SwingBuySignal()` / `SwingSellSignal()`
Sinyal entry swing dengan 6 filter:
1. **Trend**: EMA 50 > EMA 200 (buy) atau < (sell) di timeframe H1
2. **Kekuatan Trend**: ADX >= 20
3. **Directional**: +DI > -DI (buy) atau sebaliknya
4. **RSI Zone**: RSI 40-70 (buy), 30-60 (sell) — hindari overbought/oversold
5. **Momentum Candle**: Body > 40% ATR, wick ratio > 50%
6. **Pattern**: Breakout high sebelumnya ATAU engulfing pattern
#### `ScalpBuySignal()` / `ScalpSellSignal()`
Sinyal entry scalp dengan 6 filter:
1. Candle menyentuh BB lower/upper
2. Close kembali di dalam BB (bounce, bukan tembus)
3. RSI(7) di area oversold (<25) / overbought (>75)
4. Candle bullish/bearish konfirmasi
5. Masih ada ruang ke BB middle
6. Tidak melawan trend kuat (ADX > 30)
#### `LotCalc()`
Menghitung lot berdasarkan risiko:
```
Lot = (Balance × Risk%) / (SL_points × tick_value / tick_size × Point)
```
Dibulatkan ke `SYMBOL_VOLUME_STEP` broker, diklem antara `VOLUME_MIN` dan `VOLUME_MAX`.
#### `ManageSwing()`
Manajemen posisi swing yang berjalan setiap tick:
- **Partial Close**: Tutup 50% lot saat profit = 1× SL distance (tracking via GlobalVariable agar persistent)
- **Breakeven**: Geser SL ke entry + 20% ATR saat profit >= 1× ATR
- **Progressive Trailing**: Trail semakin ketat (dari 100% ke 40% base distance) seiring profit bertambah
- **Dynamic TP Extension**: Saat harga mencapai 80% jarak ke TP, TP diperpanjang +1 ATR
#### `ManageScalp()`
Manajemen posisi scalp (semua ATR-adaptive):
- **Adaptive Breakeven**: Trigger di ATR × 0.3, lock profit 5% ATR
- **Adaptive Trailing**: Trail distance ATR × 0.15, mulai setelah 1.5× BE trigger
- **Dynamic TP**: Geser TP ke BB mid jika lebih menguntungkan
#### `OnTrade()`
Event handler yang melacak win/loss secara real-time:
- Menghitung consecutive losses untuk dynamic risk reduction
- Reset counter otomatis saat ganti hari
- Membersihkan GlobalVariable partial close saat posisi tertutup
---
## Sistem Proteksi Anti-MC
EA ini memiliki **7 lapis proteksi** yang bekerja berlapis-lapis:
| Lapis | Fungsi | Cara Kerja |
|-------|--------|------------|
| 1 | `DailySafe()` | Stop trading + close all jika loss hari ini > 3% balance (closed + floating) |
| 2 | `EquitySafe()` | Circuit breaker: close all jika equity turun 8% dari peak (persistent antar restart) |
| 3 | `MarginOK()` | Tidak entry baru jika margin level < 200% |
| 4 | `MaxTotalPos` | Batasi total posisi swing + scalp gabungan (max 4) |
| 5 | `GetEffectiveRisk()` | Potong risk 50% setelah 3 loss berturut-turut |
| 6 | `CooldownOK()` | Tidak entry selama 3 bar setelah loss terakhir |
| 7 | `CheckWeekendClose()` | Close all posisi Jumat sore, hindari gap weekend |
Ditambah proteksi entry:
- **Spread filter** — tidak entry saat spread terlalu lebar
- **Session filter** — hanya trading di jam aktif
- **News filter** — skip entry 30 menit sebelum & 15 menit sesudah jam news
- **ValidateSLTP()** — validasi SL/TP terhadap `STOPS_LEVEL` dan `FREEZE_LEVEL` broker
- **DailyProfitTarget** — berhenti trading saat sudah profit 2% hari ini
---
## Cara Backtest
1. Buka **Strategy Tester** di MT5 (Ctrl+R)
2. Pilih Expert: `hedge`
3. Pilih Symbol & Timeframe (M15/M30)
4. Period: minimal **2 tahun** data
5. Modelling: **Every tick based on real ticks** (paling akurat)
6. Deposit: sesuaikan dengan modal rencana
7. Klik **Start**
### Tips Backtest
- Gunakan **Every tick based on real ticks** untuk hasil paling realistis
- Test di beberapa pair berbeda untuk melihat universalitas
- Perhatikan **Max Drawdown %** dan **Profit Factor**
- Target: Profit Factor > 1.5, Max DD < 15%
---
## Pembaruan Terakhir (Changelog v5.10)
EA ini telah diperbarui untuk meningkatkan stabilitas sistem (*system safeguard*), profitabilitas strategi, serta keamanan transaksi saat digunakan langsung (*live trading*). Berikut detail pembaruan:
### 1. Perbaikan Bug Stabilitas Sistem
* **Fix Double-Counting OnTrade:** Variabel penanda transaksi `lastDealsTotal` dipindahkan dari variabel lokal `static` menjadi variabel global dan diinisialisasi secara tepat pada `OnInit()`. Hal ini menghentikan bug pelacakan kekalahan beruntun (*consecLosses*) yang terhitung ganda secara keliru saat EA pertama kali berjalan.
* **Filter Entry Tengah Bar:** Nilai awal `lastSwingBar` diinisialisasi dengan open time bar berjalan saat EA dipasang. EA kini akan menunggu pembentukan bar baru selesai sebelum mengevaluasi sinyal entry, menghindari masuk posisi secara acak di tengah bar.
* **Lookback Kekalahan Beruntun:** Fungsi `CountRecentLosses()` sekarang memindai history transaksi 30 hari ke belakang (sebelumnya hanya awal hari ini). Membuat fitur pemotongan risiko otomatis saat beruntun rugi (*dynamic risk reduction*) bekerja akurat lintas hari.
### 2. Peningkatan Profitabilitas (Swing & Scalp)
* **Integrasi Sinyal Pin Bar (Swing):** Menambahkan deteksi otomatis pola rejection candle **Pin Bar** (Hammer/Shooting Star) sebagai pemicu alternatif untuk entry swing. EA kini dapat mengambil peluang pembalikan arah harga (*pullback*) yang kuat pada level support/resistance utama.
* **Optimasi RSI untuk Pullback Swing:** Melonggarkan filter RSI ke batas bawah **35.0** (Buy) dan batas atas **65.0** (Sell) saat tren dikonfirmasi kuat. Memberikan lebih banyak peluang bagi EA untuk melakukan entry pada koreksi harga yang sehat.
* **Filter Volatilitas Dinamis (Adaptif):** Mengganti filter statis `30 points` yang kaku dengan pemeriksaan dinamis `IsVolatilityOk()`. EA membandingkan volatilitas saat ini dengan rata-rata 50 bar terakhir. EA akan memblokir entry jika pasar mati/sepi (di bawah 60% rata-rata) demi menghindari biaya spread broker yang lebar.
### 3. Pengamanan Transaksi Live (Anti-Spam Broker)
* **Trailing Step Dinamis:** Menghindari pengiriman request modifikasi Stop Loss (SL) secara terus-menerus ke server broker (*broker spamming*). Trailing stop kini diatur dengan langkah dinamis minimal **10% ATR** untuk Swing dan **5% ATR** untuk Scalping.
* **Koreksi Validasi SL/TP:** Meningkatkan fungsi `ValidateSLTP()` agar tidak terjadi penolakan order oleh broker saat EA memproses transaksi tanpa SL/TP statis (SL/TP nol).
---
## Disclaimer
> **PERINGATAN**: Trading forex/CFD memiliki risiko tinggi. EA ini **TIDAK menjamin profit**. Past performance (backtest) TIDAK menjamin hasil di masa depan. Selalu test di **akun demo** terlebih dahulu. Gunakan modal yang siap Anda risikokan. Pembuat tidak bertanggung jawab atas kerugian yang terjadi.
---
## Lisensi
Kode ini dibagikan untuk tujuan edukasi. Gunakan dengan risiko sendiri.