Diskussion zum Artikel "Nutzerdefinierte Symbole: Praktische Grundlagen" - Seite 5

 
Mr David Frederick Roberts #:

Vielen Dank für die Antwort. Das ist sehr seltsam, ich bin in der Tat mit echten Ticks-Modus und ich war mir nicht bewusst, dass es eine feste Spread-Option in MT5, so dass ich sicher bin, dass ich nicht bin (ich bin mehr vertraut mit MT4).Mir war nicht aufgefallen, dass die Spreads für jeden Balken gleich sind, denn wenn ich mir die gesamte Datei ansehe, scheint es, dass sie sich nur an den Grenzen von 1 Minute ändern. Ich nehme an, dass ich richtig liege, wenn ich denke, dass die Aufrufe von SymbolInfoDouble() die Preise für den Tick zurückgeben sollten, der als Ergebnis des OnTick()-Ereignisaufrufs verarbeitet wird - und nicht irgendeine Art von M1-Wert?

Ich habe versucht zu drucken, was ich erwartet habe, um die tatsächliche Tick-Zeit mit Millisekunden mit dem Code unten zu sein, aber der Millisekunden-Wert ist immer Null...

EDIT: Wie ich schon sagte, ich bin relativ neu in MQL5 - ich habe gerade SymbolInfoTick() gefunden, vielleicht sollte ich das verwenden, anstatt was ich tue! Ich werde versuchen, dass und sehen, was passiert...


Ok, das hat keinen Unterschied gemacht, genau die gleichen Ergebnisse, aber keines von beiden hängt mit dem "Symbol Ticks"-Dialog im Terminal zusammen. Ich habe mich geirrt, als ich sagte, dass der Millisekundenwert immer Null ist - er ist für genau eine Minute ungleich Null, nämlich die eine Minute vor Mitternacht!

Dies scheint mir ein ziemlich wichtiges Problem zu sein. Mein Handels-EA erwartet Ticks mit Preisen, die mit den importierten Tick-Daten übereinstimmen (wie jeder andere auch!). Ich wage zu behaupten, dass ich etwas falsch mache, aber wenn ja, würde ich gerne wissen, was es ist.Wenn nicht, dann gibt es hier ein sehr ernstes Problem. Ich habe eine Zip-Datei mit dem Test-EA, eine Tabelle mit den Ergebnissen für die Stunde vor und nach Mitternacht und einige Screenshots von Einstellungen und Ticks beigefügt.

Ich fürchte, es ist nicht klar, wie Sie Ihr benutzerdefiniertes Symbol erstellen. Die angehängten csv-Dateien sind identisch (ich weiß übrigens nicht, warum Sie zwei Kopien unter verschiedenen Namen benötigen), und beide haben das falsche Format: Tick-Dateien sollten die folgenden Spalten haben, um in MT5 Custom Symbol importiert werden zu können: Datum, Uhrzeit, Bid, Ask, Last, Volume. Daher ist es derzeit nicht möglich, ein benutzerdefiniertes Symbol aus Ihren Ticks ohne zusätzliche Manipulationen zu erstellen.

Es wäre einfacher, wenn Sie Bilder von importierten Ticks in MT5 UI und das Log Ihres EA nebeneinander posten würden. Die oben gezeigten Bilder sind unvollständig und die Ticks sehen zwischen den Bildern und im Vergleich zu den csv-Dateien unterschiedlich aus.

 
Stanislav Korotky #:

Ich fürchte, es ist nicht klar, wie Sie Ihr benutzerdefiniertes Symbol erstellen. Die angehängten csv-Dateien sind die gleichen (BTW, ich weiß nicht, den Grund, den Sie zwei Kopien unter verschiedenen Namen benötigen), und beide haben das falsche Format: Tick-Dateien sollten die folgenden Spalten in MT5 benutzerdefinierte Symbol importiert werden: Datum, Zeit, bid, ask, letzte, Volumen. Daher ist es derzeit nicht möglich, ohne zusätzliche Manipulationen ein benutzerdefiniertes Symbol aus Ihren Ticks zu erstellen.

Es wäre einfacher, wenn Sie Bilder von importierten Ticks in MT5 UI und das Log Ihres EA nebeneinander posten würden. Die oben gezeigten Bilder sind unvollständig und die Ticks sehen zwischen den Bildern und im Vergleich zu den csv-Dateien unterschiedlich aus.

