Discussion de l'article "Rédaction d'un Expert Advisor à l'aide de l'approche de programmation orientée-objet MQL5"
En général, ce n'est pas mal, mais c'est un peu boiteux en ce qui concerne le slogan OOP utilisé dans le nom. Par exemple, pourquoi le stoploss, le take et le price sont-ils placés en dehors de la classe ? STP et TKP devraient être des membres, nous avons besoin de la méthode setSLTP ; latest_price et levels devraient être pris en compte dans openBuy/openSell. Ils sont eux-mêmes écrits de manière très irrationnelle - il est souhaitable de ne laisser qu'un seul if avec appel MarginOK, et à l'intérieur de celui-ci ajouter la première ligne de la vérification if(Chk_Margin == 0) return(true) ;
Et encore une petite chose. Pourquoi Chk_Margin est-il déclaré comme int-, alors qu'il n'est utilisé que comme bool ? Il serait préférable de le décrire par un type minimal suffisant, sinon on peut se demander, en lisant le code source, ce qui se passera si Chk_Margin == 2, 3, etc.
Avec la paire spécifiée sur la période spécifiée avec les paramètres d'entrée par défaut, vous ne pouvez pas obtenir un graphique de balance aussi beau. L'auteur avait-il d'autres citations ? Pourriez-vous joindre les paramètres d'entrée avec lesquels un tel graphique a été obtenu ?
Quelle devrait être la différence entre les cotations de l'auteur et les vôtres pour que les résultats soient très différents))))))) J'ai obtenu presque la même chose, et le résultat final est même un peu meilleur :
le design est déroutant
if(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4) { return(true); } else { return(false); }
le design est déroutant
Qu'est-ce qui vous déplaît tant ? Bien sûr, je ne l'ai pas vu dans le contexte du code.....
n'est-ce pas ainsi qu'on l'écrit habituellement dans ces cas-là ?
return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
N'est-ce pas ainsi qu'ils l'écrivent habituellement dans de tels cas ?
Je ne comprends pas la partie suivante du code :
// Copie le prix de clôture de la barre précédente (barre 1) dans la variable Expert Advisor correspondante. Cexpert.setCloseprice(mrate[1].close); // prix de clôture de la mesure 1 //--- Vérifier s'il existe une position d'achat if (Cexpert.checkBuy()==true) { if (Buy_opened) { Alert("Nous avons déjà une position à acheter !!!); return; // Ne pas ajouter à la position longue } double aprice = NormalizeDouble(latest_price.ask,_Digits); double stl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); double tkp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); int mdev = 100; // passer la commande Cexpert.openBuy(ORDER_TYPE_BUY,Lot,aprice,stl,tkp,mdev); }Si nous allons ouvrir une position d'achat, nous devrions nous concentrer sur le dernier prixdemandé, mais lorsque nous définissons un Stop Loss et un Take Profit pour une telle position, nous devrions nous concentrer sur le dernier prixoffert. Est-ce correct ? Pourquoi le Stop Loss et le Take Profit sont-ils fixés sur la base du prix d'achat dans le texte du code ? S'agit-il d'une erreur d'impression ou d'une particularité d'une stratégie spécifique (le code a une construction similaire pour l'ouverture d'une position de vente) ?
Je ne comprends pas la partie suivante du code :
Si nous allons ouvrir une position d'achat, nous devrions nous concentrer sur le dernier prixdemandé, mais lorsque nous définissons un Stop Loss et un Take Profit pour une telle position, nous devrions nous concentrer sur le dernier prixoffert. Est-ce exact ? Dans ce cas, pourquoi le Stop Loss et le Take Profit sont-ils fixés sur la base du prix d'achat dans le texte du code ? S'agit-il d'une erreur d'impression ou d'une particularité d'une stratégie spécifique (le code a une construction similaire pour l'ouverture d'une position de vente) ?Voici la logique (probablement, je l'utilise habituellement aussi) :
1. Le prix d'ouverture d' une position d'achat est considéré comme étant le prix d' achat (Ask) (et il est correct) ;
Disons que nous ouvrons à 1,27 sur l'EURUSD.
2. Lors de l'ouverture d'une position, nous obtenons la différence égale au spread, pour l'achat c'est Ask-Bid (perte potentielle si nous clôturons au prix actuel) ;
Supposons que le spread soit égal à 5 pips. Ainsi, l'offre à l'ouverture sera à 1,2695 (n'est-ce pas ?).
3. Les positions longues sont fermées au prix de l'offre (et c'est tout à fait logique).
Ainsi, lorsque l'offre passe à 1,27, nous obtenons un BU sur la position (n'est-ce pas ?).
4. Mais nous devons également obtenir un profit (100 pips dans la cotation standard).
C'est-à-dire que le TP doit être supérieur à l'Open de 100 pips. Dans notre cas, il s'agit de 1,28 (n'est-ce pas ?).
En même temps, le TP sera déclenché si le Bid (et non le Ask) atteint ce 1,28.....
5. Le SL doit également être défini (disons qu'il est de 50 pips). Dans notre exemple, il sera situé à 1,2650 (50 pips en dessous de l'ouverture).
Dans quelles conditions le SL fonctionne-t-il ?
Logiquement, il devrait fonctionner lorsque le prix passe ces mêmes 50 pips contre nous (c'est-à-dire que l'Ask dans les pièces de clôture sur SL devrait logiquement être à ces mêmes 1,2650).
Où devrait se situer le Bid dans ce cas ? Et à ce moment-là, il sera situé à 1,2645 (parce que Spred par la condition que nous avons 5 pips).
En se rappelant que les Longs sont fixes.
6. Maintenant, regardons ce qui se passe réellement (prenons l'ouverture du marché d'une position longue dans MQL4 comme exemple).
//Взято из справки по OrderSend ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-25*Point,Ask+25*Point);
Ce que nous voyons ici
Le prix d'ouverture est considéré comme le prix d'achat, le prix de vente est considéré comme le prix d'achat et le prix de vente est considéré comme le prix d'achat.
Dans notre cas, nous obtiendrons ce modèle.
OrderSend(Symbol(),OP_BUY,1,Open = Ask,3,SL = Bid-50*Point,TP Ask+100*Point);
Remplaçons nos données ici :
OrderSend(Symbol(),OP_BUY,1,1.2700,3,1.2695-50*Point,TP 1.2700+100*Point);
Ce que nous obtenons à la fin - Open = 1.2700 SL= 1.2645 TP 1.28
PS
Comparons avec les données originales :
Ordre - Ouverture = 1,2700 SL= 1,2645 TP 1,28
Modèle - Ouverture = 1.2700 SL= 1.2645 TP 1.28
Il y a ici une logique (très probablement, j'ai tendance à l'utiliser aussi) :
1. Le prix d'ouverture pour Buy est considéré comme Ask (et il est correct) ;
Disons que nous ouvrons à 1,27 sur l'EURUSD
2. Lors de l'ouverture d'une position, nous obtenons la différence égale à l'écart, pour l'achat, c'est Ask-Bid (perte potentielle si nous clôturons au prix actuel) ;
Supposons que l'écart soit égal à 5 pips. Ainsi, l'offre à l'ouverture sera à 1,2695 (n'est-ce pas ?).
5. Le SL doit également être défini (disons qu'il est de 50 pips). Dans notre exemple, il sera situé à 1,2650 (50 pips en dessous de l'ouverture).
Dans quelles conditions le SL sera-t-il déclenché ?
Logiquement, il devrait fonctionner lorsque le prix passe ces mêmes 50 pips contre nous (c'est-à-dire que le Ask en clôture des pièces sur le SL devrait logiquement se situer à ces mêmes 1,2650).
Où devrait se situer le Bid dans ce cas ? Et à ce moment-là, il sera situé à 1,2645 (parce que Spred par la condition que nous avons 5 pips).
Rappelons que les Longs sont fixes.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation

Un nouvel article Rédaction d'un Expert Advisor à l'aide de l'approche de programmation orientée-objet MQL5 a été publié :
Cet article est axé sur l'approche orientée-objet pour faire ce que nous avons fait dans l'article « Guide étape par étape pour écrire un Expert Advisor en MQL5 pour les débutants » : créer un Expert Advisor simple. La plupart des gens pensent que c'est difficile, mais je tiens à vous rassurer qu'au moment où vous aurez fini de lire cet article, vous serez en mesure d'écrire votre propre Expert Advisor qui est orienté-objet.
Alors, quelle est la prochaine étape ?
Est-ce que je vous ai entendu dire, déboguer ? Peut-être que vous avez raison. Il est toujours bon de tester et de voir si votre code contient des erreurs, sinon vous serez déçu lorsque vous le publiez. Le problème ici est que c'est juste un fichier d'inclusion, ce n'est pas un code ou un script de conseiller expert ou code indicateur qui peut être joint au graphique. À ce stade, vous avez deux options (d'après mon expérience),,
Auteur : Samuel Olowoyo