Hai semua,
Kali ini, saya ingin berkongsi kemas kini tentang Strategi Breakout yang Mudah dan Berkesan. Dalam kod ini, saya telah menambah beberapa fungsi pembantu untuk cabaran prop firm.
Secara umumnya, untuk lulus cabaran prop firm, anda perlu memenuhi tiga kriteria utama:
- Target keuntungan
- Tidak melanggar had kerugian harian maksimum
- Tidak melanggar had kerugian maksimum
Dalam kod ini, saya telah menyertakan dua fungsi untuk memeriksa "Target keuntungan" dan "Hampir melanggar had kerugian harian maksimum" bagi menutup semua posisi dan menghapus semua pesanan tertunda secara automatik. Untuk "had kerugian maksimum", ia bergantung kepada strategi dan pengurusan risiko anda, jadi ia tidak akan dinyatakan dalam Skrip MQL5 ini.
//+------------------------------------------------------------------+ //| Fungsi Pembantu Prop Firm | //+------------------------------------------------------------------+ // Hapus semua pesanan tertunda dan tutup 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); } } // Periksa jika kita telah mencapai target keuntungan bool isPassed() { return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA; } // Periksa jika kita hampir melanggar had 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; // Baki semasa double current_balance = AccountInfoDouble(ACCOUNT_BALANCE); // Dapatkan PL perdagangan 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, tiada rekod perdagangan"); break; } double profit = HistoryDealGetDouble(ticket,DEAL_PROFIT); if (profit != 0) { // Dapatkan waktu transaksi MqlDateTime deal_time; TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time); // Periksa 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 nyatakan adalah:
input string dd = "-------------CABARAN PROP FIRM-----------------"; input bool isChallenge = false; input double PASS_CRITERIA = 110100; input double DAILY_LOSS_LIMIT = 4500;
Saya harap anda mendapati nilai dalam skrip ini.
Komen 0