Die Tick-Daten wurden in MT5 als benutzerdefiniertes Symbol aus einem Export aus meiner MT4 'Tick Data Suite' mit Dukascopy-Daten importiert (CSV-Dateien mit einer Größe von etwa 8 GB).

Die CSV-Dateien, die ich geschickt habe, sind keineswegs dazu gedacht, als Tick-Daten importiert zu werden, sie sind die Ausgaben meines Test-EAs (der beiliegt), der die Bid- und Ask-Preise und die Zeit für jedes empfangene OnTick-Ereignis aufzeichnet. Die beiden werden einfach durch unterschiedliche Methoden abgeleitet - eine verwendet SymbolInfoDouble(...), um die Bid- und Ask-Preise zu erhalten, und die andere verwendet SymbolInfoTick(...). Die Tatsache, dass sie gleich sind, beweist mir einfach, dass es keinen Unterschied zwischen den Methoden gibt.

Mir geht es darum, dass die Bid- und Ask-Preise und -Zeiten in den vom Test-EA aufgezeichneten CSV-Dateien nicht mit dem Bild der importierten Ticks in der MT5-Benutzeroberfläche übereinstimmen (die ich ebenfalls gesendet habe). Also...

  1. Die Zeiten der Ticks im UI-Screenshot stimmen nicht mit denen überein, die vom Test-EA aufgezeichnet wurden - warum nicht?
  2. Die vom Test-EA aufgezeichneten Zeiten haben eine Null-Millisekunden-Komponente, außer in der einen Minute vor Mitternacht - warum?
  3. Obwohl die vom Test-EA aufgezeichneten Bid-Preise in etwa mit denen der MT5-Benutzeroberfläche übereinstimmen, können die Ask-Preise sehr unterschiedlich sein (und damit auch der Spread) - warum?
  4. Die vom Test-EA aufgezeichneten Preise ergeben einen resultierenden Spread, der sich nur an den Grenzen einer Minute zu ändern scheint - warum?
  5. Es gibt weniger OnTick-Ereignisse, die vom Test-EA aufgezeichnet werden, als es Tick-Aufzeichnungen in der MT5-Benutzeroberfläche gibt - warum?

Mir scheint, dass die Tick-Daten des benutzerdefinierten Symbols auf ihrem Weg zwischen dem Repository und dem OnTick-Ereignis des EA durch irgendetwas gestört werden.

Unten habe ich versucht, einen Teil der vom Test-EA (links) und der MT5-Benutzeroberfläche (rechts) aufgezeichneten Daten so genau wie möglich abzugleichen. Es ist unmöglich, sie genau abzugleichen, da der EA weniger Ticks aufzeichnet als die MT5-Benutzeroberfläche. Beachten Sie auch, dass die vom Test-EA aufgezeichneten Millisekunden bis 23:59 Uhr null sind.

Das hervorgehobene Ereignis ist wahrscheinlich derselbe Tick, aber beachten Sie, dass der Test-EA andere Preise als die UI aufzeichnet...

EA zeichnet Bid 1,16504 und Ask 1,16513 auf (Spread = 9)

Die MT5-Benutzeroberfläche zeigt Bid 1,16504 und Ask 1,16518 (Spread = 14)

 
Mr David Frederick Roberts #:


Sie haben viele "Warum"-Fragen, aber es ist schwer, eine Antwort zu geben (ohne Spekulationen). Es gibt ein Problem in Ihrem Verfahren oder Quellcode.

Was Sie tun könnten, ist, einen kleinen Teil der 8Gb der Tick-Historie zu veröffentlichen, der leicht in ein benutzerdefiniertes Symbol importiert werden kann und Ihren Code zu überprüfen.

Normalerweise sollte SymbolInfoTick genau die gleichen Ticks (einschließlich Millisekunden Timing) erhalten, die Sie im MT5 GUI für das gleiche benutzerdefinierte Symbol sehen.

