Halo semua,
Kali ini saya ingin memberikan update tentang Strategi Breakout yang Sederhana Namun Efektif. Dalam kode ini, saya telah menambahkan beberapa fungsi pembantu untuk tantangan prop firm.
Secara umum, untuk melewati tantangan prop firm, Anda perlu memenuhi tiga kriteria utama:
- Target profit
- Tidak melanggar batas kerugian harian maksimum
- Tidak melanggar batas kerugian maksimum
Pada kode ini, saya menyertakan dua fungsi untuk memeriksa "Target profit" dan "Hampir melanggar batas kerugian harian maksimum" yang secara otomatis akan menutup semua posisi dan menghapus semua order yang tertunda. Untuk "batas kerugian maksimum", itu sangat tergantung pada strategi dan manajemen risiko Anda, jadi tidak akan dibahas dalam skrip MQL5 ini.
//+------------------------------------------------------------------+ //| Fungsi Pembantu Prop Firm | //+------------------------------------------------------------------+ // Menghapus semua order yang tertunda dan menutup semua posisi void ClearAll(string message) { Comment(message); for (int i = OrdersTotal() - 1; i >= 0; i--) { ulong orderTicket = OrderGetTicket(i); if (OrderSelect(orderTicket)) { trade.OrderDelete(orderTicket); } } for (int i = PositionsTotal() - 1; i >= 0; i--) { ulong posTicket = PositionGetTicket(i); trade.PositionClose(posTicket); } } // Memeriksa apakah kita telah mencapai target profit bool isPassed() { return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA; } // Memeriksa apakah kita hampir melanggar batas kerugian harian maksimum bool isDailyLimit() { MqlDateTime date_time; TimeToStruct(TimeCurrent(), date_time); int current_day = date_time.day, current_month = date_time.mon, current_year = date_time.year; // Saldo saat ini double current_balance = AccountInfoDouble(ACCOUNT_BALANCE); // Mendapatkan PL dari transaksi yang ditutup hari ini HistorySelect(0, TimeCurrent()); int orders = HistoryDealsTotal(); double PL = 0.0; for (int i = orders - 1; i >= 0; i--) { ulong ticket=HistoryDealGetTicket(i); if(ticket==0) { Print("HistoryDealGetTicket gagal, tidak ada riwayat trade"); break; } double profit = HistoryDealGetDouble(ticket,DEAL_PROFIT); if (profit != 0) { // Mendapatkan waktu transaksi MqlDateTime deal_time; TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time); // Memeriksa waktu transaksi if (deal_time.day == current_day && deal_time.mon == current_month && deal_time.year == current_year) { PL += profit; } else break; } } double starting_balance = current_balance - PL; double current_equity = AccountInfoDouble(ACCOUNT_EQUITY); return current_equity < starting_balance - DAILY_LOSS_LIMIT; }
Parameter yang perlu kita tentukan adalah:
input string dd = "-------------TANTANGAN PROP FIRM-----------------"; input bool isChallenge = false; input double PASS_CRITERIA = 110100; input double DAILY_LOSS_LIMIT = 4500;
Saya harap Anda menemukan nilai dalam skrip ini.
Postingan terkait
- Menggunakan Moving Average EA di MetaTrader 5 untuk Trading yang Lebih Efisien
- MQL5 Wizard: Mengoptimalkan Sinyal Perdagangan dengan Morning/Evening Stars dan MFI
- MQL5 Wizard: Membuat EA dengan Sinyal Trading Berdasarkan Pola Morning/Evening Stars dan Stochastic
- MQL5 Wizard: Menggunakan Sinyal Trading Berbasis Morning/Evening Stars dan RSI untuk MetaTrader 5
- Uji Coba Alat Pembelajaran Mesin Schnick untuk MetaTrader 5