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:
@@ -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.
|
||||
Reference in New Issue
Block a user