Repaint Inspector

  • Utilitys
  • Quoc Dat Quach
    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

Der „Repaint Inspector“ misst, ob ein Indikator neu gezeichnet wird, anstatt die Angabe einfach für bare Münze zu nehmen. Sie fügen ihn einem Chart hinzu, geben einen beliebigen benutzerdefinierten Indikator und dessen Parameterliste an, und er liest die Puffer dieses Indikators bei bereits geschlossenen Kerzen erneut aus. Dabei zählt er jeden Wert, der sich verändert, jeden Wert, der erscheint, und jeden Wert, der verschwindet, sowie wie weit zurück in der Historie dies noch geschieht.

Es handelt sich um ein Messwerkzeug. Auf einem Chart sendet es niemals einen Auftrag. Im Strategietester eröffnet und schließt es zu Beginn eine Position mit minimalem Volumen, da der automatische MQL5-Markttest überprüft, ob ein Expert Advisor eine Handelsoperation durchführt; dieser Handel wird im Journal vermerkt, ist nicht Teil der Messung und lässt sich über einen Schalter deaktivieren. Es verwendet keine DLL und keinen Netzwerkzugriff und schreibt nichts auf die Festplatte, außer seinen beiden CSV-Dateien im Verzeichnis „MQL5\Files“.

Warum es existiert: „Non-Repainting“ ist ein häufiger Anspruch in der Beschreibung von Indikatoren und schwer zu überprüfen. Der übliche Test besteht darin, sich den Chart anzusehen, sich grob zu merken, wo die Pfeile waren, den Chart neu zu laden und erneut hinzuschauen. Dieser Test übersieht jedoch zwei Fälle, die Geld kosten. Der erste ist, dass sich ein Wert auf einem Balken, der vor einiger Zeit geschlossen wurde, ändert, während der Chart geöffnet bleibt: Der Pfeil verschiebt sich um einige Pixel oder wird entfernt, während Ihre Aufmerksamkeit auf den rechten Rand gerichtet ist. Der zweite Fall ist ein Indikator, der sich während seiner Laufzeit normal verhält, nach dem Neuladen jedoch einen anderen Verlauf anzeigt – genau das, was ein Wechsel des Zeitrahmens, ein Neustart des Terminals oder ein neu geladener Chart für den Nutzer bewirkt. Beide Fälle sind messbar.

Wie die Messung definiert ist, entscheidet darüber, ob das Ergebnis überhaupt aussagekräftig ist:

  • Ein Balken wird durch seinen Eröffnungszeitpunkt identifiziert, niemals durch seine Verschiebung; daher können neue Balken, das Scrollen und das Neuladen des Verlaufs nicht mit einer Veränderung verwechselt werden.
  • Es werden nur geschlossene Balken verglichen, ab Verschiebung 1 und höher. Der sich noch bildende Balken ändert sich per Definition und sagt nichts über eine Neuzeichnung aus.
  • Der erste Wert, der für eine geschlossene Kerze erfasst wird, dient als Referenz. Jeder spätere Messwert wird mit dem vorherigen Messwert verglichen – was ein Ereignis zählt – und, wann immer dies ein Ereignis zählt, mit dem ersten Messwert, der die Abweichung misst.
  • Drei Arten von Ereignissen werden separat gezählt, da sie nicht gleichermaßen schwerwiegend sind. Geändert: Ein Wert wurde auf einen anderen Wert verschoben. Erscheinen: Ein leerer Platz erhielt einen Wert, sodass ein Signal auf einem bereits geschlossenen Balken erschien. Verschwunden: Ein veröffentlichter Wert wurde gelöscht – dies ist der schwerwiegende Fall, da das Signal, auf das ein Händler reagiert hat, in der Historie, die der nächste Leser sieht, nicht mehr vorhanden ist.
  • Die wichtigste Kennzahl ist „MaxShift“, die größte Verschiebung, bei der jemals ein Ereignis beobachtet wurde. Ein Indikator, der nur den zuletzt geschlossenen Balken neu zeichnet, ist etwas ganz anderes als einer, der fünfzehn Balken neu schreibt.
  • Jedes Ereignis wird in eine CSV-Datei geschrieben, zusammen mit dem Erkennungszeitpunkt, dem Balkenzeitpunkt, der Verschiebung zum Zeitpunkt der Erkennung, dem Puffer, der Ereignisdart, dem alten und dem neuen Wert, dem Delta, der Abweichung vom ersten Messwert und einem Flag für das Nachladen, sodass der Bericht überprüft werden kann, anstatt ihm einfach zu glauben. Eine zweite Datei enthält pro Puffer eine Zeile mit jedem Zähler und wird während des Laufs alle 15 Sekunden aktualisiert.
  • Der zu testende Indikator wird mit „IndicatorCreate“ aus einer geparsten Parameterliste erstellt, sodass jeder benutzerdefinierte Indikator überprüft werden kann, ohne dass etwas bearbeitet oder neu kompiliert werden muss. Die geparste Liste wird zu Beginn in das Protokoll geschrieben, wodurch eine falsche Parameterliste sichtbar wird, anstatt unbemerkt zu bleiben.
  • Das Handle kann alle N Minuten freigegeben und neu erstellt werden, wobei der aufgezeichnete Verlauf bewusst beibehalten wird. Dies dient dazu, Indikatoren zu erkennen, die während ihrer Laufzeit inaktiv sind und nach einem Neuladen eine andere Historie anzeigen. Das Terminal führt bei einem Neuladen nur dann eine Neuberechnung durch, wenn kein anderes Programm denselben Indikator mit denselben Parametern hält; entfernen Sie daher diesen Indikator aus Ihren Charts, während dieser Test läuft.
  • Eine Überprüfung wird verworfen und als übersprungen gewertet – nicht als Befund –, wenn das Handle noch nicht existiert, der Indikator noch nicht berechnet wurde, es weniger geschlossene Balken gibt als die beobachtete Tiefe (bei der ersten verwertbaren Überprüfung wird die Tiefe selbst auf den verfügbaren Verlauf gekürzt, was im Protokoll vermerkt wird), ein Puffer nicht kopiert werden kann oder sich die Reihe zwischen dem Auslesen der Zeiten und dem Auslesen der Werte verschiebt.

