MetaTrader4
Optimisez vos trades avec le Trailing Stop sur MetaTrader 4
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.
2021.03.30