Ciao a tutti,
Oggi voglio fare un aggiornamento sulla Strategia di Breakout Semplice ma Efficace. In questo codice ho aggiunto alcune funzioni di supporto per affrontare le sfide delle prop firm.
Per superare una sfida di una prop firm, in genere devi soddisfare tre criteri principali:
- Obiettivo di profitto
- Non superare la perdita massima giornaliera
- Non superare la perdita massima totale
Nel codice ho incluso due funzioni che controllano l'“Obiettivo di profitto” e “Quasi violato il limite massimo di perdita giornaliera” per uscire automaticamente da tutte le posizioni e cancellare tutti gli ordini in sospeso. Per quanto riguarda la “perdita massima”, dipende davvero dalla tua strategia e dalla gestione del rischio, quindi non la menzionerò in questo script MQL5.
//+------------------------------------------------------------------+ //| Funzioni di Supporto per Prop Firm | //+------------------------------------------------------------------+ // Cancella tutti gli ordini in sospeso e chiudi 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); } } // Controlla se abbiamo raggiunto l'obiettivo di profitto bool isPassed() { return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA; } // Controlla se stiamo per superare il limite massimo di perdita 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 attuale double current_balance = AccountInfoDouble(ACCOUNT_BALANCE); // Ottieni i profitti e le perdite delle operazioni chiuse di oggi 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 non riuscito, nessuna cronologia delle operazioni"); break; } double profit = HistoryDealGetDouble(ticket,DEAL_PROFIT); if (profit != 0) { // Ottieni la data e l'ora dell'operazione MqlDateTime deal_time; TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time); // Controlla l'ora dell'operazione 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 che dobbiamo specificare sono:
input string dd = "-------------SFIDA PROP FIRM-----------------"; input bool isChallenge = false; input double PASS_CRITERIA = 110100; input double DAILY_LOSS_LIMIT = 4500;
Spero che troviate utili questi valori in questo script.
Commento 0