und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
- Ansichten:
- 10
- Rating:
- Veröffentlicht:
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Jeder Backtest, jeder Indikator und jedes Optimierungsergebnis basiert auf dem Kursverlauf, den das Terminal gerade vorrätig hat, und fast niemand überprüft diesen Verlauf. Dieses Tool tut genau das: Es liest die Kerzen aus, die Ihr Terminal an einen Expert Advisor übergeben würde, und zählt darin sechs Arten von Fehlern – unmögliche OHLC-Werte, fehlerhafte Kerzenzeiten, fehlende Kerzen, obwohl der Broker angibt, dass er zu diesem Zeitpunkt Kurse bereitgestellt hat, Kerzen ohne Ticks oder ohne jegliche Spanne sowie Bars, die nicht mit der eigenen M1-Reihe des Brokers übereinstimmen, sowie Spreads, die null betragen oder einen von Ihnen festgelegten Grenzwert überschreiten.

Fünf Market-Watch-Symbole, M15, jeweils 5.000 geschlossene Balken; der Durchlauf dauert etwa eine Sekunde. „Sess%“ ist die Spalte, auf die man achten muss – 99,80 für XAUUSD gegenüber 100,00 für die anderen vier –, während „Grid%“ zwischen 68 und 100 schwankt und hauptsächlich angibt, wie viel „Wochenende“ jedes Symbol aufweist. Dies ist dieselbe Überprüfung wie der weiter unten stehende Journal-Block, die zwei Minuten später auf einem zweiten Chart für den Screenshot wiederholt wurde, weshalb sich das Dateipräfix unterscheidet; alle Zahlen sind identisch. Die Findings-Datei wurde dafür deaktiviert, und „csv rows“ zählt die Zeilen dieser Datei, weshalb neben 85 Findings der Wert 0 angezeigt wird. Das gelieferte Panel besteht aus hellem Text auf dunklem Hintergrund und wurde hier in Schwarz-auf-Weiß umgefärbt.
Das Problem
Ein fehlender Balken ist unsichtbar. Kerzen stehen im Chart nebeneinander, egal ob der Zeitraum zwischen ihnen eine Periode oder drei Stunden beträgt, sodass eine Lücke in der Historie genau wie ein ruhiger Markt aussieht. Auch der Strategietester warnt nicht davor: Er modelliert das, was ihm vorgelegt wird, und eine Strategie, die über eine Lücke hinweg getestet wird, wird auf einem Markt getestet, der die Stunde übersprungen hat, in der sie Geld verloren hätte.
Die entscheidenden Fehler sind nicht ungewöhnlich. Ein Balken, dessen Schlusskurs über seinem eigenen Höchststand liegt, lässt einen Stop-Loss-Test bestehen, den er in der Realität nicht bestanden hätte. Ein doppelter Balkenzeitpunkt führt dazu, dass jede Berechnung „Balken zurück“ auf den falschen Balken verweist. Ein Null-Tick-Balken ist ein Kurs, den der Markt nie notiert hat. Ein Zeitrahmen, dessen Balken nicht mit den M1-Balken des Brokers übereinstimmen, bedeutet, dass zwei Ihrer Indikatoren zwei unterschiedliche Vergangenheiten anzeigen.
Der übliche Test für all dies besteht darin, durch das Chart zu scrollen und zu prüfen, ob etwas seltsam aussieht. Dieser Test findet nichts – und er findet nichts auf überzeugende Weise.
Was er misst
Sechs unabhängige Prüfungen über die letzten N geschlossenen Balken eines Zeitrahmens, für ein Symbol, eine Liste oder den gesamten Marktüberblick. Jede Prüfung hat eine Definition, die manuell nachgerechnet werden kann, und jedes Ergebnis wird zusammen mit der Balkenzeit in eine CSV-Datei geschrieben, sodass der Bericht überprüft werden kann, anstatt ihm einfach zu glauben.
- OHLC-Konsistenz: Hoch < Tief, Eröffnungs- oder Schlusskurs außerhalb von [Tief, Hoch] oder einer der vier Kurse bei oder unter Null. Ein Ergebnis pro Kerze pro verletztem Prädikat: Eine invertierte Kerze erzeugt legitimerweise mehrere Ergebnisse, da Eröffnungs- und Schlusskurs dann gleichzeitig sowohl über dem Hoch als auch unter dem Tief liegen.
- Balkenzeiten. Eine Zeit, die von einem Balken zum nächsten nicht zunimmt (ein Duplikat oder ein Balken in falscher Reihenfolge), und ein Balken, dessen Eröffnungszeit nicht auf dem Periodengitter liegt – time % PeriodSeconds() != 0 –, was typisch für einen durch einen fehlerhaften Import oder eine unterbrochene Serversitzung erstellten Verlauf ist.
- Fehlende Balken im Vergleich zu den eigenen Sitzungen des Symbols. Für jedes Paar aufeinanderfolgender Balken berechnet das Tool, wie viele Öffnungen des Rasters zwischen ihnen fehlen. Anschließend – und das ist der Teil, der die Zahl nutzbar macht – fragt es SymbolInfoSessionQuote ab, ob der Markt an jeder fehlenden Öffnung eigentlich Kurse hätte notieren sollen. Fehlende Eröffnungen außerhalb jeder Notierungssitzung werden *erklärt* (Nächte, Wochenenden, Feiertage in der Sitzungstabelle); fehlende Eröffnungen innerhalb einer Sitzung sind ungeklärt und werden separat gezählt. Ein Symbol, für das überhaupt keine Sitzungsdaten vorliegen, wird als „nicht klassifiziert“ gemeldet – niemals stillschweigend als „erklärt“. Weder dieser Fall noch ein leeres M1-Fenster traten bei dem unten untersuchten Broker auf; sie werden behandelt, aber nicht demonstriert.
- Leere und flache Balken. `tick_volume == 0` ist ein Balken, der aus keinen Ticks aufgebaut ist. `open == high == low == close` mit darin enthaltenen Ticks ist ein flacher Balken: zulässig in einer ruhigen Stunde, verdächtig in einer liquiden und wissenswert, bevor ein Indikator durch den Balkenbereich dividiert.
- M1-Gegenprüfung. Jeder geprüfte Balken wird aus den M1-Balken innerhalb seines eigenen Zeitfensters neu aufgebaut – zunächst Eröffnungskurs, höchster Höchstkurs, tiefster Tiefstkurs, letzter Schlusskurs, summiertes Tick-Volumen – und mit dem Balken verglichen, den der Broker für den übergeordneten Zeitrahmen bereitstellt. Es werden nur Fenster verglichen, die der M1-Verlauf tatsächlich abdeckt; Fenster außerhalb der M1-Abdeckung werden als „außerhalb der Abdeckung“ gemeldet, und Fenster innerhalb der Abdeckung, in denen überhaupt kein M1-Balken vorhanden ist, erhalten einen eigenen Zähler. Abweichungen werden in Punkten gemessen, wobei eine Toleranz optional ist.
- Spread-Plausibilität. Die Anzahl der Balken, deren gespeicherter Spread null ist, die Anzahl derjenigen, die über einem von Ihnen festgelegten Grenzwert liegen, sowie der maximale und mittlere Spread über die geprüften Balken. Ein Verlauf voller Null-Spreads ist ein Verlauf, der keine Fragen zu den Kosten beantworten kann.
Die wichtigste Kennzahl ist die Sitzungsabdeckung: der Anteil der Eröffnungen, die laut der eigenen Sitzungstabelle des Brokers vorhanden sein sollten und tatsächlich einen Balken aufweisen. Die Rasterabdeckung – dasselbe Verhältnis über alle Zeitfenster hinweg, einschließlich Nächte und Wochenenden – wird daneben angezeigt, da sie für sich genommen hauptsächlich aussagt, wie viele Wochenenden Sie geprüft haben.
Messbeispiel
Fünf Symbole aus dem Market Watch eines Exness-Demo-Terminals (Build 6230), M15, jeweils die letzten 5.000 geschlossenen Balken, geprüft in etwa einer Sekunde am 02.10.2026 um 08:07 Uhr Serverzeit.
| Symbol | Balken | Spanne, Tage | Lücken | fehlende Eröffnungswerte | Fehlende Werte während der Handelssitzung | OHLC | Zeitfehler | leer / flach | M1 verglichen / nicht übereinstimmend / max. Abweichung | Rasterabdeckung | Sitzungsabdeckung |
|---|---|---|---|---|---|---|---|---|---|---|---|
| XAUUSD | 5 000 | 76,5 | 55 | 2 342 | 10 | 0 | 0 | 0 / 0 | 5.000 / 0 / 0,0000 Punkte | 68,10 % | 99,80 % |
| EURUSD | 5 000 | 72,1 | 10 | 1 920 | 0 | 0 | 0 | 0 / 0 | 5.000 / 0 / 0,0000 Punkte | 72,25 % | 100,00 % |
| BTCUSD | 5.000 | 52,1 | 0 | 0 | 0 | 0 | 0 | 0 / 0 | 5.000 / 0 / 0,0000 Punkte | 100,00 % | 100,00 % |
| GBPUSD | 5.000 | 72,1 | 10 | 1 920 | 0 | 0 | 0 | 0 / 0 | 5.000 / 0 / 0,0000 Punkte | 72,25 % | 100,00 % |
| USDJPY | 5.000 | 72,1 | 10 | 1 920 | 0 | 0 | 0 | 0 / 0 | 5.000 / 0 / 0,0000 Punkte | 72,25 % | 100,00 % |
Vergleichen Sie die beiden Spalten zur Abdeckung miteinander, denn genau darin liegt das gesamte Argument für ihre Trennung. Die Grid-Abdeckung gibt für jedes Devisensymbol 68–72 % und für BTCUSD 100 % an, was nichts anderes aussagt, als dass der Devisenmarkt am Wochenende schließt und der Kryptomarkt nicht. Die Sitzungsabdeckung – dasselbe Verhältnis, jedoch nur bezogen auf die Eröffnungszeiten, die in der hauseigenen Sitzungstabelle des Brokers angegeben sind – gibt viermal 100,00 % und für XAUUSD 99,80 % an. Eine Zahl in diesem Spaltenpaar ist fehlerhaft; der Rest ist auf den Kalender zurückzuführen.
Diese 0,20 % entsprechen einer einzigen Lücke, die klein genug ist, um manuell überprüft zu werden. Die Ergebnisdatei enthält dafür eine Zeile:
Symbol;Zeitraum;Prüfung;Balkenindex;Balkenzeit;Feld;Detail;Wert XAUUSD;M15;C3_GAP;3304;07.09.2026 18:30:00;Lücke;Klasse=ungeklärt in_session=10;14
In einer C3_GAP-Zeile ist „bar_time“ der erste fehlende Eröffnungskurs und „bar_index“ der Index – gezählt ab Null bei der ältesten geprüften Kerze – der Kerze, die auf die Lücke folgt. Diese Zeile lautet also: Am Montag, dem 07.09.2026, folgt auf den Balken mit Eröffnungszeit 18:15 der Balken mit Eröffnungszeit 22:00, und die vierzehn Eröffnungszeiten von 18:30 bis 21:45 fehlen. Die von diesem Broker angegebenen Handelssitzungen für Gold an einem Montag sind 00:00–20:58 Uhr und 22:00–24:00 Uhr. Zehn der fehlenden Eröffnungszeiten, von 18:30 bis 20:45 Uhr, fallen in den ersten Handelszeitraum; die restlichen vier, von 21:00 bis 21:45 Uhr, fallen in die angegebene Pause. Zehn ungeklärt, vier geklärt – so lautet die Zeile. Zweieinhalb Stunden eines liquiden Montagabends, die jeder Backtest auf diesem Terminal stillschweigend überspringt, und auf dem Chart sind es zwei nebeneinander stehende Kerzen.
Die übrigen 2.332 fehlenden XAUUSD-Eröffnungswerte sind im Kalender verzeichnet: elf Wochenenden mit jeweils 196 Eröffnungswerten, 43 tägliche Pausen zu je vier sowie die vier Pausen-Eröffnungswerte innerhalb dieser Lücke am Montag – 2.156 + 172 + 4. Die 1.920 pro Devisenpaar entfallen auf zehn Wochenenden und nichts anderes: 10 × 192 Eröffnungen à 15 Minuten ergeben genau 1.920. Das sind die Zahlen, die eine Rasterabdeckung sinnlos machen, und es lohnt sich dennoch, sie auszudrucken, denn ein Symbol, dessen „erklärte“ Eröffnungen nicht mit seiner Sitzungstabelle übereinstimmen, zeigt Ihnen, dass die Sitzungstabelle falsch ist.
Der Rest der Prüfung ergab nichts, was ebenfalls ein Ergebnis ist: Über 25.000 Balken hinweg gab es keinen unmöglichen OHLC-Wert, keine doppelten oder außerhalb des Rasters liegenden Balkenzeiten, keine leeren und keine flachen Balken, und alle 25.000 Balken stimmten bis auf die letzte Stelle mit der broker-eigenen M1-Reihe überein – 0,0000 Punkte maximale Abweichung. BTCUSD verdient noch eine Anmerkung: null Lücken über 52 Tage und ein Spread, der bei allen 5.000 Balken genau 700 Punkte beträgt. Ein fester Spread ist kein Mangel, aber auch kein Messwert, und eine darauf abgestimmte Strategie ist auf eine Konstante abgestimmt.

