Backtesting EA multi-devises

 

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 ?

 
enivid:

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 ?

Mieux, si vous copiez le code ici... peut-être cela vous aidera-t-il.
 
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.
 
enivid:

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.

 
enivid:

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.

Creating an Expert Advisor, which Trades on a Number of Instruments
  • 2010.07.08
  • Nikolay Kositsin
  • www.mql5.com
The concept of diversification of assets on financial markets is quiet old, and has always attracted beginner traders. In this article, the author proposes a maximally simple approach to a construction of a multi-currency Expert Advisor, for an initial introduction to this direction of trading strategies.
 
investeo:

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.

J'ai essayé d'utiliser OnBookEvent() mais cela ne fonctionne tout simplement pas (du moins en backtesting). J'ai utilisé MarketBookAdd() dans la fonction OnInit() pour mes deux paires.
 

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

Equity lorsqu'il est rattaché à l'EURUSD

en l'attachant à USDCHF vous obtiendrez

usdchf

Ensuite, avec USDJPY nous obtenons

usdjpy

et mieux encore, lorsque l'on exécute l'EA sur AUDUSD on obtient le résultat suivant

audusd

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 ?

Creating an Expert Advisor, which Trades on a Number of Instruments
  • 2010.07.08
  • Nikolay Kositsin
  • www.mql5.com
The concept of diversification of assets on financial markets is quiet old, and has always attracted beginner traders. In this article, the author proposes a maximally simple approach to a construction of a multi-currency Expert Advisor, for an initial introduction to this direction of trading strategies.
 
trendick:

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

Creating an Expert Advisor, which Trades on a Number of Instruments
  • 2010.07.08
  • Nikolay Kositsin
  • www.mql5.com
The concept of diversification of assets on financial markets is quiet old, and has always attracted beginner traders. In this article, the author proposes a maximally simple approach to a construction of a multi-currency Expert Advisor, for an initial introduction to this direction of trading strategies.
 
Ali2e7a:

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.

Multi-Currency synchronization
  • www.mql5.com
Here some tests results and below details:.