Discussion de l'article "Guide étape par étape pour rédiger un conseiller expert en MQL5 pour les débutants" - page 27

 
Rustam Ayupov #:

Cher Vladimir ! Je suis arrivé à votre travail titanesque pour les nuls, mes priorités changent, le trading démo sera son propre chemin, et la chose principale maintenant est votre école pour les débutants, je mâche de précieux squeezes de votre expérience, c'est inestimable, il n'y a pas de mots. Si j'arrive à comment insérer un stop suiveur dans cet EA, je le ferai probablement en priorité, car du fait de l'optimisation à terme, l'EA crée des takeprofits longs, leur filet de sécurité est devenu criant. Et au cours de la formation dans votre école, j'apprendrai probablement à voir les erreurs, sans lesquelles il n'y a pas de programmes qui fonctionnent, et à les corriger. JE VOUS REMERCIE.

Sincèrement, Rustam.

De rien, Rustam !

Avec tout le respect que je vous dois, Vladimir.

 
Valeriy Yastremskiy #:

Répondre ou Nouveau commentaire, au bas de la page Joindre un fichier.

MERCI pour cette ingénieuse simplicité) Et une question, comment feriez-vous, avec votre expérience du trailing, pour insérer l'un de ces éléments dans cet EA ?

 
MrBrooklin #:

S'il vous plaît, Rustam !

Cordialement, Vladimir.

J'ai trouvé une "méthode de suivi" unique, simple et géniale, de l'Expert Advisor, l'auteur lui-même, qui, comme c'est la tradition pour ce développement, n'est pas exécutée comme l'auteur l'a commenté. Il a promis que lorsque le prix s'inverse, la position précédemment ouverte est fermée, eh bien, oui, ce serait génial si c'était le cas... mais seules deux positions ouvertes sont suspendues, dans les deux sens, et ne sont pas fermées. Plus tôt, avant votre premier conseil, il y avait une salve de positions ouvertes dans les deux sens, qui n'étaient pas fermées. Essayez de presser cette cerise sur le gâteau ?

 
Rustam Ayupov #:

MERCI pour cette ingénieuse simplicité) Et une question, comment feriez-vous, avec votre expérience du trailing, pour en insérer un dans cet EA ?

Si le résultat avec le trailing est meilleur que sans, alors laissez-le.

 
Valeriy Yastremskiy #:

Si le résultat est meilleur avec le chalut que sans, il faut le laisser.

Il n'est pas difficile d'insérer, mais que faut-il insérer ? Tester et évaluer.

 
Rustam Ayupov #:

Il n'est pas difficile de le mettre en place, mais qu'est-ce qu'il faut mettre en place ? Pour le tester.

Le code de chalutage est introduit dans votre EA sans chalutage. Il est préférable de mettre le code du chalut dans une fonction. Et appeler le trawl par condition, s'il y a un ordre.

 
Rustam Ayupov #:

J'ai trouvé une "méthode de suivi" unique, simple et géniale, de l'Expert Advisor, l'auteur lui-même, qui, comme c'est la tradition pour ce développement, n'est pas exécutée comme l'auteur l'a commenté. Il a promis que lorsque le prix s'inverse, la position précédemment ouverte est fermée, eh bien, oui, ce serait bien si c'était le cas... mais seules deux positions ouvertes sont suspendues, dans les deux sens, et ne sont pas fermées. Plus tôt, avant votre premier conseil, il y avait une salve de positions ouvertes dans les deux sens, qui n'étaient pas fermées. Essayez de presser cette cerise sur le gâteau ?

Bonjour, Rustam ! Pour que nous puissions continuer à coopérer de manière productive, vous devez d'abord apprendre à joindre à votre message le code de l'EA qui pose problème. Si vous rencontrez des problèmes en testant l'EA, vous devez enregistrer ce code sous un nouveau nom, le compiler et le joindre au message. Vous devez enregistrer l'EA sous un nouveau nom et le compiler !!! Sinon, nous nous embrouillerons dans différentes variantes lorsque nous communiquerons avec vous.

