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
Merci pour les conseils, voici une version très simple de mon code, ce n'est pas mon vrai code mais j'espère que ce sera plus clair.
Comme je l'ai dit, ce n'est pas le vrai code, la recherche de modèle etc. est juste un exemple. La raison pour laquelle j'ai ouvert ce fil de discussion est lafonction DetectExistingPattern().
Je vous ai déjà donné un exemple de code sur la façon d'exécuter le code lors de la première exécution de OnTick(), alors maintenant mettez à jour votre post de code en conséquence afin que votre DetectExistingPattern() s'exécute dans le premier appel de OnTick() et non dans OnInit().
De plus, vous ne pouvez pas utiliser "Bars" pour détecter une nouvelle barre. C'est incorrect. Vous devez utiliser soit "Time[0]" soit "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Voici un exemple :
Je vous ai déjà donné un exemple de code sur la façon d'exécuter le code lors de la première exécution de OnTick(), alors mettez à jour votre post de code en conséquence afin que votre DetectExistingPattern() s'exécute lors du premier appel de OnTick() et non dans OnInit().
De plus, vous ne pouvez pas utiliser "Bars" pour détecter une nouvelle barre. C'est incorrect. Vous devez utiliser soit "Time[0]" soit "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Voici un exemple :
Merci @FMIC, j'ai ajouté le code simple car @jjc l'a demandé. D'ailleurs, j'ai appris à utiliser les barres à partir du moment où je me souviens que tout le monde écrivait de cette façon, alors je l'ai fait. Pourquoi est-ce mauvais ? Est-ce que cela peut fonctionner de manière incorrecte ?
ps : J'utilise metatrader 4, donc c'est bien mql4 ?
Merci @FMIC, j'ai ajouté le code simple parce que @jjc l'a demandé. D'ailleurs, j'ai appris à utiliser les barres à partir du moment où je me souviens que tout le monde écrivait de cette façon, alors je l'ai fait. Pourquoi est-ce mauvais ? Est-ce que cela peut fonctionner de manière incorrecte ?
ps : J'utilise metatrader 4, donc c'est bien mql4 ?
FMIC:
No! On the forum, you will find that many users have shown that the "Bars" method is very old and unreliable because the number of bars can be changed by the "Options" for charts or it can be constant when the maximum number of bars per chart has been reached. So, it is wrong to use it. Use either "Time[0]" or if you want it to be compatible with MQL5 as well, use "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Please see my example.
Comme je l'ai dit, ce n'est pas le vrai code, la recherche de motifs etc. est juste un exemple. La raison pour laquelle j'ai ouvert ce fil de discussion est lafonction DetectExistingPattern().
Pour en revenir à votre question initiale... Dans cet exemple, une option serait de modifier votre fonction CheckTrendPattern() de façon à ce qu'on puisse lui demander de commencer à une barre spécifique. Au lieu d'utiliser la plage fixe des barres 1 à 10, vous utilisez plutôt un décalage de 1 à 10 à partir d'un point de départ spécifié.
Lorsqu'il n'y a pas d'ordre existant et que vous voulez vérifier si le modèle est actuellement respecté, vous utilisez alors CheckTrendPattern(0) au lieu de CheckTrendPattern().
Au démarrage, si vous avez un ordre existant, vous pouvez rechercher le modèle qui l'a déclenché comme suit. C'est la même suggestion que celle que j'ai faite au début : vous obtenez l'indice de la barre qui est équivalent à l'heure d'ouverture de l'ordre existant, et commencez à regarder en arrière à partir de là.
Cependant, comme le dit le CIMF, il est préférable d'effectuer cette vérification lors du premier appel à OnTick() plutôt que dans OnInit(). Mes propres raisons pour suggérer cela n'ont rien à voir avec le fait de "retarder l'initialisation". Je m'inquiéterais plutôt du fait que, lorsque MT4 redémarre avec l'EA déjà attaché à un graphique, vous n'avez pas encore une liste d'ordres du courtier ou un historique des barres mis à jour de manière 100% fiable.
Une autre considération que vous pourriez avoir à l'esprit est le scénario suivant, qui se déroule pendant la période couverte par une seule barre :
Pour éviter cela, vous pouvez vérifier les ordres fermés ainsi que les ordres ouverts.
Pour en revenir à votre question initiale... Dans cet exemple, vous pouvez modifier la fonction CheckTrendPattern() pour lui demander de commencer à une barre spécifique. Au lieu d'utiliser la plage fixe des barres 1 à 10, vous utilisez plutôt un décalage de 1 à 10 à partir d'un point de départ spécifié.
Lorsqu'il n'y a pas d'ordre existant et que vous souhaitez vérifier si le modèle est actuellement respecté, vous utilisez alors CheckTrendPattern(0) au lieu de CheckTrendPattern().
Au démarrage, si vous avez un ordre existant, vous pouvez rechercher le modèle qui l'a déclenché comme suit. C'est la même suggestion que j'ai faite au début : vous obtenez l'indice de la barre qui est équivalent au temps d'ouverture de l'ordre existant, et commencez à regarder en arrière à partir de là. Cependant, comme le dit le FMIC, il est préférable de faire cette vérification dans le premier appel à OnTick() plutôt que dans OnInit(). Mes propres raisons pour suggérer cela n'ont rien à voir avec le fait de "retarder l'initialisation". Je m'inquiéterais plutôt du fait que, lorsque MT4 redémarre avec l'EA déjà attaché à un graphique, vous n'avez pas encore une liste d'ordres du courtier ou un historique des barres mis à jour de manière 100% fiable.
Une autre considération que vous pourriez avoir à l'esprit est le scénario suivant, qui se déroule pendant la période couverte par une seule barre :
Maintenant, je comprends mieux pourquoi je devrais le faire dans OnInit, la fiabilité est le point le plus important bien sûr et je n'ai pas pensé à votre avertissement de considération. Cette partie est vraiment importante, je pourrais ouvrir des ordres redondants, peut-être rare mais possible. Je dois gérer cela d'une certaine manière. vraiment merci beaucoup.
@WHRoeder votre nouveau contrôle de vérification des barres est si simple et si beau. J'ai ajouté votre méthode à mon code, merci.
Bonjour à tous,
Comme @FMIC l'a conseillé, j'ai écrit un indicateur qui trouve mon modèle, donne un signal et quelques données supplémentaires qui seront utilisées pour mes ordres (je pourrais ouvrir plus d'un ordre à des prix différents). Maintenant je veux l'utiliser dans mon EA mais j'ai une question, j'ai besoin de votre expérience en fait. Quand je reçois un signal de mon indicateur, je vais ouvrir un ordre ou placer un ordre (limite de vente ou limite d'achat etc.) si mon mt4 se plante pour une raison quelconque quand je le rouvre, comment puis-je trouver l'ordre ouvert qui appartient à quel signal dans mon indicateur. est-il correct d'utiliser le décalage de barre pour cela ? comme nous l'avons déjà dit, je peux trouver le temps de création de l'ordre, puis trouver le décalage de barre et dois-je essayer d'obtenir la valeur de l'indicateur en utilisant ce décalage ? Comment puis-je faire correspondre cet ordre et le décalage de l'indicateur?
Merci.
Oui, vous pouvez utiliser iBarShift(), comme jjc vous l'a expliqué dans un post précédent pour ensuite référencer les données de votre indicateur via la fonction iCustom().