Backtesting Multi-Währungs-EA

 

Ich teste gerade einen Multi-Währungspaar-EA im MT5 Strategy Tester und erhalte unterschiedliche Ergebnisse, wenn ich ihn an verschiedene Währungspaare anhänge. Der EA handelt mit AUDUSD und GBPCHF.

Wenn ich ihn an AUDUSD hänge, erhält er 10k Gewinn.

Wenn ich ihn mit GBPCHF verbinde, erzielt er mehr als 30k Gewinn.

Wenn ich ihn an USDCHF anhänge (ich dachte, die OnTick()-Funktion reagiert sowohl auf AUDUSD- als auch auf GBPCHF-Änderungen, wenn ich USDCHF folge), erzielt er etwa 17k Gewinn.

Ist das ein Problem bei der Verwendung der OnTick()-Funktion? Oder gibt es ein verstecktes Problem beim Backtesting von EAs mit mehreren Währungen? Oder ist es nur ein Durcheinander in meinem Code?

 
enivid:

Ich teste gerade einen Multi-Währungspaar-EA im MT5 Strategy Tester und erhalte unterschiedliche Ergebnisse, wenn ich ihn an verschiedene Währungspaare anhänge. Der EA handelt mit AUDUSD und GBPCHF.

Wenn ich ihn an AUDUSD hänge, erhält er 10k Gewinn.

Wenn ich ihn mit GBPCHF verbinde, erzielt er mehr als 30k Gewinn.

Wenn ich ihn an USDCHF anhänge (ich dachte, die OnTick()-Funktion reagiert sowohl auf AUDUSD- als auch auf GBPCHF-Änderungen, wenn ich USDCHF folge), erzielt er etwa 17k Gewinn.

Ist das ein Problem bei der Verwendung der OnTick()-Funktion? Oder gibt es ein verstecktes Problem beim Backtesting von EAs mit mehreren Währungen? Oder ist es nur ein Durcheinander in meinem Code?

besser, wenn Sie den Code hier kopieren.. vielleicht wird es helfen.
 
Der Code sollte eigentlich keine Rolle spielen. Warum sollte der Tester einen Unterschied für das angehängte Währungspaar machen, wenn der gesamte Handel mit zwei vordefinierten Währungspaaren erfolgt und der gesamte Handel auch bei der Eröffnung eines neuen Balkens und nicht bei jedem Tick durchgeführt wird.
 
enivid:

Der Code sollte eigentlich keine Rolle spielen. Warum sollte der Tester einen Unterschied für das angehängte Währungspaar machen, wenn der gesamte Handel mit zwei vordefinierten Währungspaaren erfolgt und der gesamte Handel auch bei der Eröffnung eines neuen Balkens und nicht bei jedem Tick durchgeführt wird.

Ist die Funktion "bei Tick" nicht nur für die Chart-Währung? Ich würde sagen, für 99 % ist sie das. Ich denke, man kann eine Endlosschleife erstellen, die die Kurse jede Sekunde oder so aktualisiert, um genauere Ticks zu erhalten. Dies würde jedoch die gesamte Struktur einer Anwendung ändern.

 
enivid:

Der Code sollte eigentlich keine Rolle spielen. Warum sollte der Tester einen Unterschied für das angehängte Währungspaar machen, wenn der gesamte Handel mit zwei vordefinierten Währungspaaren erfolgt und der gesamte Handel auch bei der Eröffnung eines neuen Balkens und nicht bei jedem Tick durchgeführt wird.

Vielleicht sollten Sie OnBookEvent() anstelle von OnTick() versuchen ? - OnTick() wird nur ausgelöst, wenn der aktuelle Symboltick eintrifft.

OnBookEvent

Der OnBookEvent() Befehl ist der BookEvent Handler. BookEvent wird für Expert Advisors nur generiert, wenn sich die Tiefe des Marktes ändert. Sie muss vom Typ void sein und einen Parameter vom Typ string haben:

voidOnBookEvent(conststring&symbol);

Um BookEvent-Ereignisse für ein beliebiges Symbol zu erhalten, müssen Sie sich lediglich mit der Funktion MarketBookAdd() für den Empfang dieser Ereignisse für dieses Symbol anmelden.Um sich vom Empfang der BookEvent-Ereignisse für ein bestimmtes Symbol abzumelden, rufen Sie MarketBookRelease() auf.

Im Gegensatz zu anderen Ereignissen wird das BookEvent-Ereignis übertragen. Das bedeutet, dass, wenn ein Expert Advisor den Empfang von BookEvent-Ereignissen mit MarketBookAdd abonniert, alle anderen Expert Advisors, die über den OnBookEvent()-Handler verfügen, dieses Ereignis erhalten. Es ist daher notwendig, den Namen des Symbols zu analysieren, der dem Handler als Parameterconst string& symbolübergeben wird.

 

Ich habe das gleiche Problem: Beim Backtesting eines EAs mit mehreren Währungen erhalte ich ein völlig unterschiedliches Verhalten, je nachdem, welches Symbol ich im Panel des Strategietesters auswähle.

Das ist äußerst lästig. Rosh? Irgendjemand? Können Sie sich bitte dazu äußern?

Auch wenn der On-Tick nur für den ausgewählten Chart gilt, arbeiten sowohl envid als auch ich mit der Eröffnung eines neuen Balkens. In meinem Fall verwende ich tägliche Balken, so dass selbst wenn die Eröffnung der neuen Balken in den verschiedenen Währungen zu unterschiedlichen Zeiten erfolgt, keine so drastischen Unterschiede auftreten sollten, wie ich sie erlebe.