Einige Ticks können in Ihrem EA übersprungen werden, wenn er zu viel Zeit für die Verarbeitung des vorherigen Ticks benötigt. Dieses "zu viel" kann sehr kurz sein, da Ticks sehr schnell kommen können. Wenn Sie sicherstellen möchten, dass alle Ticks in der Historie verfügbar sind, sollten Sie die Funktion CopyTicks für den Zeitraum seit dem letzten verarbeiteten Tick aufrufen. Aber das ist nicht das Problem, mit dem Sie sich jetzt befassen sollten - Sie sollten erst einmal herausfinden, was mit dem derzeitigen Ansatz falsch ist.

 
Mr David Frederick Roberts #:

Die Tickdaten wurden in MT5 als benutzerdefiniertes Symbol aus einem Export aus meiner MT4 "Tick Data Suite" mit Dukascopy-Daten (CSV-Dateien mit einer Größe von etwa 8 GB) importiert.

Die csv-Dateien, die ich geschickt habe, sind keineswegs dazu gedacht, als Tick-Daten importiert zu werden, sie sind die Ausgaben meines Test-EAs (der beigefügt war), der die Bid- und Ask-Preise und die Zeit für jedes empfangene OnTick-Ereignis aufzeichnet. Die beiden werden einfach durch unterschiedliche Methoden abgeleitet - eine mit SymbolInfoDouble(...), um die Bid- und Ask-Preise zu erhalten, und die andere mit SymbolInfoTick(...). Die Tatsache, dass sie gleich sind, beweist mir einfach, dass es keinen Unterschied zwischen den Methoden gibt.

Mir geht es darum, dass die Bid- und Ask-Preise und -Zeiten in den vom Test-EA aufgezeichneten CSV-Dateien nicht mit dem Bild der importierten Ticks in der MT5-Benutzeroberfläche übereinstimmen (die ich ebenfalls gesendet habe)...

  1. Die Zeiten der Ticks im UI-Screenshot stimmen nicht mit denen überein, die vom Test-EA aufgezeichnet wurden - warum nicht?
  2. Die vom Test-EA aufgezeichneten Zeiten haben eine Null-Millisekunden-Komponente, außer in der einen Minute vor Mitternacht - warum?
  3. Obwohl die vom Test-EA aufgezeichneten Bid-Preise in etwa mit denen der MT5-Benutzeroberfläche übereinstimmen, können die Ask-Preise sehr unterschiedlich sein (und damit auch der Spread) - warum?
  4. Die vom Test-EA aufgezeichneten Preise ergeben einen resultierenden Spread, der sich nur an den Grenzen einer Minute zu ändern scheint - warum?
  5. Es gibt weniger OnTick-Ereignisse, die vom Test-EA aufgezeichnet werden, als es Tick-Records in der MT5-Benutzeroberfläche gibt - warum?

Mir scheint, dass etwas die Tick-Daten des benutzerdefinierten Symbols auf dem Weg zwischen dem Repository und dem OnTick-Ereignis des EA stört.

Unten habe ich versucht, einen Teil der vom Test-EA (links) und der MT5-Benutzeroberfläche (rechts) aufgezeichneten Daten so genau wie möglich abzugleichen. Es ist unmöglich, sie genau abzugleichen, da der EA weniger Ticks aufzeichnet als die MT5-Benutzeroberfläche. Beachten Sie auch, dass die vom Test-EA aufgezeichneten Millisekunden bis 23:59 Uhr null sind.

Das hervorgehobene Ereignis ist wahrscheinlich derselbe Tick, aber beachten Sie, dass der Test-EA andere Preise als die UI aufzeichnet...

EA zeichnet Bid 1,16504 und Ask 1,16513 auf (Spread = 9)

Die MT5-Benutzeroberfläche zeigt Bid 1,16504 und Ask 1,16518 (Spread = 14)

Die Ticks, die Ihr EA sammelt, scheinen simulierte Ticks und keine echten Ticks zu sein. Überprüfen Sie die Logs des Strategy Testers.
 
Alain Verleyen #:
Die Ticks, die Ihr EA sammelt, scheinen simulierte Ticks und keine echten Ticks zu sein. Prüfen Sie die Logs des Strategy Testers.

Danke, Alain, ich stimme Ihnen vollkommen zu. Die Tick-Daten sind in der Benutzeroberfläche vorhanden, aber bis der EA sie erhält, sieht es so aus, als ob er das erste Bid/Ask-Paar nimmt, das er findet, und diesen Spread für die Dauer der nächsten Minute anwendet - oder so ähnlich.

