Accueil Trading Systématique Publication

Optimisez votre Trading avec un Stop Suivant sur MetaTrader 5

Pièce jointe
49021.zip (1.31 KB, Télécharger 0 fois)

Ce bloc de code fonctionne que vous utilisiez un Stop Loss ou non.

Prérequis

  • Vous devez inclure "Trade.mqh" pour accéder à la classe CTrade qui vous permet de gérer les positions et les ordres.
#include <Trade\Trade.mqh> // <<------------------------------------------ Incluez ce "Trade.mqh" pour accéder à la classe CTrade 
  • Vous devez définir un paramètre d'entrée pour ajuster la distance de suivi comme vous le souhaitez. Ce n'est pas nécessaire, mais c'est plus pratique.
input double Traling_Step = 3.0;
  • Vous devez créer une instance de la classe CTrade. Le nom peut être n'importe quel. Il est préférable de la définir après le gestionnaire d'événements OnInit.

  • Ensuite, vous devez créer une instruction if pour vérifier s'il y a une position ouverte à ce moment. Cette instruction appelle la fonction Check_TrailingStop(); pour chaque tick. C'est important car l'EA doit suivre de manière précise et fluide. N'oubliez pas de placer cette instruction en haut du gestionnaire d'événements OnTick pour qu'elle fonctionne correctement.
//+------------------------------------------------------------------+ //| Fonction d'initialisation de l'Expert | //+------------------------------------------------------------------+ int OnInit() { //--- créer un timer EventSetTimer(60); return(INIT_SUCCEEDED); } CTrade trade; // <<------------------------------------------ Déclarez la classe "CTrade". Vous pouvez remplacer "trade" par le nom de votre choix 
void OnTick() { if(PositionsTotal() > 0) { // appelle la fonction de stop suiveur pour chaque tick s'il y a des positions ouvertes Check_TralingStop(); } }
  • Vous devez déclarer une fonction personnalisée appelée Check_TrailingStop(); (dans ce cas ) pour faire le reste. Vous pouvez utiliser n'importe quel nom que vous souhaitez.
  • Cette fonction personnalisée parcourt toutes les positions ouvertes et les suit selon la distance requise.
void Check_TralingStop() { int totalPositions = PositionsTotal(); for(int count = 0; count < totalPositions; count++) { ulong TicketNo = PositionGetTicket(count); // Obtenez le numéro de ticket de la position en utilisant l'index de la position. if(PositionSelectByTicket(TicketNo)) { // Sélectionnez une position en utilisant le numéro de ticket (nous avons déjà récupéré le numéro de ticket). if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { // Vérifiez le type de position. double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); // <<-------------------Obtenez le Stop Loss actuel de la position double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(bidPrice - (Traling_Step * Point()), _Digits); if(stopLoss < openPrice) { // Pas de stop loss est vrai. if(bidPrice > openPrice && trailingLevel > openPrice) { // S'exécute une seule fois par position. Définit le premier SL. trade.PositionModify(ticket, trailingLevel, takeProfit); // Modifiez le Stop suiveur en utilisant "CTrade.trade" } } if(bidPrice > openPrice && trailingLevel > stopLoss) { // vérifiez que le niveau de suivi est au-dessus du niveau précédent. trade.PositionModify(ticket, trailingLevel, takeProfit); // Modifiez le Stop suiveur en utilisant "CTrade.trade" } } if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID); double askPrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(askPrice + (Traling_Step * Point()), _Digits); if(stopLoss < openPrice) { if(askPrice < openPrice && trailingLevel < openPrice) { // S'exécute une seule fois par position. Définit le premier SL. trade.PositionModify(ticket, trailingLevel, takeProfit); // Modifiez le Stop suiveur en utilisant "CTrade.trade" } } if(askPrice < openPrice && trailingLevel < stopLoss) { // vérifiez que le niveau de suivi est au-dessus du niveau précédent. trade.PositionModify(ticket, trailingLevel, takeProfit); // Modifiez le Stop suiveur en utilisant "CTrade.trade" } } } } }










    Articles connexes

    Commentaire (0)