MetaTrader 5 / Uzman Danışmanlar

Breakout Strategy with Prop Firm Helper Functions - MetaTrader 5 için Uzman Danışman

10
(13)

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