Jedenfalls habe ich einen Blick auf das Protokoll geworfen (im Anhang), aber ich bin mir nicht ganz sicher, was ich zu sehen erwarte, daher wäre ich Ihnen dankbar, wenn Sie einen Blick darauf werfen könnten, um zu sehen, was falsch läuft. Ich habe auch die generierte CSV-Datei zur Information beigefügt.

Vielen Dank, David.

 
Mr David Frederick Roberts #:

Danke Alain, ich stimme dir vollkommen zu. Die Tick-Daten sind in der UI vorhanden, aber wenn es zum EA kommt, sieht es so aus, als ob er das erste Bid/Ask-Paar nimmt, das er findet, und diesen Spread für die Dauer der nächsten Minute anwendet - oder so ähnlich.

Jedenfalls habe ich einen Blick auf das Protokoll (beiliegend), aber ich bin nicht zu sicher, was ich erwarte, zu sehen, so wäre ich dankbar, wenn Sie einen Blick nehmen könnte und sehen, wenn Sie sehen können, was falsch läuft. Ich habe auch die generierte CSV-Datei zur Info beigefügt.

Vielen Dank, David.

In Ihrem Protokoll steht "every tick generating", was künstliche Ticks bedeutet. Es sollte heißen "Generierung basierend auf echten Ticks". Bitte konsultieren Sie die Tester-Dokumentation.

Nochmals, wenn Sie möchten, dass jemand anderes Ihr benutzerdefiniertes Symbol testet, stellen Sie eine kompatible CSV-Datei zur Verfügung, die nicht Ihr eigenes Format hat.

Strategy Testing - Algorithmic Trading, Trading Robots - MetaTrader 5 Help
Strategy Testing - Algorithmic Trading, Trading Robots - MetaTrader 5 Help
  • www.metatrader5.com
The Strategy Tester allows you to test and optimize trading strategies ( Expert Advisors ) before using them for live trading. During testing, an...
 
Stanislav Korotky #:

In Ihrem Protokoll steht "every tick generating", was künstliche Ticks bedeutet. Es sollte heißen "Generierung basierend auf echten Ticks". Bitte konsultieren Sie die Testerdokumentation.

Nochmals, wenn Sie möchten, dass jemand anderes Ihr benutzerdefiniertes Symbol testet, stellen Sie eine kompatible CSV-Datei zur Verfügung, die nicht Ihr eigenes Format hat.

Danke Stanislav, ich weiß die Hilfe von allen zu schätzen, aber ich komme nicht weiter.

Ich habe in der Dokumentation nachgeschaut und kann nichts finden, was mir erklärt, warum der Tester künstliche Ticks generiert, wenn er doch einen vollständigen Satz von Tick-Daten zur Verfügung hat! Tatsächlich heißt es dort...

Tests und Optimierungen mit echten Ticks kommen den realen Bedingungen so nahe wie möglich. Anstelle von generierten Ticks, die auf Minutendaten basieren, können auch echte Ticks verwendet werden, die von einem Broker gesammelt werden. Dies sind Ticks von Börsen und Liquiditätsanbietern.

Ich wiederhole: Die CSV-Dateien sind die Ausgabe meines Test-EAs sind, der einfach die Preise der empfangenen Ticks schreibt und nichts mit den Tick-Daten zu tun hat, die ich in das benutzerdefinierte Symbol importiert habe - ihr Format ist also völlig irrelevant.

Ok, was ich getan habe...

  1. Ich habe die EURUSD-Tickdaten aus meiner MT4 "Tick Data Suite" in das MT5-Format exportiert ( Tick Data Suite (eareview.net)), was eine riesige CSV-Datei erzeugt (siehe Screenshot unten).
  2. Ich habe diese Datei in ein benutzerdefiniertes Symbol in MT5 importiert, das ich EURUSD_TDS genannt habe.
  3. Ich habe einen Screenshot von einem Teil der resultierenden Ticks gemacht, wie sie in der MT5-Benutzeroberfläche zu sehen sind.
  4. Ich habe einen Test-EA geschrieben, der bei jedem OnTick()-Aufruf einfach den Geld- und Briefkurs und die Uhrzeit in eine CSV-Datei schreibt (ich hätte es TXT-Datei nennen sollen!).
  5. Führen Sie den Test-EA auf EURUSD_TDSmit den Einstellungen aus, die auf dem Screenshot in der ZIP-Datei zu sehen sind.
  6. Ich habe die Ergebnisse in der Datei mit den Ticks in der MT5-Benutzeroberfläche für dieselben Daten verglichen - sie stimmen nicht überein.
  7. Ich habe um Hilfe gebeten, warum sie nicht übereinstimmen.
  8. Entdecke, dass der Tester offenbar künstliche Ticks erzeugt - aber ich bin nicht weitergekommen.



