Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Skripte

RepaintTest - measure whether a drawing indicator repaints - Skript für den MetaTrader 5

Yogeswaran Suppiah
Yogeswaran Suppiah
Independent MetaTrader developer based in Malaysia, publishing chart analysis tools for discretionary traders. On MQL5 since 2015.
| German English Русский 中文 Español 日本語 Português 한국어 Français Italiano Türkçe
Ansichten:
6
Rating:
(2)
Veröffentlicht:
MQL5 Freelance Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Fast jede Indikatorbeschreibung enthält den Ausdruck „non-repainting“. Fast keine enthält eine Zahl. Der Ausdruck kann nicht falsch sein, da er nicht an eine bestimmte Vorgehensweise gebunden ist – sowohl ein Entwickler, der dies nie überprüft hat, als auch ein Entwickler, der dies gründlich überprüft hat, schreiben denselben Satz. Dieses Skript ersetzt den Ausdruck durch einen Messwert.

Die Invariante

Sobald ein Balken geschlossen und verarbeitet wurde, darf sich kein Objekt, das der Indikator darauf gezeichnet hat, jemals ändern. Es darf sich nicht verschieben, nicht umfärben, seinen Text nicht ändern und nicht verschwinden. Das ist eine Behauptung, die falsch sein kann – und genau deshalb lohnt es sich, sie zu testen.

Methode

Ein benutzerdefiniertes Symbol wird mit einem „Aufwärmabschnitt“ aus realen historischen Daten initialisiert, Ihr Indikator wird über eine Vorlage angehängt, und jedes Objekt, das er zeichnet, wird aufgezeichnet. Es werden weitere Balken angehängt und das Diagramm wird zu einer vollständigen Neuberechnung gezwungen, sodass der Indikator jedes Objekt über einen längeren historischen Zeitraum hinweg von Grund auf neu erstellt. Jedes Objekt aus dem früheren Durchlauf, das sich auf einem bereits geschlossenen Balken befindet, wird dann im neuen Durchlauf nachgeschlagen und Feld für Feld verglichen: beide Ankerzeiten, beide Ankerpreise, Farbe und Text. Wiederholen Sie dies für so viele Schritte, wie Sie wünschen.

Ein vollständiger Neuaufbau ist eine größere Herausforderung als ein inkrementeller Tick. Der Indikator muss anhand eines längeren Verlaufs und unter Verwendung unterschiedlicher Array-Indizes eine identische Darstellung reproduzieren, ohne sich daran zu erinnern, was er beim letzten Mal gezeichnet hat. Genau das löst ein Benutzer aus, wenn er weit genug zurückblättert, damit das Terminal ältere Balken abruft – und genau hier scheitern Objektnamen, die sich auf den Balken-INDEX statt auf die BalkenZEIT beziehen.

Was zählt

Änderungen und das Verschwinden von Objekten werden separat gezählt, und nur eine Änderung bedeutet, dass die Behauptung falsch ist. Die meisten Zeichenindikatoren löschen alte Objekte absichtlich, sobald eine Obergrenze überschritten wird; daher ist das Verschwinden eines Objekts in der Regel auf Ihre eigene „MaxObjects“- oder „HistoryBars“-Einstellung zurückzuführen und kein Fehler. Führen Sie den Test mit aufgehobenen Obergrenzen durch.

Ein Durchlauf, bei dem nichts verglichen wurde, wird als „INCONCLUSIVE“ gemeldet, niemals als „bestanden“. Der gefährlichste Fehler, den ein Test-Harness haben kann, ist die Meldung eines Erfolgs bei einem leeren Durchlauf, da genau diese Zahl letztendlich zitiert wird.

Die Ausgabe erfolgt als CSV-Datei im Verzeichnis „MQL5\Files“, mit einer Zeile pro Symbol, Zeitrahmen und Schritt, einschließlich der Anzahl der verglichenen, geänderten und verschwundenen Objekte sowie des ersten fehlerhaften Objekts. Summieren Sie die Spalte „marks_compared“, und Sie erhalten die Zahl, die Sie veröffentlichen können – sowie die Datei, die dies belegt.

Verwendung

