Breakout Strategy with Prop Firm Helper Functions - MetaTrader 5 için Uzman Danışman
Herkese merhaba,
Bu,"Basit Ama Etkili Koparma Stratejisi" nin bir güncellemesidir. Bu koda, destekleyici firma zorlukları için bazı yardımcı işlevler ekledim.
Genel olarak, bir prop firması mücadelesini geçmek için üç ana kriteri yerine getirmeniz gerekir:
- Hedef kâr
- Maksimum günlük kaybı ihlal etmemek
- Maksimum kaybı ihlal etmemek
Bu kodda, tüm pozisyonlardan otomatik olarak çıkmak ve bekleyen tüm emirleri silmek için "Hedef kar" ve "Neredeyse maksimum günlük zararı ihlal ediyor" için iki işlev kontrolü ekledim. "Maksimum kayıp" için gerçekten stratejinize ve risk yönetiminize bağlıdır, bu nedenle bu MQL5 Script'te bahsedilmeyecektir.
//+------------------------------------------------------------------+ //| Prop Firması Yardımcı Fonksiyonları| //+------------------------------------------------------------------+ // Bekleyen tüm emirleri sil ve tüm pozisyonlardan çık 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); } } // Kar hedefine ulaşıp ulaşmadığımızı kontrol edin bool isPassed() { return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA; } // Maksimum günlük kaybı ihlal etmek üzere olup olmadığımızı kontrol edin 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; // Mevcut bakiye double current_balance = AccountInfoDouble(ACCOUNT_BALANCE); // Bugünün kapalı işlemlerini al PL 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 failed, no trade history"); break; } double profit = HistoryDealGetDouble(ticket,DEAL_PROFIT); if (profit != 0) { // Anlaşma tarih saatini al MqlDateTime deal_time; TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time); // Anlaşma süresini kontrol edin 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; }
Belirtmemiz gereken parametreler şunlardır:
input string dd = "-------------PROP FIRM CHALLENGE-----------------"; input bool isChallenge = false; input double PASS_CRITERIA = 110100.; input double DAILY_LOSS_LIMIT = 4500.;
Umarım bu komut dosyasında değerler bulursunuz.
MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/49713