Seconds Tick and Range Charts MT5
- Utilitys
-
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself. - Version: 1.0
- Aktivierungen: 10
Sekundenbalken (1 bis 30 Sekunden), Tick-Balken und Range-Balken für MetaTrader 5, aus der echten Tick-Historie des Brokers als benutzerdefiniertes Symbol erstellt und bei jedem Tick aktualisiert. Jeder Indikator, jede Vorlage und jeder EA kann auf dem Chart laufen. Eine Hilfsanzeige auf dem Chart zeigt die echte Zeit jedes Balkens. Der EA handelt nie auf einem Chart.
Was er macht
Hängen Sie den EA an den Chart eines Broker-Symbols. Er:
- erstellt ein benutzerdefiniertes Symbol, zum Beispiel EURUSD_S5, mit den Spezifikationen des Quellsymbols
- erstellt dessen Historie aus den echten Ticks des Brokers, standardmäßig für die letzten 3 Tage, in Abschnitten (in den Tests dauerten 3 Tage BTCUSDm, 376.095 Ticks, 2,0 s)
- öffnet den benutzerdefinierten Chart, mit Ihrer Vorlage, falls Sie eine angeben
- fügt jeden neuen Tick der Quelle dem benutzerdefinierten Chart hinzu, sobald er eintrifft
- liest jeden neuen Balken mehrmals pro Sekunde aus dem Terminal zurück (gemessen in MetaTrader 5 Build 6230: Balken, die das Terminal aus Live-Ticks bildet, können verloren gehen, wenn kein Chart und kein Programm sie liest; regelmäßiges Lesen verhindert das)
- prüft die Balken alle 60 Sekunden gegen die Tick-Historie des Brokers und zählt die Ticks, die das benutzerdefinierte Symbol für sie enthält
- prüft bei einem erneuten Start auf einem vorhandenen benutzerdefinierten Chart (zum Beispiel nach einem Neustart des Terminals), ob die Balken des letzten Teils der Historie vollständig vorhanden sind, bevor er fortfährt
- erstellt, wenn ein Balken falsch bleibt, das gesamte benutzerdefinierte Symbol neu aus der Tick-Historie, ab demselben ersten Tick: die einzige Reparatur, die in jedem Test exakt war (gemessen in Build 6230: Das Schreiben einzelner Balken oder das Löschen eines Teils eines benutzerdefinierten Symbols, das Live-Ticks empfängt, kann dazu führen, dass das Terminal andere Balken oder Ticks verliert)
Chart-Typen
- Sekundenbalken (Seconds bars): 1, 2, 3, 4, 5, 6, 10, 12, 15, 20 oder 30 Sekunden. Ein Balken enthält die Ticks eines Intervalls. Ein Intervall ohne Ticks hat keinen Balken, so wie eine Minute ohne Ticks auf M1 keinen Balken hat.
- Tick-Balken (Tick bars): ein neuer Balken alle N Ticks.
- Range-Balken (Range bars): Ein neuer Balken beginnt, wenn der nächste Preis die Hoch-Tief-Spanne des Balkens größer als N Punkte machen würde, sodass kein Balken größer als N Punkte ist. Wenn der Preis springt, beginnt der neue Balken beim neuen Preis; für den Sprung werden keine Füllbalken gezeichnet.
Die Balken werden aus dem Bid-Preis gebildet. Das Tick-Volumen eines Balkens ist die Anzahl der Ticks darin.
Mehrere Kopien können gleichzeitig laufen, ein EA pro benutzerdefiniertem Symbol: zum Beispiel 5-Sekunden-Balken von EURUSD auf einem Chart und 200-Punkte-Range-Balken von XAUUSD auf einem anderen. Ein zweiter EA für dasselbe benutzerdefinierte Symbol startet nicht und nennt den Grund auf seinem Panel.
Jeder Tick in genau einem Balken
Das benutzerdefinierte Symbol erhält die Ticks des Brokers selbst, keine Kopie der Balken. In den Tests wurden die Balken mit einer unabhängigen Neuberechnung aus der Tick-Historie des Brokers verglichen:
- Die Summe der Tick-Volumen entspricht der Anzahl der Quell-Ticks.
- Jeder Balken (Eröffnung, Hoch, Tief, Schluss und Tick-Volumen) stimmt mit der Neuberechnung überein.
- Bei Sekundenbalken enthielt kein Intervall ohne Balken einen Quell-Tick.
In einem 75-minütigen Test mit 10 benutzerdefinierten Symbolen gleichzeitig (Balken zu 1, 2 und 5 Sekunden, Balken zu 20, 50 und 100 Ticks, Range-Balken zu 200 und 1000 Punkten; insgesamt 2.537.558 Ticks) galten alle drei Punkte für jedes Symbol, auch für die Symbole, die neu erstellt wurden, nachdem das Terminal 2 Minuten lang eingefroren war.
Lücken auf Sekunden-Charts: Auf BTCUSDm (etwa ein Tick pro Sekunde an einem Samstag) hatte der 1-Sekunden-Chart 81.920 Balken für 121.859 Ticks. Jedes 1-Sekunden-Intervall ohne Balken wurde gegen die Ticks des Brokers geprüft und enthielt keinen. Eine Lücke auf einem Sekunden-Chart ist eine Zeit, in der der Broker keinen Tick gesendet hat, kein verlorener Balken.
Die Zeitskala (bitte lesen)
MetaTrader 5 hat keinen Zeitrahmen unter einer Minute, und ein benutzerdefinierter Chart wird immer auf der M1-Zeitskala gezeichnet. Daher belegt jeder Balken des benutzerdefinierten Charts einen Minuten-Slot, und die Daten unter dem Chart zählen diese Slots ab Januar 1971: sie zeigen nicht die Uhrzeit. Nur so können auf einem MetaTrader 5-Chart Balken existieren, die kürzer als eine Minute sind.
Der EA fügt dem benutzerdefinierten Chart eine kleine Hilfsanzeige hinzu, die die echte Zeit zeigt (überall in dieser Beschreibung bedeutet echte Zeit die Serverzeit des Brokers, wie auf dem eigenen Chart des Broker-Symbols):
- Last bar: (letzter Balken) Startzeit auf die Millisekunde genau, Dauer und Anzahl der Ticks
- Cursor bar: (Balken unter dem Cursor) dasselbe für den Balken unter der Maus
- eine zweite Zeitskala mit echten Zeiten über der eigenen Zeitskala des Charts
- ob der Chart aktualisiert wird: "Live: updated on every tick of EURUSD", "Building history from real ticks: 40.0%", "Waiting for the connection to the trade server", "Checking the bars after the start (up to 60 s)", "Not updating for 12 s: check the EA on the EURUSD chart" oder "Not updating: no EA builds EURUSD_S5 now"
Lassen Sie den benutzerdefinierten Chart auf M1: Ein M1-Balken ist ein Sekunden-, Tick- oder Range-Balken. Ein höherer Zeitrahmen fasst mehrere Balken zusammen.
Geschwindigkeit
Gemessen in einem 75-minütigen Test mit 10 EAs und 8 benutzerdefinierten Charts gleichzeitig in einem Terminal: die Zeit von dem Moment, in dem ein Indikator auf dem Quell-Chart einen Tick sah, bis zu dem Moment, in dem ein Indikator auf dem benutzerdefinierten Chart ihn sah. BTCUSDm lief live auf einem Demokonto. Gold und der Nasdaq-Index waren geschlossen (Samstag), daher wurden ihre Charts mit den echten Ticks vom Freitag in ihrem echten Tempo gespeist, bis zu 61 Ticks pro Sekunde.
| Benutzerdefinierter Chart | Ticks pro Sekunde | Median | 99 % der Ticks innerhalb | Langsamster |
|---|---|---|---|---|
| BTCUSDm, 5-Sekunden-Balken (live) | 1 | 0,2 ms | 30 ms | 262 ms |
| BTCUSDm, 1-Sekunden-Balken (live) | 0,9 | 0,3 ms | 35 ms | 262 ms |
| BTCUSDm, 50-Tick-Balken (live) | 1 | 0,2 ms | 32 ms | 281 ms |
| Gold, 1-Sekunden-Balken (Wiedergabe) | 12 | 0,4 ms | 65 ms | 173 ms |
| Gold, 100-Tick-Balken (Wiedergabe) | 12 | 0,3 ms | 111 ms | 140 ms |
| Nasdaq, 5-Sekunden-Balken (Wiedergabe) | 61 | 0,6 ms | 40 ms | 1,7 s (*) |
| Nasdaq, 1000-Punkte-Range-Balken (Wiedergabe) | 61 | 0,8 ms | 41 ms | 2,5 s (*) |
(*) In den 2 Minuten, nachdem das Terminal 2 Minuten lang eingefroren war: Die verzögerten Ticks kamen auf einmal an, und der EA erstellte das Symbol neu. Zu allen anderen Zeiten dauerte der langsamste Tick 142 ms und 156 ms. Über die 75 Minuten nutzte das Terminal insgesamt etwa einen CPU-Kern und 680 bis 703 MB Arbeitsspeicher, ohne Verlangsamung von den ersten zu den letzten 10 Minuten.
Das Panel auf dem Quell-Chart zeigt während des Betriebs die eigene Schreibzeit des EA pro Tick-Ereignis, Median und 99. Perzentil (0,03 ms Median im Test).
Verbindungsverlust, Neustart und Änderungen
Gemessen im selben 75-minütigen Test, bei den Neustarts des Terminals danach und in einem separaten Test von Parameteränderungen:
- Terminal 2 Minuten lang eingefroren: Als es zurückkam, meldete es die Verbindung zum Handelsserver als verloren und wiederhergestellt. Innerhalb von 15 Sekunden fanden die EAs 4 benutzerdefinierte Symbole mit fehlenden Balken oder Ticks und erstellten sie neu (jeweils 0,2 bis 2,4 s). Danach bestanden alle 10 Symbole die oben beschriebene Prüfung. Eine Netzwerkunterbrechung von mehreren Minuten wurde nicht getestet.
- Zeitrahmen des Quell-Charts geändert (M1 auf M5 und zurück): Der EA setzte beim letzten Balken fort, ohne Neuerstellung.
- Eingabeparameter geändert über eine Vorlage mit anderen Parametern: Der EA setzte beim letzten Balken fort.
- Chart-Typ geändert bei laufendem EA (von 5-Sekunden- auf 50-Tick-Balken und zurück): Er erstellte das neue benutzerdefinierte Symbol und ließ den alten Chart stehen; zurück auf 5-Sekunden-Balken nach 91 s setzte er das alte Symbol fort und fügte die Ticks dieser 91 s hinzu. Beide Symbole bestanden die oben beschriebene Prüfung.
- Quell-Chart 3 Minuten lang geschlossen: Die Hilfsanzeige zeigte "Not updating: no EA builds BTCUSDm_S1 now". Als der Chart mit dem EA wieder geöffnet wurde, setzte er beim letzten Balken fort, und die Ticks der 3 Minuten waren 0,34 s später auf dem Chart.
- Terminal 7-mal geschlossen und neu gestartet (für 3 Sekunden bis etwa 1,5 Minuten geschlossen): 40 der 51 EA-Starts setzten bei ihren letzten Balken fort. 11 fanden fehlende Balken (vom Terminal verworfen, siehe Einschränkungen), warteten die 60 Sekunden ab (in der finalen Version zeigt die Hilfsanzeige währenddessen "Checking the bars after the start") und erstellten ihre Symbole neu (jeweils 0,2 bis 1,3 s). Nach 5 der 7 Starts verwarf das Terminal einige Minuten später Balken des Symbols ohne geöffneten Chart; der EA bemerkte dies bei seiner nächsten Prüfung und erstellte das Symbol neu (in 2 Tests endete der Test vor dieser Prüfung).
- Ein zweiter EA für dasselbe benutzerdefinierte Symbol startete nicht, auch nicht bei 7 Terminal-Starts, bei denen alle EAs des Terminals gleichzeitig starten.
Wenn Sie den EA entfernen, bleiben das benutzerdefinierte Symbol und sein Chart bestehen. Hängen Sie ihn mit denselben Einstellungen wieder an, und er setzt beim letzten Balken fort, nachdem er geprüft hat, dass die Balken davor vollständig vorhanden sind (falls nicht, erstellt er die Historie selbst neu).
Eingabeparameter
| Parameter | Standardwert | Bedeutung |
|---|---|---|
| Chart type | Seconds bars | Seconds bars, Tick bars, Range bars |
| Seconds bars: seconds per bar | 5 seconds | 1, 2, 3, 4, 5, 6, 10, 12, 15, 20 oder 30 |
| Tick bars: ticks per bar | 100 | 1 bis 100.000 |
| Range bars: range of a bar in points | 100 | Punkte des Quellsymbols |
| Source symbol | leer | Leer = das Symbol des Charts, an den der EA angehängt ist |
| Days of real tick history to build | 3 | 0,01 bis 60, verwendet, wenn das benutzerdefinierte Symbol erstellt wird. Die Tick-Historie des Brokers kann kürzer sein. Ein neuer Wert erstellt ein vorhandenes benutzerdefiniertes Symbol nicht neu: Setzen Sie dafür den nächsten Parameter einmal auf true |
| Build the history again at start | false | Andernfalls setzt er beim letzten Balken fort, wenn Chart-Typ, dessen Einstellung und Quelle gleich sind |
| Custom symbol name | leer | Leer = automatisch, zum Beispiel EURUSD_S5, EURUSD_T100, EURUSD_R100 |
| Open the custom chart | true | |
| Template for the custom chart | leer | Eine Vorlage aus MQL5\Profiles\Templates, angewendet beim Öffnen des Charts |
| Show the real time of the bars on the custom chart | true | Die oben beschriebene Hilfsanzeige |
| Close the custom chart when the EA is removed | false | |
| Tester only: open and close sample positions | true | Siehe unten |
Strategietester
MetaTrader 5 erlaubt im Strategietester keine benutzerdefinierten Symbole und keine neuen Charts (gemessen: beides wird mit Fehler 4014 abgelehnt). Im Tester bildet der EA deshalb dieselben Balken im Speicher, mit demselben Code, aus den Ticks, die der Tester ihm liefert, und zeichnet sie im visuellen Modus in einem Unterfenster unter dem Tester-Chart. Am Ende eines Laufs schreibt er, wie viele Balken er gebildet hat und dass jeder Tick in genau einem Balken liegt. Verwenden Sie "Every tick based on real ticks", um die Balken zu sehen, die aus den echten Ticks des Brokers gebildet werden.
Nur im Strategietester öffnet und schließt der EA außerdem eine kurze Serie von Beispielpositionen, weil der Market prüft, dass ein Expert Advisor handelt:
- Mindestvolumen, jeweils nur eine Position, bis zu 30 Positionen
- vor jeder neuen Position wird die freie Margin geprüft; bei zu wenig Geld schreibt er einen Hinweis und sendet nichts
Die Beispielpositionen sind keine Handelsstrategie, und ihre Ergebnisse sagen nichts über Profit aus. Auf einem Live- oder Demo-Chart sendet, ändert oder schließt der EA niemals eine Order.
Einschränkungen (bitte vor dem Kauf lesen)
- Die Zeitskala zählt Slots, nicht die Uhrzeit. Siehe "Die Zeitskala" oben. Indikatoren, die die Zeit eines Balkens verwenden (Sessions, tägliche Pivots, Zeitfilter), sehen auf dem benutzerdefinierten Chart Slot-Zeiten, keine echten Zeiten.
- Der Kurs des benutzerdefinierten Symbols liegt einen Tick zurück. Gemessen: Wenn ein Indikator oder EA auf dem benutzerdefinierten Chart für einen neuen Tick aufgerufen wird, enthalten die Balken und die Tick-Historie des benutzerdefinierten Symbols diesen Tick bereits, aber der Kurs des benutzerdefinierten Symbols (Marktübersicht, SymbolInfoTick, die Bid-Linie im Chart) zeigt den vorherigen Tick, bis der nächste hinzugefügt wird. Sieben Umgehungswege wurden in MetaTrader 5 Build 6230 ausprobiert, und keiner funktionierte. Ein Indikator oder EA auf dem benutzerdefinierten Chart sollte die Preise aus den Balken lesen (der Schlusskurs des letzten Balkens ist der neueste Tick).
- Mit benutzerdefinierten Symbolen kann nicht gehandelt werden. Ein EA, der auf dem benutzerdefinierten Chart läuft, muss seine Orders für das Broker-Symbol senden.
- Nur Bid-Charts. Symbole, die der Broker nach dem Last-Preis zeichnet (Börsenaktien und Futures), werden mit einer Meldung auf dem Panel abgelehnt.
- Die Historientiefe bestimmt der Broker. Die erste Erstellung lädt die Tick-Historie des Brokers herunter; Broker bewahren sie nur begrenzte Zeit auf. Eine lange Historie kurzer Balken kann die Einstellung "Max bars in chart" des Terminals (Extras, Optionen, Charts) überschreiten; der Chart zeigt dann nur die neuesten Balken. Die eigenen Prüfungen des EA lesen höchstens die Hälfte dieses Werts zurück, sodass ein niedriger Wert nur dazu führt, dass sie weniger Balken betrachten (getestet mit 5.000 und einem 1-Sekunden-Chart mit etwa 80.000 Balken: keine zusätzlichen Neuerstellungen in 8 Minuten).
- Sekundenbalken haben nur für begrenzte Zeit Platz. Die Slots müssen in der Vergangenheit bleiben: Ein 1-Sekunden-Chart hat ab seinem Beginn Platz für etwa 339 Tage an Balken, ein 5-Sekunden-Chart für etwa 4,6 Jahre. Wenn der Platz aufgebraucht ist, erstellt der EA die Historie selbst neu.
- Lassen Sie den EA laufen, solange Sie den benutzerdefinierten Chart verwenden. Gemessen in Build 6230: Wenn der EA entfernt oder das Terminal neu gestartet wurde, verwarf das Terminal manchmal die Balken des neuesten Teils eines benutzerdefinierten Symbols (bis zu einem Slot-Tag, 1.440 Balken), während es die Ticks behielt. Ein Chart, der ohne den EA geöffnet bleibt, zeigt dann eine Lücke. Wenn der EA wieder startet, bemerkt er dies und erstellt das Symbol neu. Nach einem Neustart kann der Chart eine solche Lücke bis zu etwa einer Minute lang zeigen: Der EA wartet bis zu 60 Sekunden, bis das Terminal die Balken geladen hat (die Hilfsanzeige zeigt dann "Checking the bars after the start"), und wenn noch Balken fehlen, erstellt er das Symbol neu (0,2 bis 1,3 s in den Tests). In den Tests verwarf das Terminal auch einige Minuten nach einem Neustart Balken, während der EA lief: Der EA bemerkte dies mit seinen Prüfungen (alle 60 Sekunden; in drei Tests kam die Reparatur 74 Sekunden, nachdem der eigene Prüfer des Tests die Lücke gesehen hatte) und erstellte das Symbol neu; ein Symbol ohne geöffneten Chart kann die Lücke bis zu dieser Prüfung oder bis zum nächsten Start behalten. Am häufigsten trat dies bei einem benutzerdefinierten Symbol ohne geöffneten Chart auf.
- Eine Reparatur leert das gesamte benutzerdefinierte Symbol und füllt es neu. Wenn eine Prüfung einen falschen oder fehlenden Balken findet, löscht der EA die Ticks und Balken des benutzerdefinierten Symbols und schreibt sie ab demselben ersten Tick neu (0,2 bis 2,4 s in den Tests). Indikatoren und EAs auf dem benutzerdefinierten Chart sehen währenddessen, wie die Historie verschwindet und wiederkommt.
- Ein EA pro benutzerdefiniertem Symbol, und er belegt den EA-Platz seines Charts: Hängen Sie ihn an einen freien Chart des Quellsymbols, nicht an den Chart eines handelnden EA.
- Kein Strategietester auf dem benutzerdefinierten Symbol. Gemessen in Build 6230: Der Tester liefert die Ticks des benutzerdefinierten Symbols, bildet aber nur einen Teil seiner Balken oder gar keine (1.324 und 0 von 4.316 M1-Balken in zwei Tests), sodass ein EA, der die Balken braucht, darauf nicht getestet werden kann. Testen Sie einen solchen EA auf dem Broker-Symbol.
- Getestete Umgebung:
- nur MetaTrader 5 Build 6230, Windows 10, ein Bildschirm mit 3840 x 2160 bei 288 dpi
- ein Demokonto bei einem Retail-CFD-Broker: BTCUSDm und ETHUSDm live, Ticks von XAUUSDm und USTECm vom Freitag in ihrem echten Tempo wiedergegeben (Tests am Samstag); Historie von EURUSDm, XAUUSDm und USTECm für die Screenshots
- Strategietester: Netting- und Hedging-Demokonten des Demo-Servers der Plattform, EURUSD, GBPUSD, XAUUSD
- längster Test 75 Minuten; nicht getestet bei anderen Brokern, auf Echtgeldkonten oder auf MQL5 VPS
- Bitte testen Sie zuerst die kostenlose Demo im Strategietester. Die Demo zeigt die Balken nur in einem Unterfenster des Testers (siehe "Strategietester" oben); der benutzerdefinierte Chart auf einem Live- oder Demokonto erfordert die Vollversion.