Die Messungen wurden mit Indikatoren durchgeführt, die im Terminal enthalten sind, sodass jeder sie wiederholen kann. Vier Instanzen auf vier Charts eines Terminals, XAUUSD M1, 1 Stunde 26 Minuten, 300 beobachtete geschlossene Balken, eine Überprüfung pro Sekunde:

  • Beispiele\ZigZag (12,5,3): 1.315.713 Vergleiche pro Puffer, 0 geändert, 0 erschienen, 17 verschwanden im dargestellten Puffer mit MaxShift 15, und 3 sowie 10 verschwanden in den beiden Berechnungspuffern. Es hat sich nichts verschoben, da ein ZigZag-Extremwert das Hoch oder Tief seines Balkens ist und nicht abdriften kann; er wird entfernt und an anderer Stelle neu veröffentlicht.
  • Beispiele\Benutzerdefinierter gleitender Durchschnitt (13,0,2): 1.305.513 Vergleiche, kein einziges Ereignis.
  • Beispiele\Fraktale: 25 Ereignisse, alle „Erschienen“, keines „Geändert“, keines „Verschwunden“, alle bei Verschiebung 3. Das ist kein Repainting, sondern eine verspätete Bestätigung, da ein Fraktal zwei weitere Kerzen benötigt, bevor es gezeichnet werden kann – bei 1.303.713 Vergleichen. In der Urteilszeile steht weiterhin „REPAINTS“, da das Tool berichtet, was es gesehen hat, und die Beurteilung Ihnen überlässt: Ereignisse, die alle bei einer festen Verschiebung „Erschienen“ sind, bedeuten einen brauchbaren Indikator mit bekannter Verzögerung; Ereignisse, die bei verstreuten Verschiebungen „Verschwunden“ sind, tun dies nicht.
  • Die vierte Kopie führte denselben ZigZag durch, wobei 0,0 als gewöhnlicher Wert statt als kein Wert gewertet wurde: 1.308.513 Vergleiche, 32 Ereignisse, alle „Changed“, derselbe „MaxShift“ von 15 und ein größtes absolutes Delta von 4.184,088 – das ist der Goldpreis, da jede Löschung nun einen durch 0,0 ersetzten Höchstwert darstellt. Die gleiche Neudarstellung, nur unter einem anderen Namen.

Diese drei Durchläufe mit ZigZag, gleitendem Durchschnitt und Fraktalen erforderten 4.387, 4.353 bzw. 4.347 Prüfungen. Dasselbe Instrument im Strategietester komprimiert einen Tag auf Sekunden: Derselbe ZigZag über einen Handelstag von XAUUSD M1, 1-Minuten-OHLC-Modellierung, ergab 5.512 Prüfungen, 1.651.923 Vergleiche, 342 verschwundene und 3 erschienene Werte auf zu diesem Zeitpunkt geschlossenen Kerzen, 343 berührte einzelne Kerzen und einen MaxShift von 28.