Si, pour une raison quelconque, vous ne pouvez pas joindre le code de l'EA, vous pouvez utiliser une autre méthode :

  1. Dans MetaEditor, mettez en évidence le code de l'EA qui pose problème en appuyant sur Ctrl+A.
  2. Copiez le code de l'AE en appuyant sur le bouton Ctrl+C.
  3. Créez un message que vous souhaitez publier ici sur le forum et, en appuyant sur le bouton AL+S, ouvrez un champ où vous devez coller le code copié en appuyant sur le bouton Ctrl+V.
  4. Ajouter votre message au forum

Si vous n'apprenez pas à joindre ou à placer dans vos messages le code de l'EA qui pose problème, le dialogue avec vous sera inutile.

Cordialement, Vladimir.

 
MrBrooklin #:

Bonjour, Rustam ! Pour que nous puissions continuer à coopérer de manière productive, vous devez d'abord apprendre à joindre à un message le code de l'EA qui présente des problèmes. Si vous avez des problèmes en testant l'EA, vous devez enregistrer ce code sous un nouveau nom, le compiler et l'attacher au message. Vous devez enregistrer l'EA sous un nouveau nom et le compiler !!! Sinon, vous et moi allons nous embrouiller dans différentes variantes lorsque nous communiquerons avec vous.

Si, pour une raison quelconque, vous ne pouvez pas joindre le code de l'EA, vous pouvez utiliser un autre moyen :

  1. Dans MetaEditor, mettez en évidence le code de l'EA qui pose problème en appuyant sur Ctrl+A.
  2. Copiez le code de l'AE en appuyant sur le bouton Ctrl+C.
  3. Créez un message que vous souhaitez publier ici sur le forum et, en appuyant sur le bouton AL+S, ouvrez un champ où vous devez coller le code copié en appuyant sur le bouton Ctrl+V.
  4. Ajoutez le message au forum

Si vous n'apprenez pas à joindre ou à poster le code EA avec les problèmes dans vos messages, le dialogue avec vous sera inutile.

Cordialement, Vladimir.

Désolé pour le retard, je me suis épuisé pendant le week-end, mais j'ai trouvé la cause du dernier problème, comme il s'est avéré que le courtier FXopen, n'a tout simplement pas grandi avec MT5. Il m'a appris la simplicité de la sélection des fichiers à envoyer. Les deux premiers sont votre optimisation du travail de l'auteur, où vous avez arrêté l'inattention de l'auteur dans le code, avec l'ouverture massive de positions, au lieu d'une, une seule, les deux seconds sont sa déclaration de fermeture d'une position lorsque le prix s'inverse. La deuxième vaut la peine d'être travaillée, après tout, l'auteur, s'il n'a pas fini, mais a voulu rentabiliser).

 
Rustam Ayupov #:

Désolé pour le retard, au cours du week-end brûlé, 24 heures, mais a trouvé la cause du dernier problème, comme il s'est avéré que le courtier FXopen, n'a tout simplement pas grandi à MT5. Il m'a appris la simplicité de la sélection des fichiers à envoyer. Les deux premiers sont votre optimisation du travail de l'auteur, où vous avez arrêté l'inattention de l'auteur dans le code, avec l'ouverture massive de positions, au lieu d'une, une seule, les deux seconds sont sa déclaration de fermeture d'une position lorsque le prix s'inverse. La deuxième vaut la peine d'être travaillée, après tout, l'auteur, s'il n'a pas fini, mais a voulu rentabiliser).

Eh bien avec celui-ci, le dernier, je suis encore en train de faire le tri, d'essayer de comprendre quelque chose et de commencer à y naviguer, tout en m'assurant de longs takeprofits. Je suis déjà prêt pour les surprises de l'auteur dans le futur, le chemin sera parcouru par celui qui marche).

Dossiers :
 
Rustam Ayupov #:

