# 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.