Unabhängige Überprüfung der Zähler. Eine unabhängige Python-Neuimplementierung von „Examples\ZigZag“ wurde auf die vom Terminal abgerufenen Rohkerzen angewendet und mit den Ereignisdateien verglichen. Live-Lauf: Bei jedem der 17 Balken, bei denen der dargestellte Puffer einen Wert verlor, fehlt dieser Wert in der Wiedergabe, und bei allen 17 entspricht der letzte Messwert des Tools dem wiedergegebenen Wert. Testlauf: 343 Balken mit Ereignissen, davon 341 Balken, bei denen ein Wert fehlte; dieselben beiden Prüfungen, keine Abweichung. Auch die Vergleichszahlen stimmen überein: Während des Live-Laufs wurden 87 neue M1-Balken eröffnet, und (Prüfungen minus 1) mal 300 minus 87 ergibt genau die jeweils gemeldete Vergleichszahl.

Eingaben: der iCustom-Pfad des zu prüfenden Indikators und dessen Parameter als kommagetrennte Liste, die Anzahl der zu überwachenden Puffer (1 bis 32), Symbol und Zeitrahmen, falls Sie diese außerhalb des Charts prüfen möchten, die Anzahl der überwachten geschlossenen Balken (Standard 300), die Mindestzeit in Sekunden zwischen den Überprüfungen (Standard 1, modellierte Zeit im Tester), eine absolute Toleranz, unterhalb derer eine Änderung ignoriert wird, ein Schalter, der 0,0 als keinen Wert für Puffer im Pfeil- und ZigZag-Stil behandelt (standardmäßig aktiviert), das Intervall zur Neuerstellung des Handles, einen optionalen Stopp nach N Minuten, den CSV-Schalter, den Dateinamen und die Zeilenbegrenzung, die Panel-Einstellungen (anzeigen oder ausblenden, Ecke, Versätze, Schriftgröße und fünf Farben) sowie den Schalter für den oben beschriebenen Beispielhandel im Strategietester. Jede Eingabe wird durch einen eigenen Kommentar im Terminal dokumentiert. Der Pfad ist standardmäßig absichtlich leer: Wenn nichts eingegeben wird, weist das Tool im Journal und auf dem Panel darauf hin und führt keine Messungen durch, anstatt auf einen Indikator zu verweisen, der möglicherweise nicht auf Ihrem Terminal vorhanden ist.

Einschränkungen, klar und deutlich. Das Tool kann das Fehlen von Repainting nicht beweisen; es kann lediglich feststellen, dass im gemessenen Zeitraum kein Repainting vorliegt, weshalb die Vergleichszahl neben jedem Ergebnis steht. Es erfolgt eine Abtastung im Prüfintervall, sodass ein Wert, der innerhalb eines Intervalls kurzzeitig auftritt und wieder verschwindet, übersehen werden kann: Das geschah einmal in der oben genannten anderthalb Stunden, als die beiden ZigZag-Instanzen, die im Abstand von 14 Sekunden gestartet wurden, bei einem Balken (03:32, auf zwei Puffern), dessen Wert weniger als ein Überprüfungsintervall lang existierte, sodass eine Kopie ihn erfasst hat und die andere nicht. Es misst, was ein Indikator über seine Puffer ausgibt; ein Indikator, der Chart-Objekte zeichnet, anstatt Puffer zu füllen, ist für das Tool daher unsichtbar. Im Strategietester muss der zu testende Indikator vor Beginn des Durchlaufs vorhanden und kompiliert sein: Der Tester behandelt einen fehlgeschlagenen „IndicatorCreate“-Aufruf als kritischen Fehler und entlädt den Expert, was durch keine Fehlerbehandlung innerhalb des Tools geändert werden kann. Auf einem Live-Chart ist derselbe Fehler nicht fatal; das Tool bleibt verbunden und versucht es alle 30 Sekunden erneut, sodass die Eingabe korrigiert werden kann, ohne sie zu entfernen.

