Strategia di Breakout con Funzioni di Supporto per Prop Firm su MetaTrader 5

Mike 2024.05.11 12:45 10 0 0
Allegato

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.


Elenco
Commento 0