Discussion de l'article "Assistant MQL5 : Comment Créer un Module de Signaux de Trading" - page 7
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Dois-je l'ajouter manuellement dans OnInit() ? Je ne peux donc pas faire ce que je veux avec l'assistant ?
Quel est le problème ? Vous introduisez une fonctionnalité supplémentaire, vous devez donc faire un peu de travail manuel.
Aucun problème, mais cela ne correspond pas au concept selon lequel le maître fait tout sur la base de modules personnalisés pour les signaux, le capital, etc. L'article est d'ailleurs dépassé et ce n'est pas vrai :
La méthode CheckCloseLong() génère un signal de fermeture d'une position longue avec détermination du niveau de sortie. Elle est appelée par le conseiller expert pour déterminer la nécessité de fermer une position longue. Il est nécessaire de remplacer la méthode si la génération d'un signal de fermeture d'une position longue est prévue.
Presque 6 ans se sont écoulés et l'article n'est pas dépassé ? Je n'en suis pas sûr, car je vois le terminal mis à jour presque chaque semaine.
Bonjour à tous,
Je me demande comment créer un descendant de CExpertSignal avec les deux motifs "break out" et "break in" d'une fourchette de négociation observée en utilisant l'approche proposée ici ainsi que dans Exploring Trading Strategy Classes of the Standard Library - Customizing Strategie by Harvester. Ma perception est que chaque classe de signal pourrait (devrait) être implémentée en surchargeant
et
Ensuite, nous trouvons
dont le résultat est testé par rapport à signal.m_threshold_open et signal.m_threshold_close dans
Les paramètres spécifiant les niveaux d'entrée sur le marché et la fixation des prix du stop loss et du take profit seraient alors renvoyés par la fonction
qui sont invoqués par l'implémentation standard de bool CExpertSignal::CheckOpenLong(...) et bool CExpertSignal::CheckOpenShort(...) telle que définie dans la classe de base. Il devrait donc suffire de surcharger
pour définir un nouveau signal arbitraire. Notez que CExpertTrade contient le code permettant de détecter si le prix d'entrée souhaité est trop éloigné du prix actuel pour placer des ordres de marché et utilise le choix du prix d'entrée pour décider automatiquement s'il faut placer un ordre stop ou un ordre limite.
Toutefois, si la fourchette de négociation est définie comme étant la région comprise entre le plus haut (HH) et le plus bas (LL) des n dernières barres, la condition LL < prix < HH est toujours vraie. Par conséquent, int CExpertSignal::LongCondition(...) et int CExpertSignal::ShortCondition(...) devraient toujours détecter le modèle 0 "break out" et quelle que soit la valeur associée à ce modèle, la fonction int CExpertSignal::Direction() renverra toujours zéro !
L'approche naturelle qui consiste à surcharger
de telle sorte que la première vérifie
au lieu de
n'a pas encore pu être transformé en une version réussie. Comme indiqué, il serait simple de faire en sorte que bool CExpertSignal::OpenLongParams(...) renvoie le prix d'entrée HH et que bool CExpertSignal::OpenShortParams(...)renvoie le prix d'entrée LL pour compléter le signal en générant continuellement 2 ordres stop.
A mon avis, il est souhaitable d'avoir un exemple montrant comment implémenter cette stratégie break out standard en termes de bibliothèque standard et en la rendant suffisamment flexible en fournissant le modèle alternatif "break in" qui résulte en des ordres limites à LL et HH. Il est évident qu'un tel signal combinerait les stratégies
Il est possible d'utiliser ces stratégies en les fournissant sous forme de modèles. Je vous serais extrêmement reconnaissant de m'aider à finaliser cette approche.
Bonjour à tous,
Je me demande comment créer un descendant de CExpertSignal avec les deux motifs "break out" et "break in" d'une fourchette de trading observée en utilisant l'approche proposée ici ainsi que dans Exploring Trading Strategy Classes of the Standard Library - Customizing Strategie by Harvester. Ma perception est que chaque classe de signal pourrait (devrait) être implémentée en surchargeant les deux fonctions suivantes
Notez que CExpertTrade contient le code permettant de détecter si le prix d'entrée souhaité est trop éloigné du prix actuel pour placer des ordres de marché et utilise le choix du prix d'entrée pour décider automatiquement s'il faut placer un ordre stop ou un ordre limite.
[...]
À mes yeux, il est souhaitable de disposer d'un exemple montrant comment mettre en œuvre cette stratégie break out standard en termes de bibliothèque standard et de la rendre suffisamment flexible en fournissant le modèle alternatif "break in" qui se traduit par des ordres limités à LL et HH. Je serai extrêmement reconnaissant pour toute aide visant à finaliser cette approche.
J'ai décidé de reformuler mes préoccupations afin de les rendre aussi faciles à comprendre que possible. A mes yeux, les deux articles
démontrent en général comment écrire nos propres classes de signaux de la manière la plus simple. Je vais résumer cette perception ci-dessous.
Cependant, j'ai toujours besoin d'une idée pour terminer l'implémentation d'un signal utilisant cette approche pour proposer l'achat/la vente lorsque le prix devient plus haut/plus bas que le prix le plus haut/le plus bas observé au cours des n dernières périodes. Ceci est censé aboutir au placement d'une paire d'ordres stop au-dessus et au-dessous du prix actuel. J'ai déjà essayé d'y parvenir en remplaçant la condition
mais cela ne semble toujours pas fonctionner. Cela n'a aucun sens car j'ai également surchargé les fonctions OpenLongParams(...) et OpenShortParams(...). Elles déterminent les niveaux auxquels placer les ordres stop souhaités. Est-ce que quelqu'un qui connaît mieux les idées des développeurs de MetaQuotes pourrait expliquer comment ils auraient implémenté cette stratégie de break out la plus basique ?
Comme le code source est souvent considéré comme la meilleure documentation d'un logiciel, j'ai passé du temps à analyser la classe CExpertSignal dans MQL5\Include\Expert\ExpertSignal.mqh.
Mon résultat est que les fonctions vérifiant les conditions de trading se réduisent essentiellement à tester la valeur de la fonction Direction() { return(LongCondition()-ShortCondition()) ; } comme suit :
(J'ai supprimé certains codes qui ne semblent nécessaires qu'à une exécution stable sans contribuer en aucune manière à la fonctionnalité).
Ce résumé montre que pour toute classe de stratégie personnalisée, il devrait être suffisant de surcharger les fonctions
et l'article 2. de Harvester cité ci-dessus explique comment utiliser la macro IS_PATTERN_USAGE(x) dans les deux premiers de façon à ce que le signal résultant détecte plusieurs motifs prédéfinis.
Je vois le problème suivant : la condition selon laquelle le prix se situe entre le plus haut et le plus bas des n dernières barres doit toujours être vraie. Par conséquent, LongCondition(...) et ShortCondition(...) renvoient tous deux la même valeur associée au modèle de breakout et la valeur de Direction() est nécessairement nulle à moins que les conditions de CheckOpenLong(...) et CheckOpenShort(...) ne soient modifiées.
Mais pourquoi n'est-il pas suffisant d'utiliser LongCondition()>=m_threshold_open et ShortCondition()>=m_threshold_open ?
Lorsque j'utilise le fichier que vous avez joint à l'article, il y a quelque chose qui ne va pas.
Je trouve que le commentaire sur le type devrait être le suivant :
//| Type=SignalAdvanced |
Merci pour votre message. Votre message a résolu mon problème. Je vous remercie !
Georges
Bonjour,
Lorsque j'ai compilé le code, j'ai obtenu trois avertissements
la déclaration de 'm_open' cache le membre samplesignal.mqh 42 23
la déclaration de 'm_close' cache le membre samplesignal.mqh 43 23
m_open et m_close ont été définis dans ExpertBase.mqh mais avec un type différent.
m_expiratin a été défini dans ExpertSignal.mqh.
Commentez les trois lignes ci-dessus. Les avertissements ont disparu.
Georges
S'il est possible de réécrire le code exact, complet et exécutable de ce programme et de corriger ses bugs et de le mettre ici
Voilà, c'est parti !
Santé, Zarik