Le trailing stop est un outil essentiel pour sécuriser nos trades. Il permet de déplacer le stop loss dans la zone de profit, garantissant ainsi que nous protégeons nos gains de manière automatique.
Commençons par coder les paramètres d'entrée pour notre trailing stop.
input bool isTrailingStop = true; // Trailing Stop input int trailingStart = 15; // Début du Trailing (pips) input int trailingStep = 5 // Pas du Trailing (pips) input int MagicNumber = 0; // Numéro Magique
Variable globale
// Variable Globale double myPoint = 0.0;
Lorsque nous exécutons cet Expert Advisor, la fonction OnInit() sera exécutée pour la première fois. Dans cette fonction, nous allons valider et initialiser les variables d'entrée.
int OnInit() { if (isTrailingStop && trailingStart <= 0){ Alert ("Paramètres incorrects"); return(INIT_PARAMETERS_INCORRECT); } myPoint = GetPipPoint(Symbol()); return(INIT_SUCCEEDED); }
Chaque fois qu'un mouvement de prix (tick) se produit sur le graphique où cet EA est associé, la fonction OnTick() sera exécutée. À l'intérieur de cette fonction, nous allons appeler la fonction setTrailingStop().
void OnTick() { //--- setTrailingStop(MagicNumber); }
Fonction setTrailingStop()
void setTrailingStop(int magicNumber=0){ if (isTrailingStop==false) return; int tOrder = 0; string pair = ""; double sl = 0.0, tp = 0.0; pair = Symbol(); tOrder = OrdersTotal(); for (int i=tOrder-1; i>=0; i--){ bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){ if (OrderType() == OP_BUY){ if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice() && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() ) ){ sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits()); if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ Print ("#", OrderTicket(), " échec de la mise à jour du sl"); } } } if (OrderType() == OP_SELL){ if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice() && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0) ) { sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() ); if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ Print ("#", OrderTicket(), " échec de la mise à jour du sl"); } } } // fin if magicNumber }// fin for }
Une autre fonction standard requise est GetPipPoint()
// Fonction GetPipPoint double GetPipPoint(string pair) { double point= 0.0; int digits = (int) MarketInfo(pair, MODE_DIGITS); if(digits == 2 || digits== 3) point= 0.01; else if(digits== 4 || digits== 5) point= 0.0001; return(point); }
Si vous avez des questions, n'hésitez pas à les poser dans les commentaires ou à rejoindre notre groupe de partage (t.me/codeMQL).
N'oubliez pas de jeter un œil à notre application SignalForex pour vous aider à trader de manière plus rentable.
Vous pouvez nous soutenir en téléchargeant l'application SignalForex sur Google Play.
Articles connexes
- Utiliser MQL5 Wizard pour Créer un Expert Advisor Basé sur les Modèles de Chandeliers Englobants et MFI
- Développez un Expert Advisor avec MQL5 : Signaux de Trading 3 Corbeaux Noirs / 3 Soldats Blancs + RSI
- Découvrez l'Expert Advisor exp_iCustom_v5 pour MetaTrader 4
- Découvrez le Système de Trading Exp_XPeriodCandle_X2 pour MetaTrader 5
- RRS Impulse : L'Expert EA Indispensable pour MetaTrader 4