feat: Hedge Fund Ultimate Pro v5.1 - Dual Engine EA (Swing + Scalp) with adaptive SL/TP and 7-layer anti-MC protection

This commit is contained in:
anggol23
2026-04-15 23:53:01 +07:00
commit 633d4ce71a
2 changed files with 1484 additions and 0 deletions
+301
View File
@@ -0,0 +1,301 @@
# 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)
- [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%
---
## 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.
+1183
View File
File diff suppressed because it is too large Load Diff