XAUUSD M15, 5.000 Balken: Jede fehlende Eröffnungsnotierung nach der Uhrzeit des Server-Tages, aufgeschlüsselt nach den Angaben der broker-eigenen Sitzungstabelle für diese Stunde. Die schraffierten Balken stellen die Eröffnungen außerhalb der Handelssitzungen dar – elf Wochenenden, weshalb sie jede Stunde abdecken, sowie die tägliche Pause um 21:00 Uhr. Die zehn ausgefüllten Balken sind die einzigen Eröffnungen in 25.000 Balken, die die Sitzungstabelle nicht erklären kann; sie alle entfallen auf einen Montagabend. Entnommen aus dem Bar-Dump und dem Session-Dump dieses Durchlaufs; das Tool selbst schreibt die Zahlen, nicht die Grafik.
Die gleichen fünf Symbole auf M1, mit einem auf 20 Punkte festgelegten Spread-Limit, ergeben eine Seite ganz anderer Art und sind einen Absatz wert, da sie zeigen, wie die Prüfungen aussehen, wenn sie tatsächlich ausgelöst werden: 10.613 Fundstellen, flache Balken 20 / 22 / 40 bei EURUSD / GBPUSD / USDJPY, ein Spread von über 20 Punkten bei allen 5.000 Gold- und BTCUSD-Balken sowie 25 / 28 / 20 fehlende Eröffnungswerte innerhalb einer Sitzung bei den drei Paaren, bei denen auf M15 keine fehlten. Die letzte Zahl stellt keinen Widerspruch dar: 5.000 M1-Balken erstrecken sich über dreieinhalb Tage einer Woche, was ein völlig anderes Zeitfenster darstellt, und eine Lücke von einer Minute innerhalb einer Sitzung kommt weitaus häufiger vor als eine von fünfzehn Minuten. Auf M1 konvergieren die beiden Abdeckungsspalten ebenfalls – 99,44 und 99,44 für GBPUSD –, da ein so kurzes Zeitfenster kein Wochenende enthält, durch das die Rasterwerte geschönt werden könnten.