Tick Data Suite
  • eareview.net
Everything you need to make your Metatrader 4 backtests accurate, get 99% modeling quality and to immediately spot which expert advisor is worth your time. From download to backtest, everything has been streamlined in an easy-to-use format. Updated often and offering premium-level support, the Tick Data Suite also has an associated recurring...
 
Mr David Frederick Roberts #: Ich habe in der Dokumentation nachgeschaut und kann nichts finden, was mir erklärt, warum der Tester künstliche Ticks generieren würde, wenn er einen vollständigen Satz von Tickdaten zur Verfügung hat! Tatsächlich heißt es.

Weil Sie in den Einstellungen des Testers nicht"Jeder Tick basiert auf echten Ticks " ausgewählt haben:


 
Andrey Khatimlianskii #:

Außerdem stieß ich auf "HistoryCache: container header read error [0]", gefolgt von "HistoryBase: invalid container (1970.01.01) found".

Dadurch wird die Historie für Januar 2022 aus der Historie des benutzerdefinierten Tools entfernt, wodurch eine Lücke vom 31. Dezember bis heute entsteht.

Es tritt nur auf 2 Computern auf, die Ressourcen sind ausreichend.

@Slava, welche Details benötigen Sie für die Reproduktion?

Es ist wieder passiert. Wenn ich durch Mitternacht gehe, scheint es:

FK      3       23:59:27.790    HistoryCache    'BTCUSDT.bnf' container header read error [0]
PR      3       23:59:27.790    HistoryBase     'BTCUSDT.bnf' invalid container (1970.01.01) found (off: 3144282240, size: 86589, file: 1925419658)
HQ      3       23:59:28.071    HistoryCache    'LUNAUSDT.bnf' container header read error [0]
HD      3       23:59:28.071    HistoryBase     'LUNAUSDT.bnf' invalid container (1970.01.01) found (off: 3144242580, size: 86589, file: 1925434658)
RK      3       23:59:28.344    HistoryCache    'MANAUSDT.bnf' container header read error [0]
EJ      3       23:59:28.344    HistoryBase     'MANAUSDT.bnf' invalid container (1970.01.01) found (off: 3144247980, size: 86589, file: 1925447087)
CD      3       23:59:28.633    HistoryCache    'ATOMUSDT.bnf' container header read error [0]
KQ      3       23:59:28.633    HistoryBase     'ATOMUSDT.bnf' invalid container (1970.01.01) found (off: 3144177171, size: 86589, file: 1925399738)
HN      0       00:14:15.224    Terminal        MetaTrader 5 x64 build 3210 started for MetaQuotes Software Corp.
NS      0       00:14:15.225    Terminal        Windows 10 build 17763, 20 x Intel Xeon  E5-2650 v3 @ 2.30 GHz, 12 / 15 Gb memory, 53 / 111 Gb disk, admin, GMT+3

Welcher Weg zum Graben?

 
Fernando Carreiro #:

Weil Sie in den Einstellungen des Testers nicht"Jeder Tick basiert auf echten Ticks " ausgewählt haben:


Aa, na endlich :-)

Danke Fernando, ich hatte schon den Verdacht, dass ich etwas Dummes tue, aber ich konnte es einfach nicht sehen! Wie ich schon sagte, bin ich viel vertrauter mit MT4 (etwa 8 Jahre) und ich hatte nicht bemerkt, dass es zwei "£Every Tick"-Optionen in MT5 gibt. Ich habe ihn einfach gestartet, gesehen, dass er auf "Every Tick" eingestellt war und angenommen, dass er, wenn er echte Ticks hat, diese verwenden würde.

Es musste etwas Einfaches sein, und ich danke Ihnen nochmals, dass Sie es entdeckt haben.

David.