1. Setzen Sie „Prefix“ auf das Präfix des Objektnamens Ihres Indikators. Führen Sie unter „Exclude“ alles auf, was sich bewusst ändert: eine bei jedem Tick neu gezeichnete Legende, einen Countdown-Timer. Das sind keine Markierungen. Sie hier anzugeben ist ehrlicher, als sie stillschweigend herauszufiltern.

2. Fügen Sie Ihren Indikator einem Chart hinzu, bei dem alle Zeichnungsbeschränkungen aufgehoben sind, und speichern Sie diesen Chart als Vorlage. Verweisen Sie „Vorlage“ darauf.

3. Erhöhen Sie den Wert für „SettleMs“, bis sich die Markierungsanzahl beim ersten Durchlauf zwischen den Läufen nicht mehr ändert. Ein zu kurzer Wert führt nicht zu Fehlern – er führt zu Phantomverschwindungen.

4. Verursachen Sie einmal absichtlich einen Fehler: Verschieben Sie ein Objekt um eine Spalte und vergewissern Sie sich, dass das Skript dies meldet und das Feld benennt. Ein Kabelbaum, bei dem Sie noch nie einen Ausfall beobachtet haben, ist noch kein Beweis.

Was es dir nicht verraten wird

Ob der Indikator genau ist oder ob seine Signale überhaupt etwas taugen. Er beantwortet eine einzige, eng gefasste Frage, und das ist der einzige Grund, warum die Antwort überhaupt von Wert ist.

Zwei Tests, die wie Tests aussehen, es aber nicht sind, und die beide bereits vor diesem hier ausprobiert und verworfen wurden: der Strategy Tester, bei dem die Objekte eines iCustom-gesteuerten Indikators von einem EA auf MT4 überhaupt nicht aufgelistet werden können; und die Variation des indikatorinternen „HistoryBars“-Eingangs in einem Live-Chart, wodurch sich der Startpunkt der Schleife ändert, „rates_total“ und alle Array-Indizes jedoch unverändert bleiben, sodass der Fehler, den diese Klasse eigentlich abfangen soll, nie auftritt.

Kostenlos und ohne Nennungspflicht. Falls das Programm etwas in Ihrem Code findet, würde ich mich freuen, zu erfahren, was es ist.

Repaint-Testergebnis: 199.984 Invariant-Prüfungen, 0 geändert, 0 verschwunden

So funktioniert der Test: Initialisierung, Hinzufügen von Balken, Erzwingen eines vollständigen Neuaufbaus, Vergleich

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/76632

Sniper Gold Hybrid Recovery EA Sniper Gold Hybrid Recovery EA

XAUUSD M15-EA zur Erholung aus dem Kurskorridor mit adaptivem ATR-Abstand, Validierung der LL/LH-Struktur, dynamischem RSI-Gating, Crash-Erkennung, Nachrichtenfilter und intelligenter Handelsoptimierung.

Volume Profile Levels Indicator Volume Profile Levels Indicator

Erstellt ein horizontales Volumenhistogramm über ein aktuelles Rückblickfenster und markiert den „Point of Control“ (POC) sowie den „Value Area“ mithilfe des Standard-TPO/Volumen-Algorithmus zur Erweiterung des Wertbereichs – nicht nur POC ± ein fester Versatz. Wird bei jedem neuen Balken aktualisiert und als Seitenleiste neben dem Kurs angezeigt.

Support Resistance zig zag based Support Resistance zig zag based

„Support Resistance Zig Zag Based“ ist ein Price-Action-Indikator, der entwickelt wurde, um Unterstützungs-, Widerstands- und Übergangsbereiche (Flip-Zonen) automatisch und dynamisch im Chart darzustellen. Er konzentriert sich ausschließlich auf die klare Darstellung der Kursstruktur und die Hervorhebung wichtiger Umkehrbereiche (SBR & RBS). Außerdem umfasst er ein interaktives Dashboard zur Überwachung der Marktstimmung in Echtzeit.

Accelerator Oszillator (AC) Accelerator Oszillator (AC)

Der Acceleration/Deceleration Indikator (AC) misst die Beschleunigung und Verlangsamung des aktuellen Marktimpulses, der Kraft der Kursbewegung.