Der Beispielhandel im Strategietester verwendet das Mindestvolumen des Symbols, wird ohne Stop-Loss oder Take-Profit gesendet, und die Margin wird vor dem Absenden gegen die freie Margin abgeglichen; somit erzeugt eine kleine Testguthaben eine Journalzeile anstelle einer abgelehnten Order. Er trägt eine eigene Magic Number, wird bei einem späteren Tick wieder geschlossen, und kein Zähler, kein Ergebnis und keine CSV-Zeile der Messung wird davon beeinflusst. Gemessen an einer Tester-Einlage von 1.000 USD: ein Trade, zwei Geschäfte, 0,06 USD Kosten; und bei Tests mit „Examples\ZigZag“ über denselben Bereich stimmte jeder Repaint-Zähler mit der Version überein, die überhaupt keinen Handelscode enthält – bis hinunter zu 3.404.353 Vergleichen, 10 verschwundenen Werten und MaxShift 17.

Praktische Grenzen. Die Anzahl der Balken multipliziert mit den Puffern darf 200.000 Slots nicht überschreiten – dies ist eine Speicherbegrenzung; darüber hinaus wird die Tiefe reduziert und eine Zeile in das Journal geschrieben. Da es sich um einen Expert Advisor handelt, belegt er den einzigen Expert-Slot des Charts: eine Kopie pro Chart, jedoch nicht auf einem Chart, auf dem Ihr eigener Expert Advisor läuft; allerdings können mehrere Charts gleichzeitig Kopien ausführen. Fragen Sie nur nach Puffern, über die der Indikator tatsächlich verfügt, da ein nicht vorhandener Puffer jede Prüfung nicht besteht und diese Fehler nach fünf Journalzeilen nur noch als übersprungen gezählt werden. Ein selbst gewählter CSV-Name wird bei jedem Start überschrieben; der automatische Name enthält die Startminute. Im Strategietester werden die Dateien in den eigenen Ordner „MQL5\Files“ des Testagenten geschrieben, nicht in den des Terminals, und ein im Tester beobachtetes Repaint ist nicht automatisch dasselbe wie ein live beobachtetes Repaint – wenn die Antwort entscheidend ist, führen Sie den Test live durch. Schließlich sagt das Tool nichts darüber aus, ob ein Indikator für den Handel geeignet ist: Ein Indikator ohne Repaint kann dennoch nutzlos sein, und manche Indikatoren mit Repaint werden bewusst und korrekt eingesetzt.

Weitere Produkte dieses Autors
Ein lokaler Handelskopierer für MetaTrader 5. Er kopiert Positionen zwischen MT5-Terminals auf demselben Windows-PC oder VPS und passt die Größe jeder Kopie an die Kontraktspezifikationen beider Broker an (Kontraktgröße, Tick-Wert, Kontowährung), sodass eine Kopie das gleiche Risiko aufweist, selbst wenn die beiden Broker „Lot“ unterschiedlich definieren. Es wird niemals eine zweite Kopie derselben Master-Position eröffnet. So funktioniert es Sie fügen denselben EA in jedem Terminal zu einem Cha
Symbol Spec Auditor fasst den Teil der Kontraktspezifikation eines Symbols, der die Positionsgröße und die Handelskosten bestimmt, in einem einzigen Fenster im Chart zusammen: Punktwert, Spread-Kosten, Margin, Swap, Ausführungsregeln und Handelssitzungen. Die Rohwerte der Spezifikationen werden in einen Geldbetrag pro 1,00 Lot in der Kontowährung umgerechnet, und Broker-Einstellungen, die stillschweigend gegen die Vorschriften zur Lotgröße verstoßen, werden als Warnungen aufgeführt. Mit einem ei
FREE
„Spread-Profil nach Stunde“ erstellt die Spread-Verteilung eines Symbols für jede Stunde des Server-Tages anhand der Tick-Historie Ihres Brokers und stellt diese in Form von 24 Balken dar. Der ausgefüllte Teil eines Balkens entspricht dem Median-Spread dieser Stunde, die hellere Oberkante erreicht das 90. Perzentil. Geben Sie die von Ihnen üblicherweise verwendete Stop-Größe ein, und jeder Balken wird mit seinem Median-Spread als Anteil dieses Stops beschriftet, sodass die Kosten in derselben Ei
FREE
Ein Kontostandbuch für MetaTrader 5, das Ihre Ergebnisse nach Magic Number, Symbol, Wochentag und Stunde aufschlüsselt, Kursgewinne/-verluste, Provisionen, Swaps und Gebühren in separaten Spalten anzeigt und den bei jeder Ausführung gezahlten Spread sowie die Slippage im Vergleich zu Ihrem gewünschten Kurs misst. Die Summen werden bei jeder Aktualisierung mit dem Kontostand abgeglichen. Es werden niemals Handelsgeschäfte auf der Grundlage eines Charts getätigt. Funktionsweise Fügen Sie es einem
Auswahl:
Keine Bewertungen
Antwort auf eine Rezension