Dasselbe Tool auf M1 mit einer Spread-Grenze von 20 Punkten: „Flat“ und „SprHi“ enthalten nun Zahlen, „InSess“ findet Lücken bei Währungspaaren, die auf M15 sauber waren, und die Spalte „M1bad“ wird angezeigt – da auf M1 nichts unterhalb des geprüften Zeitraums liegt, meldet sich die Gegenprüfung selbst als „aus“ –, die Ergebnistabelle zeigt niemals eine Null für etwas an, das nicht gemessen wurde.
Unabhängige Überprüfung des Berichts
Die oben genannten Zähler werden von einem Programm überprüft, das keinen gemeinsamen Code mit dem Tool hat. Ein Python-Skript liest nur das Rohmaterial – den Bar-Dump und den Session-Dump, die der EA schreibt –, berechnet jeden Zähler der OHLC-, Zeit-, Gap-, Leerstands-/Flat- und Spread-Prüfungen anhand der obigen Definitionen neu und vergleicht das Ergebnis mit der eigenen Zusammenfassungsdatei des EA.
Bei den diesem Artikel zugrunde liegenden Läufen – 15 Symbol-/Perioden-Prüfungen über M1, M15 und W1 – verglich es 215 Zähler und meldete 0 Abweichungen, einschließlich der zehn während der Sitzung aufgetretenen Lückenöffnungen oben, die allein anhand der Balkenzeiten und der Sitzungstabelle neu berechnet wurden.
Zwei Aspekte, die die Neuberechnung nicht abdeckt: Die M1-Gegenprüfung ist nicht in diesen 215 Zählwerten enthalten – das Skript kann zwar die M1-Reihe aus dem Terminal selbst extrahieren und die Balken neu erstellen, doch dieser Pfad wurde für die hier vorliegenden Zahlen nicht durchlaufen; daher beruhen die Vergleichszahlen 5.000 bzw. 0 Unstimmigkeiten auf der eigenen Zählung des EAs. Und ein Zähler, der auf beiden Seiten Null ist, wird nur als Null bestätigt – bei keinem Durchlauf gab es einen unmöglichen OHLC-Wert, keine nicht ansteigende oder außerhalb des Rasters liegende Zeit, keine Lücke, die keine ganze Anzahl von Perioden war, keinen leeren Balken, keine M1-Diskrepanz, kein Zeitfenster innerhalb der M1-Abdeckung ohne M1-Balken darin und keine Abweichung, die die Toleranz hätte auffangen müssen. Diese Verzweigungen wurden bei den hier gemessenen Daten nie ausgelöst.
Was die Definitionen der Fehler, die dieser Broker niemals erzeugt, festlegt, ist ein zweiter, kleinerer Test des Nachzählskripts selbst: eine synthetische Historie mit 12 Balken, in die die Fehler von Hand eingetragen und die erwarteten Zählwerte daneben notiert wurden – 29 Assertions, ohne dass ein Terminal beteiligt war. Der EA wendet dieselben Prädikate in derselben Reihenfolge an, und dabei handelt es sich eher um eine Gegenüberstellung der beiden Quellen als um eine Messung. Die Testvorrichtung ist nach wie vor die Grundlage für zwei der Entscheidungen in diesem Tool: dass ein invertiertes Bar fünf statt eines Befunds erzeugen muss, da bei umgekehrtem Intervall sowohl der Eröffnungs- als auch der Schlusskurs jeweils sowohl über dem Höchst- als auch unter dem Tiefstkurs liegen; und dass ein einzelner, ungeteilter Abdeckungswert nahezu bedeutungslos war.
Das Tool überprüft zudem seine eigene Arithmetik und gibt beide Seiten jeder Identität aus, sodass der Bericht ganz ohne Python überprüft werden kann:
Prüfung 1 : Balken 25000 + fehlende 8102 = 33102, erwartete Eröffnungen 33102 -> OK Prüfung 1 : expected_openings 33.102, Gitteröffnungen in den geprüften Zeiträumen 33.102 -> OK (5 Symbole OK, 0 nicht) Prüfung 2 : C1 0 + C2 0 + C3 85 + C4 0 + C5 0 + C6 0 = 85, Gesamtzahl der Feststellungen 85 -> OK Prüfung 2 : an den Bericht übergebene Ergebnisse 85, Zeilen in der Ergebnisdatei 85, vom Guard verworfen 0 -> OK
Eingaben
| Eingabe | Standard | Funktionsbeschreibung |
|---|---|---|
| Symbole: leer = Chart-Symbol, * = Market Watch, ansonsten eine durch , oder ; getrennte Liste | leer | Ein Symbol, das dem Terminal unbekannt ist, wird mit einer Journalzeile auf normaler Ebene übersprungen und erhält überhaupt keine Zählerzeile, sodass bei einer Nachzählung niemals ein Balkenauszug mit einer Zeile gepaart werden kann, die nichts gemessen hat. |
| Zu prüfender Zeitrahmen (0 = aktueller Chartzeitraum) | Aktuell | Beliebiger Zeitrahmen aus der Liste. Die Rasterprüfung schaltet sich ab D1 nach oben aus, da die Eröffnungswerte dort nicht auf einem festen Sekundengitter liegen, und die Lückenprüfung schaltet sich auf MN1 aus, da der Abstand zwischen zwei Eröffnungswerten dort nicht konstant ist. |
| Zu prüfende Balken pro Symbol (geschlossene Balken, neueste zuerst) | 5000 | Nur geschlossene Kerzen. Die sich gerade bildende Kerze ändert sich per Definition und würde eher als Marktfehler denn als Fehler in der Historie gemeldet werden. |
| C1: Überprüfung der OHLC-Konsistenz | wahr | Hoch < Tief, Eröffnungs- oder Schlusskurs außerhalb der eigenen Spanne des Balkens, einer der vier Kurse bei oder unter Null. Ein Befund pro Balken pro verletztem Prädikat. |
| C2: Überprüfung der Bar-Eröffnungszeiten (Reihenfolge, Duplikate, Raster) | wahr | Eine Zeit, die sich von einem Balken zum nächsten nicht erhöht, und eine Eröffnung, die kein Vielfaches der Periode ist. |
| C3: Überprüfung auf fehlende Balken im Vergleich zu den Kurssitzungen | wahr | Die Prüfung, die die in der Überschrift genannte Zahl liefert. Sie benötigt die Sitzungstabelle des Symbols; ohne diese werden Lücken als „nicht klassifiziert“ statt als „erklärt“ gemeldet. |
| C4: Zählung leerer (ohne Ticks) und flacher Balken | true | tick_volume == 0 und open == high == low == close mit Ticks darin. |
| C5: Jeden Balken aus M1 neu aufbauen und vergleichen | wahr | Die rechenintensive Prüfung, die eine Warnung rechtfertigt: Auf M15 bei über 5.000 Balken dauert es etwa eine Sekunde für fünf Symbole, aber auf W1 bei einem 55-jährigen Verlauf benötigt es eine M1-Abfrage pro vier Balken und dauerte über sieben Minuten für vier Symbole, wobei fast die gesamte Zeit auf die terminaleigenen Verlaufsabfragen entfiel. Deaktivieren Sie diese Funktion für einen ersten Durchlauf über einen langen Zeitverlauf. |
| C5: Abweichungen bis zu dieser Anzahl von Punkten ignorieren | 0,0 | Eine Toleranz für einen Broker, dessen höhere Zeitrahmen mit Rundungen erstellt werden. 0 meldet jede Abweichung. |
| C6: Balken mit einem Spread über diesem Wert markieren (0 = aus) | 0 | Zählt die Balken, die über dem Grenzwert liegen. Die Anzahl der Balken ohne Spread, der maximale und der mittlere Spread werden unabhängig davon gemeldet, ob ein Grenzwert festgelegt ist oder nicht. |
| Journal: Beispielergebnisse, die pro Überprüfung ausgegeben werden | 5 | Wie viele tatsächliche Zeilen jedes Schecks werden vollständig ausgedruckt, sodass das Journal die Mängel selbst und nicht nur deren Anzahl anzeigt. |
| Eine CSV-Zeile pro Befund schreiben | true | Die Fehlerdatei: eine Zeile pro Fehler mit der Zeitangabe, damit der Bericht überprüft werden kann, anstatt ihm einfach zu glauben. |
| Außerdem sollte jeder geprüfte Takt ausgegeben werden (für eine unabhängige Nachzählung) | false | Schreibt die Bars genau so, wie sie vom Terminal ausgegeben wurden, sowie die Sitzungstabelle – was eine unabhängige Nachzählung ermöglicht. Wird diese Option deaktiviert, wird der Dump eines früheren Durchlaufs gelöscht, mit einer Journalzeile pro Datei: Ein Dump mit 5.000 Balken neben einer Zählerzeile mit 500 Balken ist genau die stille Fehlzahl, die dieses Tool aufspüren soll. |
| Zeigt die Ergebnistabelle im Chart an | true | In einem nicht-visuellen Tester schaltet sich diese Option mit einer Journalzeile aus, anstatt einen Fehler zu melden. |
| Eckfeld | Oben links | Ankerecke der Tabelle. |
| Schriftgröße des Fensters | 8 | Die Tabelle ist breiter, als eine einzelne Diagrammbeschriftung anzeigen kann, daher wird sie als mehrere Beschriftungsspalten dargestellt; verringern Sie die Größe bei einem kleinen Diagramm. |
| X-Versatz des Bereichs, px | 10 | Position. |
| Y-Versatz des Bereichs, px | 18 | Position. |
| Alle N Minuten erneut prüfen (0 = einmal prüfen) | 0 | Zum Einblenden in einem Chart. Es wird die terminaleigene Uhr verwendet, daher verhält sich diese Einstellung im Strategietester genauso. |
Der Bericht
Alle vom Tool gemessenen Werte werden als ein Block in das Journal geschrieben, und dieselben Zahlen werden in eine CSV-Datei exportiert. Nachstehend ist dieser Block für den Lauf in der obigen Tabelle wörtlich wiedergegeben, wobei der symbolspezifische Teil nur für XAUUSD angezeigt wird – bei den anderen vier Symbolen wiederholen sich dieselben zehn Zeilen.
=== History Integrity Auditor ============================================ Symbole: 5 (Market Watch) Zeitraum: M15 Balken pro Symbol: 5000 (geschlossene Balken, neueste zuerst) Prüfungen: C1 auf C2 auf C3 auf C4 auf C5 auf C6 Limit 0 Punkte C5-Toleranz: 0,00 Punkte Journal-Beispiele pro Prüfung: 5 Aktualisierung: einmal Dateipräfix: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_*.csv Symbol 1 von 5: XAUUSD Symbol 2 von 5: EURUSD Symbol 3 von 5: BTCUSD Symbol 4 von 5: GBPUSD Symbol 5 von 5: USDJPY =================================================================== HistoryIntegrityAuditor: Durchlauf 1 beginnt mit 5 Symbolen, M15, Serverzeit 02.10.2026 08:07:11 HistoryIntegrityAuditor: C3_GAP Beispiel 1 von 5: XAUUSD M15-Balken 17.07.2026 21:00:00 Lücke Klasse=erklärt in_session=0 196 [... Beispiele 2 bis 5 derselben Prüfung ...] === History Integrity Auditor – Ergebnis von Durchlauf 1 ======== Symbol Balken Grid% Sess% OHLC Zeit Lücken InSess Leer Flat M1bad SprHi XAUUSD 5000 68,10 99,80 0 0 55 10 0 0 0 - EURUSD 5000 72,25 100,00 0 0 10 0 0 0 0 - BTCUSD 5000 100,00 100,00 0 0 0 0 0 0 0 - GBPUSD 5000 72,25 100,00 0 0 10 0 0 0 0 - USDJPY 5000 72,25 100,00 0 0 10 0 0 0 0 - XAUUSD M15: 5000 Balken vom 17.07.2026 20:30:00 bis zum 02.10.2026 07:45:00, 76,47 Tage, 10 Handelssitzungen, Punkt 0,001, 0 Eröffnungen hinter der Serverzeit XAUUSD M15: Handelssitzungen So 22:01–24:00 Uhr | Mo 00:00–20:58 Uhr, 22:00–24:00 Uhr | Di 00:00–20:58 Uhr, 22:00–24:00 Uhr | Mi 00:00–20:58 Uhr, 22:00–24:00 Uhr | Do 00:00–20:58 Uhr, 22:00–24:00 Uhr | Fr 00:00–20:58 Uhr XAUUSD M15: Grid-Eröffnungen 7342 = Balken 5000 + fehlende 2342, Identität OK, Grid-Abdeckung 68,10 %, Sitzungsabdeckung 99,80 % XAUUSD M15: C1 aktiviert, Gesamt 0 (Höchstkurs < Tiefstkurs 0, Eröffnungskurs > Höchstkurs 0, Eröffnungskurs < Tiefstkurs 0, Schlusskurs > Höchstkurs 0, Schlusskurs < Tiefstkurs 0, nicht positiv 0) XAUUSD M15: C2 aktiviert, Gesamt 0 (nicht ansteigend 0, außerhalb des Rasters 0), Schritte, die keine ganze Anzahl von Perioden sind 0 XAUUSD M15: C3 aktiviert, Lücken 55 (erklärt 54, unerklärt 1, nicht klassifiziert 0), fehlend 2342, während der Sitzung 10, nicht klassifiziert 0, größte Lücke 196 Slots nach dem 17.07.2026 um 20:45:00 Uhr XAUUSD M15: C4 aktiviert, leer 0, flach 0 XAUUSD M15: C5 aktiviert, M1-Abdeckung vom 23.06.2026 03:04:00 bis 02.10.2026 08:07:00, verglichen 5000, nicht übereinstimmend 0, Fenster leer 0, außerhalb der Abdeckung 0, maximale Abweichung 0,0000 Punkte XAUUSD M15: C6-Limit deaktiviert, Spread Null 0, über dem Limit –, max. 238 Punkte, Mittelwert 175,1568 Punkte XAUUSD M15: Ergebnisse für dieses Symbol 55 [… dieselben zehn Zeilen für EURUSD, BTCUSD, GBPUSD und USDJPY …] Symbole: 5 geprüft, 0 übersprungen Gesamtzahlen: Balken 25.000, fehlend 8.102, in Sitzung 10, Ergebnisse 85 Prüfung 1: Balken 25.000 + fehlend 8.102 = 33.102, expected_openings 33.102 -> OK Prüfung 1: erwartete Eröffnungen 33.102, Gittereröffnungen in den geprüften Zeiträumen 33.102 -> OK (5 Symbole OK, 0 nicht) Prüfung 2: C1 0 + C2 0 + C3 85 + C4 0 + C5 0 + C6 0 = 85, Gesamtzahl der Befunde 85 -> OK Prüfung 2: Befunde an den Bericht übergeben 85, Zeilen in der Befunddatei 85, vom Guard verworfen 0 -> OK Dateiübersicht: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_overview.csv (5 Zeilen) Datei „Befunde“: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_findings.csv (85 Zeilen) Dateizusammenfassung: 5 Datei(en), 5 Zeile(n); Sitzungen: 5 Datei(en), 35 Zeile(n); Balken 5 Datei(en), 25.000 Zeilen; Dateimuster: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_<symbol>_{summary,sessions,bars}.csv; Panel: 1452 x 294 Pixel, 16 Beschriftungen, breiteste Zeile 119 Zeichen ===================================================================
Hinweis: „SprHi“ – in der Tabelle und „over limit“ – in Zeile C6. Das Spread-Limit betrug 0, was bedeutet, dass die Prüfung deaktiviert ist; daher wird in der Spalte ein Bindestrich und keine Null angezeigt. Das Tool wendet diese Regel auf jede Spalte der Ergebnistabelle und jede Zahl in den Zeilen pro Symbol an: Eine Prüfung, die nicht ausgeführt wurde, gibt „-“ aus, eine Prüfung, die ausgeführt wurde und nichts gefunden hat, gibt „0“ aus, und die beiden Zeichen sind niemals identisch. Das ist wichtiger, als es den Anschein hat – bei deaktivierter Lückenprüfung würde ein als „Bars / (Bars + fehlende Werte)“ berechneter Abdeckungswert zuverlässig 100,00 % ergeben .
Bei einem Durchlauf entstehen fünf Dateien im Verzeichnis „MQL5\Files\HistoryIntegrityAuditor\“:
- <Präfix>_overview.csv – eine Zeile pro Symbol der Liste, einschließlich der Symbole, die nicht geprüft werden konnten, mit ihrem Status.
- <prefix>_findings.csv – eine Zeile pro Fehler: Symbol;Periode;Prüfung;Balkenindex;Balkenzeit;Feld;Detail;Wert.
- <Präfix>_<Symbol>_summary.csv – alle Zähler eines Symbols, 62 Spalten, einschließlich der arithmetischen Identität.
- <prefix>_<symbol>_sessions.csv – die Kursnotierungssitzungen des Symbols, wie sie vom Broker gemeldet werden; dies ist die Eingabe, die darüber entscheidet, ob eine Kurslücke erklärt wird.
- <Präfix>_<Symbol>_bars.csv – optional, die geprüften Balken genau so, wie sie vom Terminal bereitgestellt wurden.
Die letzten beiden Dateien ermöglichen es, den Bericht mit anderen Tools als diesem zu überprüfen, was Gegenstand des obigen Abschnitts ist. Das Präfix enthält das Symbol-Tag, den Zeitrahmen und die Chart-ID, sodass sich die Daten zweier Charts nicht gegenseitig überschreiben können und ein Testlauf in die eigene Sandbox des Agenten schreibt, anstatt die Dateien eines Live-Laufs zu überschreiben.
So verwenden Sie es
- Fügen Sie die Datei einem Chart mit dem Symbol und dem Zeitrahmen hinzu, mit denen Sie tatsächlich testen, stellen Sie die Anzahl der Balken mindestens auf den Bereich ein, den Ihre Backtests verwenden, und lesen Sie das Protokoll.
- Beginnen Sie mit der „Session Coverage“ und „Missing in Session“. Diese beiden Zahlen entscheiden darüber, ob Ihre Backtests auf dem tatsächlichen Markt oder auf einer unvollständigen Darstellung davon liefen.
- Sortieren Sie die C3_GAP-Zeilen der Ergebnisdatei nach der Stunde in „bar_time“. Lücken, die sich auf eine bestimmte Stunde des Tages konzentrieren, sind in der Regel ein Server- oder Sitzungsproblem; gleichmäßig verteilte Lücken deuten meist auf einen unvollständigen Download hin.
- Klicken Sie im Dialogfeld „Symbole“ des Terminals auf „Aktualisieren“ (oder löschen Sie den Verlauf und lassen Sie ihn neu herunterladen) und führen Sie die Prüfung erneut durch. Der Unterschied zwischen den beiden Durchläufen entspricht den Daten, die lokal auf Ihrem Terminal fehlten, und nicht den Daten, die beim Broker fehlen.
- Aktivieren Sie die M1-Gegenprüfung für den Zeitrahmen, in dem Ihr EA handelt. Eine Diskrepanz, die nach einer Aktualisierung des Verlaufs weiterhin besteht, ist eine Anfrage an den Broker wert: Sie bedeutet, dass zwei seiner eigenen Reihen nicht übereinstimmen.
- Führen Sie den Vorgang erneut durch, nachdem Sie den Broker, den Server oder irgendetwas an der Art und Weise, wie der Verlauf abgerufen wird, geändert haben. Die Datenqualität ist eine Eigenschaft eines bestimmten Terminals zu einem bestimmten Zeitpunkt, nicht eines Symbols.
Einschränkungen, klar und deutlich
- Es prüft die Historie, die Ihr Terminal enthält – also die Historie, die Ihre Tests verwenden –, und nicht das, was der Server des Brokers möglicherweise noch senden könnte. Eine Aktualisierung der Historie kann jeden Wert hier verändern, und Schritt 4 oben dient genau diesem Zweck.
- Eine Lücke, die die Sitzungstabelle als „aufgerufen“ bezeichnet, kann dennoch eine echte Lücke sein, da die Sitzungstabelle auch die Aussage des Brokers darstellt. Das Tool zeigt beide Zahlen an, damit die beiden Angaben verglichen und nicht vermischt werden können.
- Die M1-Gegenprüfung kann nur dort Aussagen treffen, wo der M1-Verlauf reicht. Zu älteren Balken schweigt sie bewusst, und die Anzahl der übersprungenen Fenster wird neben der Anzahl der verglichenen Fenster angezeigt.
- Tick-Daten werden nicht geprüft. Backtests mit Echtzeit-Ticks verfügen über einen zweiten Datensatz mit eigenen Mängeln, den dieses Tool nicht berücksichtigt.
- Es erstellt Berichte; es führt keine Korrekturen durch. Nichts hier schreibt in den Verlauf, und kein Befund allein beweist, dass der Broker schuld ist – ein Terminal, das eine Stunde lang offline war, erzeugt dieselben fehlenden Balken wie ein Feed, der unterbrochen wurde.
- Keine Handelsfunktionen, keine DLL, kein Netzwerkzugriff, keine externen Dateien: Es liest Balken und schreibt CSV-Dateien in den Ordner „MQL5\Files“.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/77919
Mirror Hedge EA (Same terminal and account only)
Spiegelt Trades, die von einem anderen EA auf demselben Hedging-Konto eröffnet, geändert und geschlossen wurden, wobei die Auswahl anhand der Magic Number erfolgt. Standardmäßig kehrt das Programm die Richtung um (Kauf ↔ Verkauf, SL ↔ TP), sodass Sie das Gegenteil einer Strategie mit realen Spreads, Slippage und Ausführung im Forward-Test prüfen können.
Alpha Engine: Intrinsic-Time Coastline Trader
Eine Portierung der Alpha Engine der Olsen-Gruppe: Acht Limit-Order-Agenten handeln auf einem Hedging-Konto auf Richtungswechsel in der intrinsischen Zeit. Sie bauen Positionen bei Überschwingungen auf und nehmen bei Kursumkehren Gewinne mit.
WaveMaster Pro EA
Signalgesteuerte Automatisierung für das WaveMaster-Oszilloskop. Automatisierte Ausführungs-Engine für das WaveMaster-Oszilloskop. Liest Signalpuffer in Echtzeit aus. Umfassendes Risikomanagement, Trailing und Break-even sind integriert.
Accelerator Oszillator (AC)
Der Acceleration/Deceleration Indikator (AC) misst die Beschleunigung und Verlangsamung des aktuellen Marktimpulses, der Kraft der Kursbewegung.