Questions de base d'un nouvel arrivant

 

Bonjour à tous !

Je dois préciser que j'ai essayé de poser ces questions dans le fil de discussion correspondant ici, mais que, pour une raison ou une autre, la question n'a pas reçu l'attention qu'elle méritait. Bien que, me semble-t-il, les sujets abordés touchent/émergent au moins une fois dans l'esprit de nombreuses personnes. Un peu comme les questions de la FAQ (mais je peux me tromper). Je reproduis ici directement les questions elles-mêmes :

1. Il existe une différenceentre Mql4 et Mql5 (site et langage de programmation). Il existe Metatrade 4 et Metatrader 5 avec Mql4 et Mql5 respectivement. Il existe également deux sites web différents correspondants. En même temps, tous les conseillers experts que j'ai examinés dans MT4 mènent à ce site. Laquelle est la plus pertinente ? Quel forum est le plus "vivant" ? Quel est le meilleur endroit pour poser des questions ? Existe-t-il une rétrocompatibilité entre les différentes versions de MT et Mql ? Personnellement, je suis en train d'écrire mon conseiller expert MT4 sur Mql4 respectivement. Cela est dû au fait que le courtier que j'utilise pour tester la démo utilise MT4. Comment puis-je identifier la langue dans laquelle mon Expert Advisor est écrit ? Je veux dire par extension seulement (.mq4 et .mq5). Si je renomme un fichier, est-ce qu'il sera compilé (encore une fois, à propos de la compatibilité) ?

2. Paramètres du conseiller expert externe dynamique. Est-il possible de modifier dynamiquement les paramètres réglables d'un Expert Advisor ? Laissez-moi vous expliquer... Par exemple, il existe un paramètre externe extern bool a. Si c'est le cas, un paramètre supplémentaire extern int b doit être défini. Si a=false, le paramètre b n'est pas nécessaire. Existe-t-il un moyen de l'afficher ou non en fonction de la valeur actuelle d'une sélection ? En tenant compte du fait que je n'ai pu trouver aucun gestionnaire de changement de paramètre externe et qu'il n'y a pas de #if ... #endif, je soupçonne que cela ne peut pas être fait... Dans l'affirmative, mais pourriez-vous suggérer la meilleure façon de procéder dans cette situation, afin de ne pas surcharger le processus de définition des paramètres externes ? Par exemple, je peux mettre a=false, oublier que le paramètre b n'est pas utilisé, mais l'inclure quand même dans l'optimisation (bien que cela ne serve à rien, cela ne ferait que perdre du temps supplémentaire). Et c'est une chose quand il n'y a qu'un seul paramètre de ce type b. Mais si, par exemple, je fais un paramètre externe de type enum et qu'il y a plusieurs variantes de TC dans la liste déroulante. Ils ont une partie commune (il est donc logique de les mettre en œuvre dans un seul EA, plutôt que d'en écrire plusieurs), mais il en existe aussi différents avec de nombreux paramètres différents. Il est alors très facile de confondre les paramètres qui sont pertinents pour le TS sélectionné.

Optimisation automatique du conseiller expert. IMHO, c'est très utile et utile. J'ai trouvé ici un article sur l'optimisation automatisée du robot de trading dans le trading réel. Cependant, d'après ce que j'ai compris, une deuxième instance de MT est utilisée pour l'optimisation depuis l'extérieur (depuis une instance de MT en cours d'exécution) et les résultats de l'optimisation sont lus dans un rapport sous forme de html. Ce n'est pas très pratique et c'est tordu. Logiquement, je devrais écrire ma propre fonction/dll d'optimisation et l'exécuter directement depuis le conseiller expert. Voici donc la question. D'après ce que j'ai compris, un algorithme d'optimisation génétique a été programmé dans le testeur de stratégie. Je connais très brièvement ces algorithmes. Mais ils sont connus depuis longtemps, d'où la question - pourquoi réinventer la roue ?). Existe-t-il un algorithme prêt à l'emploi qui soit utilisé directement dans la TA ? Peut-être existe-t-il déjà quelque part dans les bibliothèques du terminal lui-même... Il existe peut-être un code source distinct ou une dll prête à l'emploi. En général, veuillez partager votre expérience en la matière.

Merci d'avance pour les réponses à une partie au moins de ces questions.

 
gammaray:

Bonjour à tous !

Je dois préciser que j'ai essayé de poser ces questions dans le fil de discussion correspondant ici, mais que, pour une raison ou une autre, la question n'a pas reçu l'attention qu'elle méritait. Bien que, me semble-t-il, les sujets abordés touchent/émergent au moins une fois dans l'esprit de nombreuses personnes. Un peu comme les questions de la FAQ (mais je peux me tromper). Je reproduis ici directement les questions elles-mêmes :

