Discussion de l'article "Comment créer votre propre Trailing Stop"

 

Un nouvel article Comment créer votre propre Trailing Stop a été publié :

La règle de base du trader : Laisse que le bénéfice croisse et que les pertes tombent ! Cet article considère l'une des techniques de base, permettant de suivre cette règle - déplacer le niveau d’arrêt protecteur (niveau de stop loss) après avoir augmenté le bénéfice de la position, c'est-à-dire - le niveau Trailing Stop. Vous trouverez la procédure étape par étape pour créer une classe pour le trailing stop sur les indicateurs SAR et NRTR. Chacun pourra insérer ce trailing stop dans ses experts ou l'utiliser de manière autonome pour contrôler les positions dans leurs comptes.

Figure 11. Boutons et indicateurs sur le graphique après le démarrage de Sample_TrailingStop.

Auteur : Dmitry Fedoseev

 

Très utile. Merci à tous.


Steven

 

L'exemple qui suit se solde par une erreur.

 
Veuillez préciser lequel.
 

Programmeurs, de l'aide pour mql5, s'il vous plaît !!!

Est-il possible d'utiliser une fonction de suivi ordinaire comme dans mql4 sans aucune classe ? Tout comme, par exemple, la fonction TradeSizeOptimised est implémentée dans Moving Averages.mq5.

J'ai déjà tout cherché, dans les exemples, les articles, le forum - je n'ai rien trouvé. Je suis déjà complètement perdu.... Peut-être que quelqu'un a une variante prête, je lui en serai très reconnaissant !!! - J'aimerais participer au championnat.

 
Setslav:

Programmeurs, de l'aide pour mql5, s'il vous plaît !!!

Est-il possible d'utiliser une fonction de suivi ordinaire comme dans mql4 sans aucune classe ? Tout comme, par exemple, la fonction TradeSizeOptimised est implémentée dans Moving Averages.mq5.

J'ai déjà tout cherché, dans les exemples, les articles, le forum - je n'ai rien trouvé. Je suis déjà complètement perdu.... Peut-être que quelqu'un a une variante prête, je lui en serai très reconnaissant !!! - J'aimerais participer au championnat.


voilà

int TrailingStop()
  {
   if(PositionSelect(Symbol())) // sélectionner la position
     {
      //MqlTradeRequest m_request ;// déclarer la structure de la demande au serveur
      //MqlTradeResult m_result ;// déclarer la structure de la réponse du serveur
      double Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);                         // écrire le prix de l'offre dans la variable
      double Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);                         // écrire dans la variable prix d'achat
      double OpenPrice=PositionGetDouble(POSITION_PRICE_OPEN);                     // écrire le prix d'ouverture de la position dans la variable
      double PositionSL=PositionGetDouble(POSITION_SL);                            // écrire le niveau de stop loss dans la variable
      double PositionTP=PositionGetDouble(POSITION_TP);                            // écrire le niveau du take profit dans la variable

      if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) // définir le type de position
        {
         if(TrailWhileMinus==true || Bid-OpenPrice>_Point*Trail) // ne pas chaluter jusqu'à ce que nous puissions atteindre le seuil de rentabilité avec le premier transfert d'arrêt.
           {
            if(Bid-PositionSL>Trail*_Point) //Condition de base pour la nécessité de déplacer le stop loss
              {
               //--- écrire des données dans la structure
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Bid-Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                              // envoyer la demande au serveur
              }
           }
        }
      else
        {
         if(TrailWhileMinus==true || OpenPrice-Ask>_Point*Trail) // ne pas chaluter jusqu'à ce que nous puissions atteindre le seuil de rentabilité avec le premier transfert d'arrêt.
           {
            if(PositionSL-Ask>Trail*_Point) //Condition de base pour la nécessité de déplacer le stop loss
              {
               //--- écrire des données dans la structure
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Ask+Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                            // envoyer la demande au serveur
              }
           }
        }
     }
   return(0);
  }
[Supprimé]  
sergey1294:

voici ce qu'il en est

Je suppose (probablement non sans raison) qu'il est préférable de passer le résultat en tant que paramètre :)

Sinon, il n'y a aucun moyen de l'analyser. Ce n'est pas bon en quelque sorte...

PS

Je créerais également deux fonctions - TrailingStopBuy et TrailingStopSell

 
Interesting:

Je suppose (probablement non sans raison) qu'il est préférable de passer le résultat en tant que paramètre :)

Sinon, il n'y a aucun moyen de l'analyser. Ce n'est pas bon en quelque sorte...

PS

Je créerais également deux fonctions - TrailingStopBuy et TrailingStopSell.

Bon, j'ai donné un exemple à la personne, parce qu'elle s'est déjà fait le cerveau sur la façon d'écrire un trailing ordinaire, et ensuite je l'ai laissé penser un peu que cela fonctionnerait sans erreurs, dans le testeur en principe et cette construction fonctionne normalement. dans la vie réelle, cela n'a pas été vérifié.
[Supprimé]  
sergey1294:
Je lui ai donné un exemple, parce qu'il s'est déjà fait la main sur la façon d'écrire une ligne de fuite ordinaire, et je l'ai laissé réfléchir un peu, ce qui fonctionnerait sans erreurs, dans le testeur en principe, et cette conception fonctionne très bien.
A titre d'exemple bien sûr, mais si sans analyser le résultat il y aura beaucoup d'erreurs (tôt ou tard)...
 
sergey1294:

Voilà.

merci !
 

sergey1294,

Merci encore, tout fonctionne ! !!

Il y a encore une petite question, comment ajouter un contrôle par numéro magique à la fonction ? J'essaie d'insérer un tel contrôle :

if (OrderGetInteger(ORDER_MAGIC)==EA_Magic)
{
.....
}
..... mais il y a quelque chose qui casse tout le commerce.....