Aus offensichtlichen Gründen schließe ich meinen EA nicht mit ein. Mal sehen, ob wir das gleiche Problem mit dem EA haben, der hier veröffentlicht wurde: https://www.mql5.com/en/articles/105.

Ich würde mich sehr freuen, von jemandem zu hören, der erfolgreich einen EA mit mehreren Währungen konstruiert hat und insbesondere nicht unter dieser Diskrepanz leidet.

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:

Vielleicht sollten Sie OnBookEvent() anstelle von OnTick() versuchen ? - OnTick() wird nur ausgelöst, wenn der aktuelle Symboltick eintrifft.

OnBookEvent

Der OnBookEvent() Befehl ist der BookEvent Handler. BookEvent wird für Expert Advisors nur generiert, wenn sich die Tiefe des Marktes ändert. Sie muss vom Typ void sein und einen Parameter vom Typ string haben:

voidOnBookEvent(conststring&symbol);

Um BookEvent-Ereignisse für ein beliebiges Symbol zu erhalten, müssen Sie sich lediglich mit der Funktion MarketBookAdd() für den Empfang dieser Ereignisse für dieses Symbol anmelden.Um sich vom Empfang der BookEvent-Ereignisse für ein bestimmtes Symbol abzumelden, rufen Sie MarketBookRelease() auf.

Im Gegensatz zu anderen Ereignissen wird das BookEvent-Ereignis übertragen. Das bedeutet, dass, wenn ein Expert Advisor den Empfang von BookEvent-Ereignissen mit MarketBookAdd abonniert, alle anderen Expert Advisors, die über den OnBookEvent()-Handler verfügen, dieses Ereignis erhalten. Es ist daher notwendig, den Namen des Symbols zu analysieren, der dem Handler als Parameterconst string& symbolübergeben wird.

Ich habe versucht, OnBookEvent() zu verwenden, aber es funktioniert einfach nicht (zumindest beim Backtesting). Ich habe MarketBookAdd() in der OnInit()-Funktion für meine beiden Paare verwendet.
 

Hier ist ein Beispiel. Mit dem TEMA EA von https://www.mql5.com/en/articles/105 erhalten wir die folgenden unterschiedlichen Verhaltensweisen.

Alles was Sie brauchen ist der EA exp_tema_de.mq5 und der Indikator multistochastic_de.mq5

In diesem Beispiel habe ich die beigefügte Parameterdatei verwendet. Der EA handelt mit den Paaren EURUSD, USDCHF und USDJPY (mit diesen Parametern).

Wenn Sie ihn an EURUSD anhängen, erhalten Sie

Eigenkapital in Verbindung mit EURUSD

beim Anhängen an USDCHF erhalten Sie

usdchf

Mit USDJPY erhalten wir dann

usdjpy

und noch besser, wenn man den EA auf AUDUSD laufen lässt, das Ergebnis

audusd

Gleicher EA, gleicher Zeitrahmen (H1), gleiche gehandelte Paare, gleiche Daten (2009.01.01-2009.03.01).

Ist das so, wie es sein soll? und wenn ja, kann uns jemand sagen, was das zu bedeuten hat?

Sind wir wirklich bereit für Backtesting/Optimierung in mehreren Währungen?

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:

Hier ist ein Beispiel. Mit dem TEMA EA von https://www.mql5.com/en/articles/105 erhalten wir die folgenden unterschiedlichen Verhaltensweisen.

Alles was Sie brauchen ist der EA exp_tema_de.mq5 und der Indikator multistochastic_de.mq5

In diesem Beispiel habe ich die beigefügte Parameterdatei verwendet. Der EA handelt mit den Paaren EURUSD, USDCHF und USDJPY (mit diesen Parametern).

Wenn Sie ihn an EURUSD anhängen, erhalten Sie


beim Anhängen an USDCHF erhalten Sie


Mit USDJPY erhalten wir dann

und noch besser, wenn man den EA auf AUDUSD laufen lässt, das Ergebnis

Gleicher EA, gleicher Zeitrahmen (H1), gleiche gehandelte Paare, gleiche Daten (2009.01.01-2009.03.01).

Ist das so, wie es sein soll? und wenn ja, kann uns jemand sagen, was das zu bedeuten hat?

Sind wir wirklich bereit für Backtesting/Optimierung in mehreren Währungen?




Hallo, ich hatte das gleiche Problem (unterschiedliche Ergebnisse), aber ich habe es mit IsNewBar() gelöst.

Ich stimme mit Baq überein, also was sollen wir tun? die Kurse holen und diese Funktion tut

Nur wenn IsNewBar(irgendein Symbol) dann blah blah blah

für meine EA bekam ich die gleichen Ergebnisse, die auf verschiedene Symbole anhängen.

Der Artikel, aus dem ich die Funktion habe, ist hier: 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:

Hallo, ich hatte das gleiche Problem (unterschiedliche Ergebnisse), aber löste es mit der IsNewBar()

Ich stimme mit Baq überein, also was sollen wir tun?die Anführungszeichen holen und diese Funktion tut

Nur wenn IsNewBar(irgendein Symbol) dann blah blah blah

Für meinen EA habe ich die gleichen Ergebnisse, wenn ich verschiedene Symbole verwende.

Der Artikel, aus dem ich die Funktion habe, ist hier: https://www.mql5.com/en/articles/105

Ali, das Beispiel, das ich oben erwähnt habe, ist der EA, auf den du dich beziehst, der die Quelle der IsNewBar() -Funktion ist, die du erwähnt hast, und sie bereits verwendet.

Wie erklärst du das?

 

Siehe auch den Thread über die Synchronisierung mit mehreren Währungen unterhttps://www.mql5.com/en/forum/1520.

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