Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Es gibt keine Ticks mehr mit der zuletzt bekannten Zeit.
Der OnTimer in Millisekunden garantiert, dass alle Ticks VOR diesem Timer-Ereignis abgelaufen sind. Das heißt, die Ticks sind für alle Symbole aktuell.
Wenn es darum geht, dass ein Spion-Indikator aus technischen Gründen einen „alten“ Tick zurückhalten und ihn nach einem neueren Tick für ein anderes Instrument senden könnte, dann ist dies wahrscheinlich möglich. Ansonsten sehe ich keine Probleme direkt im Code.
Ich glaube nicht, dass der Timer in größerem Maße garantiert, dass alle Ticks VOR dem neuen „Ereignis“ (dem Ablauf einer Zeiteinheit) verstrichen sind. Der Timer läuft in lokaler Zeit, während die Zeitstempel in den Ticks die Serverzeit enthalten. Daher ist es besser, sich bei der Synchronisation der Instrumente nicht auf den Timer zu verlassen.
Gut, für Ticks ist das angesichts der Komplexität der Synchronisation akzeptabel, obwohl wir einen Millisekunden-Zeitrahmen festlegen und die Ticks zeitlich anpassen könnten.
Aber bei den Eröffnungskursen ist es doch genauso, obwohl die Eröffnungszeit für alle Wertpapiere gleich ist.
Und aufgrund dieses Verhaltens lassen sich einige Systeme nicht ordnungsgemäß testen.
Demonstration des Problems.
Auf dem Screenshot sind alle Daten zur Nachstellung auf MetaQuotes-Demo zu sehen. Es ist deutlich zu erkennen, dass die Ticks über OnTick nicht synchronisiert sind, während sie über OnTimer (der extrem langsam ist) synchronisiert sind.
Über OnTick sind die Ticks nicht synchronisiert, über OnTimer (was extrem langsam ist) hingegen schon.
Anscheinend ist der einzige Weg, die Berechnungen im synchronisierten Modus zu beschleunigen, der mathematische Modus nach dem Vorbild von EAToMath.
Oder man speichert diese Daten eines einzelnen Durchlaufs vorab in einer Datei.
Und im eigenen Expert Advisor die Daten dieser Datei für die Synchronisation in OnTick zu verwenden. Das wird schnell und korrekt funktionieren.
Veranschaulichung des Problems.
Auf dem Screenshot sind alle Daten zur Reproduktion auf der MetaQuotes-Demo zu sehen. Es ist deutlich zu erkennen, dass die Ticks über OnTick nicht synchronisiert sind, während sie über OnTimer (der extrem langsam ist) synchronisiert sind.
Nun, Sie haben Ihren Code mit der Bedingung für den Einstieg in den Handel über == verwendet. Ich habe oben geschrieben, dass die Bedingung streng > lauten muss, ohne Gleichheitszeichen. Um für alle Instrumente synchrone Trades zu den letzten Kursen durchzuführen, die bis zum 01.10.2025, 01:00:00.081 bekannt sind, müssen Sie die Überwachung der Ticks vor diesem Zeitpunkt beginnen, d. h. als Demonstrationskonstante beispielsweise >1759280400080 als Demonstrationskonstante zu verwenden. Für jeden Algorithmus muss die Logik angepasst werden – es reicht nicht aus, einfach einen Handler-Typ durch einen anderen zu ersetzen.
PS: Mit Synchronisation meine ich den Handel zu den zuletzt bekannten Kursen. Für eine Synchronisation auf Millisekunden-Ebene sind natürlich zusätzliche Überprüfungen erforderlich, aber die Wahrscheinlichkeit solcher Situationen (Übereinstimmung der Millisekunden-Ticks verschiedener Instrumente) ist gering, was bedeutet, dass potenzielle Signale übersehen werden. Ich bin mir nicht sicher, ob eine solche Synchronisation von praktischem Interesse ist.
Um synchrone Transaktionen zu den letzten Kursen durchzuführen, die bis zum 01.10.2025, 01:00:00 Uhr bekannt sind.081 für alle Instrumente, müssen Sie bereits vor diesem Zeitpunkt mit der Überwachung der Ticks beginnen, d. h. beispielsweise >1759280400080 als Demonstrationskonstante verwenden.
Die einfachste Methode zur Synchronisation besteht darin, eine Menge aus den Zeit-Ticks der verwendeten Zeichen zu bilden.
Es ist schwierig, die Synchronisation während des Laufs in einem Durchgang durchzuführen.
Die Schwierigkeit liegt in der Ungewissheit bezüglich des Zeitrückstands. Es ist nicht bekannt, welches Symbol das führende sein wird.
Ich bin bereit, mir Ihre Variante im Code anzusehen.
Für einen umfassenden Testfall müsste ich die praktische Aufgabenstellung verstehen – handeln wir nur anhand von Ticks, deren Zeitangaben auf die Millisekunde genau übereinstimmen?
Für ein künstliches Beispiel mit einer einzigen Transaktion zu einem im Voraus bekannten Zeitpunkt und synchronen Ticks bei allen Instrumenten – man könnte sich zwar einen künstlichen optimalen Algorithmus ausdenken, aber wozu?
Aber bei den Eröffnungskursen ist es doch genauso, obwohl die Öffnungszeiten für alle Wertpapiere gleich sind.
Man müsste die Aufgabe präzisieren. Bei den Eröffnungskursen warten wir – sofern der Algorithmus das Vorhandensein von Kerzen aller Symbole erfordert – so lange, bis iTime(,,0) bei allen Symbolen übereinstimmt. Bei Kerzen stellt dieser Ansatz in der Regel kein logisches Problem dar, da Kerzen (selbst M1) selten fehlen; bei Sekunden und noch kleineren Zeitintervallen können Synchronisationslücken jedoch häufig auftreten. Was ist in solchen Momenten zu tun?
Ich gehe davon aus, dass in der Praxis das Vorhandensein eines beliebigen Kurses, der nicht älter als ein bestimmtes vorgegebenes Timeout ist, als Synchronisation herangezogen werden sollte, und nicht die strikte Übereinstimmung der Zeitstempel der Ticks.
Man sollte die Aufgabe genauer definieren. Bei den Eröffnungskursen warten wir, sofern der Algorithmus das Vorhandensein von Kerzen aller Symbole erfordert, so lange, bis iTime(,,0) bei allen Symbolen übereinstimmt. Bei den Kerzen gibt es bei diesem Ansatz in der Regel kein logisches Problem, da Kerzen (selbst bei M1) selten fehlen.
Gemeint ist der Tester-Modus mit Eröffnungskursen.
Bei Sekunden und noch kleineren Zeitintervallen kann es häufig zu Synchronisationsfehlern kommen. Was ist in solchen Fällen zu tun?
Den letzten bekannten Wert verwenden.