1. Il existe une différenceentre Mql4 et Mql5 (site et langage de programmation). Il existe Metatrade 4 et Metatrader 5 avec Mql4 et Mql5 respectivement. Il existe également deux sites web différents correspondants. En même temps, tous les conseillers experts que j'ai examinés dans MT4 mènent à ce site. Laquelle est la plus pertinente ? Quel forum est le plus "vivant" ? Quel est le meilleur endroit pour poser des questions ? Existe-t-il une rétrocompatibilité entre les différentes versions de MT et Mql ? Personnellement, je suis en train d'écrire mon conseiller expert MT4 sur Mql4 respectivement. C'est parce que le courtier que j'utilise pour tester la démo utilise MT4. ...

...

Il serait logique de placer mes questions relatives au MQL4 dans le "quatrième" forum. Bien que la différence entre MQL5 et MQL4 ne soit pas très significative. Nous sommes passés de MQL4. Par conséquent, si vous souhaitez poser une question sur le "4" dans ce forum, vous devez préciser dans l'intitulé du sujet qu'elle concerne MT4. Ce sera plus clair de cette façon.


... Comment déterminer la langue dans laquelle le conseiller expert est écrit ? Je veux dire, seulement par l'extension (.mq4 et .mq5). Et si le fichier est renommé, sera-t-il compilé (encore une fois, question de compatibilité) ?

...

Quant à l'extension. Il y a des fichiers qui, après avoir été renommés, se compilent bien et fonctionnent à la fois dans MT4 et MT5 - il n'y a pas de recettes générales ici.
 
Karputov Vladimir:

Il est logique d'adresser les questions relatives au MQL4 au "quatrième" forum. Bien que les différences entre le MQL5 et le MQL4 ne soient pas significatives. C'est une transition depuis MQL4. Par conséquent, si vous souhaitez poser une question sur le "4" dans ce forum, vous devez préciser dans l'intitulé du sujet qu'il s'agit de MT4. Ce sera plus clair de cette façon.


Concernant l'extension. Si vous ne disposez pas d'un compte MT4 ou MT5 avec un fichier MT4 ou MT5, vous pouvez l'utiliser comme prérequis pour un robot de trading et vous n'avez pas besoin d'un robot spécifique.
Seule la première question concerne mql4, les autres sont, à mon avis, communes à mql4 et mql5. Merci pour la réponse à la première question ;) C'est surtout la deuxième question qui m'intéresse. Et, à mon avis, la troisième question peut être intéressante pour tous les développeurs d'EA.)
 
Pour la deuxième question, voir input, sinput, ParametrGetRange(...), ParametrSetRange(...).
 
Vladimir Kazakov:
Pour la deuxième question, voir input, sinput, ParametrGetRange(...), ParametrSetRange(...).

Je n'ai pas demandé comment définir les paramètres externes du conseiller expert. J'ai appris à le faire il y a longtemps (input, extern). J'ai demandé comment et s'il est possible de modifier dynamiquement l'ensemble des paramètres affichés dans les réglages. ParametrGetRange et ParametrSetRange sont introuvables dans mql. Ce ne sont pas des fonctions intégrées ? Où les chercher ?

P.S. L'utilisation de sinput peut être utilisée uniquement comme un indice que le paramètre ne peut pas être optimisé par lui-même sans être lié à d'autres paramètres. Mais je ne peux même pas changer dynamiquement l'entrée en entrée en fonction des paramètres que j'ai déjà choisis pour suggérer les paramètres à récupérer dans l'optimisation (quels paramètres sont significatifs étant donné les paramètres choisis) afin de ne pas perdre de temps à passer en revue les paramètres qui n'ont actuellement aucun sens.

 

Rien ne peut être modifié par programme dans l'onglet "Paramètres". Vous pouvez ignorer le jeu de paramètres désactivé en renvoyant INIT_PARAMETERS_INCORRECT à partir de OnInit().

Vous pouvez modifier les autorisations de démarrage, d'étape, d'arrêt et d'optimisation de manière programmatique : https://www.mql5.com/ru/docs/optimization_frames.

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Работа с результатами оптимизации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Kazakov:

Rien ne peut être modifié par programme dans l'onglet des paramètres. Un jeu de paramètres désactivé ne peut pas être sauté - un stub peut être activé afin de ne pas effectuer de calculs inutiles.

Vous pouvez modifier la résolution de démarrage, d'étape, d'arrêt et d'optimisation de manière programmatique : https://www.mql5.com/ru/docs/optimization_frames.

Ces fonctions sont apparemment apparues dans mql5 car je ne les ai pas trouvées dans l'aide de mql4. Mais il y a aussi la question de la compatibilité. Si j'écris un EA dans Metatrader 5, puis-je l'utiliser dans Metatrader 4 ? Cela semble peu probable. Si surtout j'utilise les nouvelles fonctions introduites dans mql5. Est-ce que mql5 a des fonctions pour exécuter l'optimisation (c'est juste le sujet de ma question 3) ?
 

Le sujet s'appelle "questions de base d'un débutant", et en tant que débutant, je ne comprends rien. C'est ici que j'obtiendrai une réponse à ma question élémentaire (ou plutôt, je l'espère). J'ai essayé de suivre un guide étape par étape pour écrire mon conseiller expert. Je suis resté bloqué sur l'aspect de comment fermer de force une position ouverte dans MKL5 (sans attendre le SL ou le TP), lorsqu'un certain signal d'indicateur apparaît, comme à l'intersection de deux MAs, ou lorsque le rétrécissement des lignes de Bollinger ou d'autres signaux ? Il doit exister une fonction comme ClosePos(), mais où est-elle et comment l'obtenir ? Je demande un morceau de code détaillé, car moi-même je ne comprends pas les nuances - je suis encore un bébé dans MKL5.

 
doublezero:

