Breakout Strategie met Prop Firm Helper Functies voor MetaTrader 5

Mike 2024.05.11 12:45 18 0 0
Bijlage

Hallo allemaal,

Vandaag wil ik een update geven over de Eenvoudige maar Effectieve Breakout Strategie. In deze code heb ik enkele helperfuncties toegevoegd die handig zijn voor prop firm uitdagingen.

Over het algemeen moet je om een prop firm uitdaging te doorstaan aan drie hoofdcriteria voldoen:

  • Target winst
  • Maximale dagelijkse verlies niet overschrijden
  • Maximaal verlies niet overschrijden

In deze code heb ik twee functies toegevoegd die controleren op "Target winst" en "Bijna maximale dagelijkse verlies overschrijden". Deze functies zorgen ervoor dat alle posities automatisch worden gesloten en dat alle openstaande orders worden verwijderd. Wat betreft het "maximale verlies", dat hangt echt af van jouw strategie en risicobeheer, dus dat wordt niet vermeld in dit MQL5-script.

//+------------------------------------------------------------------+
//| Prop Firm Helper Functies                                       |
//+------------------------------------------------------------------+

// Verwijder alle openstaande orders en sluit alle posities
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);
   }
}

// Controleer of we het winstdoel hebben bereikt
bool isPassed()
{
   return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA;
}

// Controleer of we bijna de maximale dagelijkse verlies overschrijden
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;
   
   // Huidige balans
   double current_balance = AccountInfoDouble(ACCOUNT_BALANCE);
   
   // Verkrijg de gesloten handelsresultaten van vandaag
   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 mislukt, geen handelsgeschiedenis");
         break;
      }
      double profit = HistoryDealGetDouble(ticket,DEAL_PROFIT);
      if (profit != 0)
      {
         // Verkrijg de deal datum en tijd
         MqlDateTime deal_time;
         TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time);
         // Controleer de deal tijd
         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;
}

De parameters die we moeten instellen zijn:

input string dd = "-------------PROP FIRM UITDAGING-----------------";
input bool   isChallenge = false;
input double PASS_CRITERIA = 110100;
input double DAILY_LOSS_LIMIT = 4500;

Ik hoop dat je iets waardevols uit dit script kunt halen.


Lijst
Reactie 0