Je suis en train de backtester un EA multi-paires de devises dans le testeur de stratégie MT5 et j'obtiens des résultats différents lorsque je le rattache à différentes paires de devises. L'EA fonctionne sur AUDUSD et GBPCHF.
Lorsque je l'attache à AUDUSD, il obtient un profit de 10k.
Lorsque je l'attache à GBPCHF, il obtient plus de 30k de profit.
Lorsque je l'attache à l'USDCHF (je pensais que la fonction OnTick() réagirait à la fois sur les changements de l'AUDUSD et du GBPCHF lorsque je suivais l'USDCHF), il obtient environ 17 000 de bénéfices.
Est-ce le problème de l'utilisation de la fonction OnTick() ? Ou y a-t-il un problème caché dans le backtesting des EA multi-devises ? Ou est-ce simplement un problème dans mon code ?
Le code ne devrait pas vraiment avoir d'importance. Pourquoi le testeur ferait-il une différence pour la paire de devises jointe si toutes les transactions sont effectuées sur deux paires de devises prédéfinies et si toutes les transactions sont également effectuées à l'ouverture de la nouvelle barre, et non à chaque tick.
La fonction "on tick" ne concerne-t-elle pas uniquement la devise du graphique ? Je dirais que c'est le cas pour 99% d'entre eux. Je suppose que vous pouvez créer une boucle infinie rafraîchissant les cotations toutes les secondes ou presque pour obtenir des ticks plus précis. Mais cela changerait toute la structure de l'application.
Le code ne devrait pas vraiment avoir d'importance. Pourquoi le testeur ferait-il une différence pour la paire de devises jointe si toutes les transactions sont effectuées sur deux paires de devises prédéfinies et si toutes les transactions sont également effectuées à l'ouverture des nouvelles barres, et non à chaque tick.
Peut-être devriez-vous essayer OnBookEvent() au lieu de OnTick() ? - OnTick() est déclenché uniquement lorsque le tick du symbole courant arrive.
OnBookEvent
La fonction OnBookEvent() est le gestionnaire de BookEvent. BookEvent est généré pour les Expert Advisors uniquement lorsque la profondeur de marché change. Elle doit être de type void et avoir un paramètre de type string :
voidOnBookEvent(conststring&symbol) ; |
Pour recevoir les événements BookEvent pour n'importe quel symbole, il suffit de se préinscrire pour recevoir ces événements pour ce symbole en utilisant la fonction MarketBookAdd() .Pour vous désabonner de la réception des événements BookEvent pour un symbole particulier, appelez MarketBookRelease() .
Contrairement aux autres événements, l'événement BookEvent est diffusé. Cela signifie que si un Expert Advisor s'abonne à la réception d'événements BookEvent en utilisant MarketBookAdd, tous les autres Experts Advisors qui ont le handler OnBookEvent() recevront cet événement. Il est donc nécessaire d'analyser le nom du symbole, qui est passé au handler comme paramètreconst string& symbol.
Je rencontre le même problème : en backtestant un EA multi-devises, j'obtiens un comportement totalement différent selon le symbole que je sélectionne dans le panneau du testeur de stratégie.
C'est extrêmement gênant. Rosh ? Quelqu'un d'autre ? pouvez-vous commenter ?
Même si le on tick ne s'applique qu'au graphique sélectionné, envid et moi-même opérons sur l'ouverture d'une nouvelle barre. Dans mon cas, j'utilise des barres quotidiennes, donc même si les tick d'ouverture des nouvelles barres dans les différentes devises se produisent à des moments différents, il ne devrait pas y avoir de différences aussi radicales que celles que je constate.
Je n'inclus pas mon EA pour des raisons évidentes, mais voyons si nous avons le même problème avec l'EA qui a été publié ici : https://www.mql5.com/en/articles/105.
Je serais très heureux de connaître l'avis de toute personne qui a réussi à construire un EA multi-devises et, en particulier, qui ne souffre pas de cette différence.
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Peut-être devriez-vous essayer OnBookEvent() au lieu de OnTick() ? - OnTick() est déclenché uniquement lorsque le tick du symbole courant arrive.
OnBookEvent
La fonction OnBookEvent() est le gestionnaire de BookEvent. BookEvent est généré pour les Expert Advisors uniquement lorsque la profondeur de marché change. Elle doit être de type void et avoir un paramètre de type string :
voidOnBookEvent(conststring&symbol) ; |
Pour recevoir les événements BookEvent pour n'importe quel symbole, il suffit de se préinscrire pour recevoir ces événements pour ce symbole en utilisant la fonction MarketBookAdd() .Pour vous désabonner de la réception des événements BookEvent pour un symbole particulier, appelez MarketBookRelease() .
Contrairement aux autres événements, l'événement BookEvent est diffusé. Cela signifie que si un Expert Advisor s'abonne à la réception des événements BookEvent en utilisant MarketBookAdd, tous les autres Experts Advisors qui ont le handler OnBookEvent() recevront cet événement. Il est donc nécessaire d'analyser le nom du symbole, qui est passé au handler comme paramètreconst string& symbol.
Voici un exemple. En utilisant l'EA TEMA de https://www.mql5.com/en/articles/105, nous obtenons les différents comportements suivants.
Tout ce dont vous avez besoin est l'EA exp_tema_fr.mq5 et l'indicateur multistochastique_fr.mq5.
Dans cet exemple, j'ai utilisé le fichier de paramètres ci-joint. L'EA trade les paires EURUSD, USDCHF et USDJPY (avec ces paramètres).
Lorsque vous l'attachez à EURUSD vous obtenez
en l'attachant à USDCHF vous obtiendrez
Ensuite, avec USDJPY nous obtenons
et mieux encore, lorsque l'on exécute l'EA sur AUDUSD on obtient le résultat suivant
Même EA, même timeframe (H1), mêmes paires échangées, mêmes dates (2009.01.01-2009.03.01).
Est-ce que c'est comme ça que ça doit être ? et si c'est le cas, quelqu'un peut-il nous dire ce que cela signifie ?
Sommes-nous vraiment prêts pour le backtesting/optimisation multi-devises ?
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Voici un exemple. En utilisant l'EA TEMA de https://www.mql5.com/en/articles/105, nous obtenons les différents comportements suivants.
Tout ce dont vous avez besoin est l'EA exp_tema_fr.mq5 et l'indicateur multistochastic_fr.mq5.
Dans cet exemple, j'ai utilisé le fichier de paramétrage ci-joint. L'EA trade les paires EURUSD, USDCHF et USDJPY (avec ces paramètres).
Lorsque vous l'attachez à EURUSD vous obtenez
en l'attachant à USDCHF vous obtiendrez
Ensuite, avec USDJPY nous obtenons
et mieux encore, lorsque l'on exécute l'EA sur AUDUSD, on obtient le résultat suivant
Même EA, même timeframe (H1), mêmes paires échangées, mêmes dates (2009.01.01-2009.03.01).
Est-ce que c'est comme ça que ça doit être ? et si c'est le cas, quelqu'un peut-il nous dire ce que cela signifie ?
Sommes-nous vraiment prêts pour le backtesting/optimisation multi-devises ?
Bonjour, j'ai eu le même problème (résultats différents), mais je l'ai résolu avec la fonction IsNewBar().
Je suis d'accord avec baq, alors qu'est-ce qu'on doit faire ? obtenir les cotations et cette fonction le fait
Seulement si IsNewBar(certain symbole) alors blah blah blah
pour mon EA j'ai obtenu les mêmes résultats en attachant à différents symboles.
L'article dans lequel j'ai trouvé la fonction est ici : https://www.mql5.com/en/articles/105
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Bonjour, j'ai eu le même problème (résultats différents), mais je l'ai résolu avec la fonction IsNewBar()
Je suis d'accord avec baq, alors que devons-nous faire ? obtenir les guillemets et cette fonction fait
Seulement si IsNewBar(certain symbole) alors blah blah blah
pour mon EA, j'ai obtenu les mêmes résultats en attachant des symboles différents.
L'article dans lequel j'ai trouvé la fonction est ici : https://www.mql5.com/en/articles/105
Ali, l'exemple que j'ai mentionné ci-dessus est l'EA auquel vous faites référence, qui est la source de la fonction IsNewBar() que vous avez mentionnée, et qui l'utilise déjà.
Comment expliquez-vous cela ?
Voir également le fil de discussion sur la synchronisation multidevises à l'adressehttps://www.mql5.com/en/forum/1520.
- 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
Je suis en train de backtester un EA multi-paires de devises dans le testeur de stratégie MT5 et j'obtiens des résultats différents lorsque je le rattache à différentes paires de devises. L'EA fonctionne sur AUDUSD et GBPCHF.
Lorsque je l'attache à AUDUSD, il obtient un profit de 10k.
Lorsque je l'attache à GBPCHF, il obtient plus de 30k de profit.
Lorsque je l'attache à l'USDCHF (je pensais que la fonction OnTick() réagirait à la fois sur les changements de l'AUDUSD et du GBPCHF lorsque je suivais l'USDCHF), il obtient environ 17 000 de bénéfices.
Est-ce le problème de l'utilisation de la fonction OnTick() ? Ou y a-t-il un problème caché dans le backtesting des EAs multi-devises ? Ou est-ce simplement un problème dans mon code ?