Eh bien avec ce dernier, je suis encore en train d'essayer de comprendre quelque chose et de commencer à m'y orienter, pour l'instant pour couvrir les bénéfices à long terme. Je suis déjà prêt pour les surprises de l'auteur dans le futur, le chemin sera parcouru par celui qui marche).

Bonjour Rustam ! Je joins la version de travail de cet Expert Advisor au bas du message. Les modifications ont été apportées à cette section du code :

//--- La mise en place de l'ensemble 
   if(Buy_Condition_1 && Buy_Condition_2)
     {
      if(Buy_Condition_3 && Buy_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action = TRADE_ACTION_DEAL;                                  // exécution immédiate de l'ordre
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // dernier prix demandé
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Prise de bénéfice
         mrequest.symbol = _Symbol;                                            // paire de devises
         mrequest.volume = Lot;                                                 // nombre de lots à négocier
         mrequest.magic = EA_Magic;                                             // Commande Numéro magique
         mrequest.type = ORDER_TYPE_BUY;                                        // Ordre d'achat
         mrequest.type_filling = ORDER_FILLING_FOK;                             // Type d'exécution de l'ordre
         mrequest.deviation=100;                                                // Écart par rapport au prix actuel
         //--- envoyer l'ordre
         bool check=OrderSend(mrequest,mresult);
         // obtenir le code de résultat
         if(mresult.retcode==10009 || mresult.retcode==10008) /La demande est terminée ou la commande est passée
           {
            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Buy order request could not be completed -error:",GetLastError());
            ResetLastError();           
            return;
           }
        }
     }
/*
 2. Vérifier la mise en place d'un Short/Sell : MA-8 décroissant vers le bas, 
 cours précédent clôturé en dessous, ADX > 22, -DI > +DI
*/.
//--- Déclarer des variables de type bool pour contenir nos conditions de vente
   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);  // MA-8 en baisse
   bool Sell_Condition_2 = (p_close <maVal[1]);                         // Le cours précédent a clôturé en dessous de MA-8
   bool Sell_Condition_3 = (adxVal[0]>Adx_Min);                         // Valeur ADX actuelle supérieure à la valeur minimale (22)
   bool Sell_Condition_4 = (plsDI[0]<minDI[0]);                         // -DI supérieur à +DI

//--- La mise en place de l'ensemble
   if(Sell_Condition_1 && Sell_Condition_2)
     {
      if(Sell_Condition_3 && Sell_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action=TRADE_ACTION_DEAL;                                // exécution immédiate de l'ordre
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // dernier prix de l'offre
         mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // Prise de bénéfice
         mrequest.symbol = _Symbol;                                          // paire de devises
         mrequest.volume = Lot;                                              // nombre de lots à négocier
         mrequest.magic = EA_Magic;                                          // Commande Numéro magique
         mrequest.type= ORDER_TYPE_SELL;                                     // Ordre de vente
         mrequest.type_filling = ORDER_FILLING_FOK;                          // Type d'exécution de l'ordre
         mrequest.deviation=100;                                             // Écart par rapport au prix actuel
         //--- envoyer l'ordre
         bool check=OrderSend(mrequest,mresult);
         // obtenir le code de résultat
         if(mresult.retcode==10009 || mresult.retcode==10008) /La demande est terminée ou la commande est passée
           {
            Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Sell order request could not be completed -error:",GetLastError());
            ResetLastError();
            return;
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+

Ce qui est surligné en jaune a été ajouté :

&& PositionsTotal()==0

et j'ai également supprimé la condition liée à Buy_opened et Sell_opened :

         // une position ouverte à l'achat ?
         if(Buy_opened)
           {
            Alert("We already have a Buy Position!!!");
            return;    // Ne pas ouvrir une nouvelle position d'achat
           }
.
.
.
         // une position de vente ouverte ?
         if(Sell_opened)
           {
            Alert("We already have a Sell position!!!");
            return;    // Ne pas ouvrir une nouvelle position de vente
           }

Salutations, Vladimir.

Dossiers :