Breakout Strategy with Prop Firm Helper Functions - sistema esperto per MetaTrader 5
Ciao a tutti,
Questo è un aggiornamento della"Simple Yet Effective Breakout Strategy". In questo codice, ho aggiunto alcune funzioni di aiuto per le sfide di prop firm.
In generale, per superare una sfida prop firm, è necessario soddisfare tre criteri principali:
- Obiettivo di profitto
- Non violare la perdita massima giornaliera
- Non violare la perdita massima
In questo codice ho incluso due funzioni che controllano il "profitto target" e la "perdita massima giornaliera quasi violata" per uscire automaticamente da tutte le posizioni e cancellare tutti gli ordini pendenti. Per quanto riguarda la "perdita massima", dipende dalla vostra strategia e dalla gestione del rischio, quindi non sarà menzionata in questo script MQL5.
//+------------------------------------------------------------------+ //| Funzioni di aiuto alla società di distribuzione| //+------------------------------------------------------------------+ // Cancellare tutti gli ordini pendenti e uscire da tutte le posizioni 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); } } // Verificare se è stato raggiunto l'obiettivo di profitto bool isPassed() { return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA; } // Verifica se stiamo per violare la perdita massima giornaliera 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 corrente double current_balance = AccountInfoDouble(ACCOUNT_BALANCE); // Ottenere le operazioni chiuse di oggi 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) { // Ottenere il datetime dell'accordo MqlDateTime deal_time; TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time); // Controllare l'ora dell'accordo 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; }
I parametri da specificare sono:
input string dd = "-------------PROP FIRM CHALLENGE-----------------"; input bool isChallenge = false; input double PASS_CRITERIA = 110100.; input double DAILY_LOSS_LIMIT = 4500.;
Spero che troviate dei valori in questo script.
Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/49713