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.
Commentaire 0