Stratégie de Casse avec Fonctions d'Aide pour Firmes Prop - Expert pour MetaTrader 5

Mike 2024.05.11 12:45 13 0 0
Pièce jointe

Salut à tous,

Voici une mise à jour de la stratégie de casse Simple mais Efficace. Dans ce code, j'ai ajouté quelques fonctions d'aide pour les défis des firmes prop.

En général, pour réussir un défi de firme prop, il faut satisfaire trois critères principaux :

  • Objectif de profit
  • Ne pas dépasser la perte maximale quotidienne
  • Ne pas dépasser la perte maximale

Dans ce code, j'ai inclus deux fonctions pour vérifier si l'on a atteint l'« objectif de profit » et si l'on est sur le point de dépasser la « perte maximale quotidienne ». Ces fonctions permettent de sortir automatiquement de toutes les positions et de supprimer toutes les ordres en attente. Quant à la « perte maximale », cela dépend vraiment de votre stratégie et de votre gestion des risques, donc je ne l'ai pas mentionnée dans ce script MQL5.

//+------------------------------------------------------------------+
//| Fonctions d'Aide pour Firmes Prop                                       |
//+------------------------------------------------------------------+

// Supprime toutes les ordres en attente et ferme toutes les positions
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);
   }
}

// Vérifie si nous avons atteint l'objectif de profit
bool isPassed()
{
   return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA;
}

// Vérifie si nous allons dépasser la perte maximale quotidienne
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;
   
   // Solde actuel
   double current_balance = AccountInfoDouble(ACCOUNT_BALANCE);
   
   // Obtenir le PL des trades fermés aujourd'hui
   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("Échec de HistoryDealGetTicket, aucune historique de trade");
         break;
      }
      double profit = HistoryDealGetDouble(ticket,DEAL_PROFIT);
      if (profit != 0)
      {
         // Obtenir la date et l'heure de la transaction
         MqlDateTime deal_time;
         TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time);
         // Vérifier la date de la transaction
         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;
}

Les paramètres à spécifier sont :

input string dd = "-------------DÉFI DE LA FIRM PROP-----------------";
input bool   isChallenge = false;
input double PASS_CRITERIA = 110100.;
input double DAILY_LOSS_LIMIT = 4500.;

J'espère que vous trouverez de la valeur dans ce script.


Liste
Commentaire 0