Le sujet s'appelle "questions de base d'un débutant", et en tant que débutant, je ne comprends rien. C'est ici que j'obtiendrai une réponse à ma question élémentaire (ou plutôt, je l'espère). J'ai essayé de suivre un guide étape par étape pour écrire mon conseiller expert. Je suis resté bloqué sur l'aspect de comment fermer de force une position ouverte dans MKL5 (sans attendre le SL ou le TP), lorsqu'un certain signal d'indicateur apparaît, comme à l'intersection de deux MAs, ou lorsque le rétrécissement des lignes de Bollinger ou d'autres signaux ? Il doit exister une fonction comme ClosePos(), mais où est-elle et comment l'obtenir ? Je demande un extrait de code détaillé, car je ne comprends pas moi-même les nuances - dans MKL5 est encore un bébé.

Je suis moi-même confronté à ce problème depuis moins d'un mois. La question est de savoir si vous voulez le faire vous-même ou le demander sur le forum. Les questions simples ne sont généralement pas posées, parce que ce n'est pas très bon (vous pouvez regarder dans l'aide, chercher des réponses toutes faites sur Internet). C'est pourquoi j'ai posé ces questions assez poussées qui sont apparues au cours de ce mois. Quant à votre question... La fonction OrderClose est appelée. Il existe de nombreux exemples de son utilisation. C'est dans l'échantillon MACD intégré. Voici le code utilisé pour fermer les ordres par les signaux MACD (voici un exemple de code pour l'implémentation du Trailing Stop).


//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderType()<=OP_SELL &&   // check for opened position
         OrderSymbol()==Symbol())  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {
            //--- should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*Point))
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {
            //--- should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
        }
     }


Et, en général, il suffit de taper le mot "Ordre" dans l'"Index" et toutes les fonctions concernant la gestion des ordres y seront affichées.
 
gammaray:

Je le fais moi-même depuis moins d'un mois. La question est de savoir si vous voulez le faire vous-même ou si vous voulez poser des questions sur le forum. Je n'ai pas l'habitude de poser des questions simples, car ce n'est pas vraiment approprié (vous pouvez faire quelques recherches dans le service d'assistance ou sur Internet pour trouver des réponses). C'est pourquoi j'ai posé ces questions assez poussées qui sont apparues au cours de ce mois. Quant à votre question... La fonction OrderClose est appelée. Il existe de nombreux exemples de son utilisation. C'est dans l'échantillon MACD intégré. Voici le code utilisé pour fermer les ordres par les signaux MACD (voici un exemple de code pour implémenter le mécanisme de Trailing Stop).



Merci pour cette réponse si rapide ! J'ai pensé qu'il serait probablement donné par quelqu'un qui a été confronté à ce genre de choses depuis longtemps.

Sauf que OrderClose est dans MKL4, mais pas dans MKL5. Il n'y a que la fonctionPositionClose dans la classe CTrade de la bibliothèque standard. Et je ne vois pas du tout comment la faire sortir de là. Je pense que pour cela, vous devez appeler d'une manière ou d'une autre d'un code à la bibliothèque, puis à la classe CTrade...... Dans l'ensemble, c'est une forêt sombre pour moi. Je n'avais pas l'intention d'étudier le MKL5, j'ai simplement décidé d'automatiser ma stratégie plutôt réussie (pour moi), et j'ai donc commencé à suivre les instructions étape par étape. Et maintenant je suis coincé...

 
doublezero:

Merci pour cette réponse si rapide ! Je pensais que ça viendrait probablement de quelqu'un qui est nouveau dans ce domaine.

Sauf que OrderClose est dans MKL4, mais MKL5 ne l'a pas. Il n'y a que la fonctionPositionClose dans la classe CTrade de la bibliothèque standard. Et je ne vois pas du tout comment la faire sortir de là. Je pense que pour cela, vous devez appeler d'une manière ou d'une autre d'un code à la bibliothèque, puis à la classe CTrade...... Dans l'ensemble, c'est une forêt sombre pour moi. Je n'avais pas l'intention d'étudier le MKL5, j'ai simplement décidé d'automatiser ma stratégie plutôt réussie (pour moi), et j'ai donc commencé à suivre les instructions étape par étape. Et maintenant je suis coincé...

J' avais raté quelque chose dans mql 5, je ne veux pas utiliser OrderSend, tout est fait là (y compris la fermeture). Là encore, MT5 dispose du même échantillon MACD. Mais il faut 10 fois plus de lignes...
Ошибка закрытия ордера
Ошибка закрытия ордера
  • www.mql5.com
Скажите а есть отдельная команда по закрытию позиции или только встречная позиция? - - Категория: эксперты форекс, торговые роботы и советники