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:
- 6
- Rating:
- Veröffentlicht:
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Prüft, ob ein Indikator neu gezeichnet wird, anstatt die Angabe einfach für bare Münze zu nehmen. Es wird an ein Chart angehängt, liest die Puffer des zu testenden Indikators bei bereits geschlossenen Balken erneut ein und zählt jede dort festgestellte Änderung: Werte, die sich verschieben, Werte, die erscheinen, und Werte, die verschwinden – zusammen mit dem am weitesten zurückliegenden Zeitpunkt in der Historie, zu dem dies noch geschieht.

Beispiele: \ZigZag(12,5,3) auf XAUUSD M1. Das Fenster wurde nach 1 Stunde, 25 Minuten und 12 Sekunden Laufzeit aufgenommen, 87 Sekunden bevor der Lauf beendet wurde, weshalb die Gesamtwerte in der folgenden Tabelle etwas höher ausfallen. Die Farben des Fensters wurden für den Screenshot auf Schwarz auf Weiß eingestellt; die Standardeinstellung ist heller Text auf dunklem Hintergrund.
Das Problem
„Non-Repainting“ ist die häufigste Behauptung in Indikatorbeschreibungen und zugleich diejenige, die am schwersten zu überprüfen ist. Der übliche Test besteht darin, sich den Chart anzusehen, sich grob zu merken, wo die Pfeile standen, den Indikator neu zu laden und noch einmal hinzuschauen. Dieser Test übersieht die beiden Fälle, die tatsächlich Geld kosten.
Der erste Fall ist, dass sich ein Wert auf einem Balken, der bereits vor einiger Zeit geschlossen wurde, ändert, während das Chart geöffnet bleibt. Das Auge nimmt dies nicht wahr: Der Pfeil verschiebt sich um einige Pixel oder wird entfernt, während die Aufmerksamkeit auf den rechten Rand des Charts 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.
Beides ist messbar. Was benötigt wird, ist eine Funktion, die aufzeichnet, was der Indikator bei seiner ersten Veröffentlichung angezeigt hat, und dies anschließend kontinuierlich überprüft.
Was gemessen wird
- Ein Balken wird anhand seiner Eröffnungszeit identifiziert, niemals anhand seiner Verschiebung; daher können neue Balken, das Scrollen und das Auffüllen des Verlaufs nicht mit einer Ä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 ein Repainting 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, der ein Ereignis zählt, sowie mit dem ersten Messwert, der die Abweichung misst.
- Drei Arten von Ereignissen werden separat gezählt, da sie nicht gleichermaßen negativ sind:
- Geändert – ein Wert hat sich auf einen anderen Wert verschoben.
- Erschienen – ein leerer Platz hat einen Wert erhalten, sodass ein Signal auf einem bereits geschlossenen Balken entstanden ist.
- Verschwunden – ein veröffentlichter Wert wurde gelöscht. Dies ist die schlimmste Art: Das Signal, auf das ein Händler reagiert hat, ist in der Historie, die der nächste Leser sieht, nicht mehr vorhanden.
- 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 der Historie neu schreibt.
- Jedes Ereignis wird in eine CSV-Datei geschrieben, zusammen mit der Balkenzeit, dem Puffer, der Verschiebung bei der Erkennung sowie dem alten und dem neuen Wert, sodass der Bericht überprüft werden kann, anstatt ihm einfach zu glauben.
- 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 geparsten Parameter werden zu Beginn in das Journal ausgegeben, wodurch eine falsche Parameterliste sichtbar wird, anstatt unbemerkt zu bleiben.
- Optional wird das Handle alle N Minuten freigegeben und neu erstellt. Der aufgezeichnete Verlauf wird bewusst nicht zurückgesetzt, sodass der Lauf auch Indikatoren erfasst, die während ihrer Laufzeit inaktiv sind und nach einem Neuladen eine andere Vergangenheit anzeigen.
- Eine Überprüfung wird verworfen und als übersprungen statt als Nachweis gewertet, wenn das Indikator-Handle noch nicht existiert, der Indikator noch nicht berechnet wurde, weniger geschlossene Balken vorhanden sind als die angeforderte Tiefe, ein Puffer nicht kopiert werden kann oder sich die Reihe zwischen dem Auslesen der Zeitpunkte und dem Auslesen der Werte verschiebt.
Es erfolgt eine Stichprobenentnahme: Ein Wert, der kürzer als das Prüfintervall existiert, kann übersehen werden. Das ist eine echte Einschränkung, und weiter unten wird dies näher erläutert.
Gemessenes Beispiel
Im Folgenden werden ausschließlich Indikatoren verwendet, die im Terminal enthalten sind, sodass jeder die Schritte nachvollziehen kann.
Live, XAUUSD M1, 1 Stunde 26 Minuten
Vier Instanzen auf vier Charts desselben Terminals und desselben Feeds, 30.09.2026 von 02:19 bis 03:46 Serverzeit, 300 geschlossene Balken beobachtet, eine Überprüfung pro Sekunde.
| Zu testender Indikator | Puffer | Vergleiche | Geändert | Erschienen | Verschwunden | MaxShift | Fazit |
|---|---|---|---|---|---|---|---|
| Beispiele\ZigZag (12,5,3) | 0 | 1 315 713 | 0 | 0 | 17 | 15 | NEUFARBEN |
| Beispiele\ZigZag (12,5,3) | 1 | 1 315 713 | 0 | 0 | 3 | 1 | NEUFARBEN |
| Beispiele\Zickzack (12,5,3) | 2 | 1 315 713 | 0 | 0 | 10 | 3 | NEUFARBUNGEN |
| Beispiele\Benutzerdefinierter gleitender Durchschnitt (13,0,2) | 0 | 1 305 513 | 0 | 0 | 0 | - | STABIL |
| Beispiele\Fraktale, späte Bestätigung | 0 | 1 303 713 | 0 | 13 | 0 | 3 | NEULACKIERUNGEN |
| Beispiele\Fraktale, späte Bestätigung | 1 | 1 303 713 | 0 | 12 | 0 | 3 | NEUBEMALUNGEN |
4387, 4353 bzw. 4347 Prüfungen, 0 / 0 / 1 übersprungene Prüfungen, 0 Neusynchronisierungen, 0 Handle-Neuladungen. Die Ereignisdateien enthalten 30, 0 und 25 Zeilen, was jeweils der Summe der drei Ereignisspalten entspricht.
Die Vergleichszahlen sind keine runden Zahlen und sollten es auch nicht sein: Während des Durchlaufs wurden 87 neue M1-Balken eröffnet, und ein gerade eröffneter Balken hat noch keine Historie geschlossener Balken. Für jede Instanz ergibt (Prüfungen – 1) × 300 – 87 genau die gemeldete Vergleichszahl.
Drei verschiedene Signaturen in einer Tabelle:
- ZigZag löscht seine eigene Vergangenheit. 17 Werte wurden aus dem dargestellten ZigZag-Puffer gelöscht, einer davon 15 Balken nach dem Schließen dieses Balkens, und 13 weitere aus den beiden dahinter liegenden Berechnungspuffern. Nichts hat sich bewegt: Ein ZigZag-Extremwert ist das Hoch oder das Tief seines Balkens und kann nicht abdriften, daher wird er entfernt und an anderer Stelle erneut veröffentlicht. Deshalb sind die Ereignisse „verschwunden“ und die Delta-Spalte bleibt leer.
- Ein gleitender Durchschnitt geschlossener Balken verschiebt sich nicht. 1.305.513 Vergleiche, kein einziges Ereignis.
- Fraktale stellen einen dritten Fall dar, und das Tool unterscheidet diesen vom ersten. 25 Ereignisse, alle „Appeared“, keines „Changed“, keines „Vanished“, alle bei Shift 3. Das ist kein „Repainting“, sondern eine verspätete Bestätigung: Ein Fraktal benötigt zwei weitere Kerzen, bevor es gezeichnet werden kann; daher taucht der Wert berechtigterweise drei Kerzen zurück auf und bleibt dann bestehen. In der Spalte „Verdict“ steht weiterhin „REPAINTS“, da das Tool berichtet, was es gesehen hat, und die Beurteilung dem Leser überlässt. Ein Indikator, dessen Ereignisse alle bei einer festen Verschiebung „Appeared“ sind, ist mit dieser eingebauten Verzögerung verwendbar; ein Indikator, dessen Ereignisse bei verstreuten Verschiebungen „Vanished“ sind, ist es nicht.
Strategietester, dieselbe Messung in zehn Sekunden
Beispiele\ZigZag(12,5,3), XAUUSD M1, 28.09.2026 bis 29.09.2026, 1-Minuten-OHLC-Modellierung, 300 geschlossene Balken beobachtet:
| Zähler | Wert |
|---|---|
| Urteil | REPAINTS |
| Prüfungen | 5 512 |
| Vergleiche bei geschlossenen Balken | 1 651 923 |
| geändert / erschienen / verschwunden | 0 / 3 / 342 |
| einzigartige Balken, die einen Wert verloren haben | 341 |
| einzigartige Balken mit mindestens einem Ereignis | 343 |
| MaxShift | 28 |
| Übersprungene Überprüfungen / Neusynchronisierungen | 0 / 0 |
| CSV-Zeilen | 345 (= 342 + 3) |
An einem Handelstag löschte der ZigZag 342 Werte, die er bereits für zu diesem Zeitpunkt geschlossene Balken veröffentlicht hatte, wobei eine dieser Löschungen 28 Balken nach dem Schließen des betreffenden Balkens erfolgte. Drei Werte tauchten auf bereits geschlossenen Balken auf. Nur einer der drei war ein wiederkehrender Wert: Der Balken um 17:06 verlor 4126,184, erhielt zwanzig Sekunden später genau denselben Wert zurück und verlor ihn eine Minute danach erneut. Das ist auch der Grund, warum Max |delta| für diesen Durchlauf den Wert 0,00000000 anzeigt; es handelt sich um eine Messung, nicht um eine Lücke.

Die 345 Ereignisse dieses Tages, sortiert nach der Schicht, in der sie erkannt wurden. Die meisten Neuberechnungen finden ein oder zwei Balken zurück statt, weshalb es nicht ausreicht, nur den zuletzt geschlossenen Balken zu betrachten.

Beispiele\Benutzerdefinierter gleitender Durchschnitt (13,0,2), dasselbe Symbol und dasselbe Lauf-Fenster wie beim obigen ZigZag: 1 291 114 Vergleiche zum Zeitpunkt des Screenshots und kein einziger geänderter Wert. Die Vergleichszahl wird bewusst neben dem Ergebnis angezeigt – „STABLE“ ist nur so viel wert wie die Zahl daneben.
Was sich durch „0,0 als keinen Wert behandeln“ ändert und wie groß die Abtastlücke ist
Die vierte Instanz führte denselben ZigZag mit deaktivierter Option aus, sodass 0,0 als gewöhnlicher Wert gezählt wird: 1 308 513 Vergleiche, 18 + 3 + 11 = 32 Ereignisse, alle mit dem Status „Geändert“, derselbe MaxShift von 15 und ein Max |delta| von 4184,08800000 im Hauptpuffer. Diese Zahl ist der Goldstandard, da die „Änderung“ darin besteht, dass ein Spitzenwert durch 0,0 ersetzt wird. Beide Einstellungen beschreiben dieselbe Neuzeichnung; die Standardeinstellung benennt sie korrekt.
Die beiden Kopien haben nicht genau dieselbe Liste gesehen, und das ist wissenswert. Die vierte Kopie protokollierte zwei Ereignisse, die die erste übersehen hatte: Balken 03:32:00 in den Puffern 0 und 2, erkannt um 03:33:01. Die beiden Kopien starteten im Abstand von 14 Sekunden, und der Wert existierte weniger als ein Prüfintervall lang, sodass eine von ihnen ihn erfasste und die andere nicht. Bei einem Intervall von einer Sekunde auf M1 entspricht dies der Auflösung des Instruments.

Der gleiche ZigZag-Wert mit 0,0 wurde als Wert gezählt. Jede Löschung wird nun als „Geändert“ mit einem Delta in Höhe des Kurses angezeigt. Nützlich als Gegenprüfung, irreführend als Beschreibung.
Überprüfung der Zahlen
Auch den Zählern wurde nicht blind vertraut. Eine unabhängige Python-Neuimplementierung von „Examples\ZigZag“, die auf den vom Terminal abgerufenen Roh-Candlesticks ausgeführt wurde, wurde mit den Ereignisdateien verglichen:
- Live-Lauf: Bei jedem der 17 Balken, bei denen der dargestellte Puffer einen Wert verlor, fehlt dieser Wert heute in der Wiedergabe, und bei allen 17 entspricht der letzte Messwert des Tools dem wiedergegebenen Wert.
- Testlauf: 343 Balken mit Ereignissen, dieselben beiden Prüfungen, keine Abweichung – 341 verlorene Werte fehlen in der Wiedergabe, und 343 von 343 letzten Messwerten stimmen mit diesem Wert überein.
Eingaben
| Eingabe | Standard | Beschreibung |
|---|---|---|
| Zu prüfender Indikator (iCustom-Pfad, kein .ex5; Beispiel: Examples\ZigZag) | leer | Pfad des benutzerdefinierten Indikators relativ zu MQL5\Indicators, ohne Dateiendung, genau so, wie es iCustom erwartet. Absichtlich leer gelassen: Wenn nichts eingegeben wird, meldet das Tool dies im Journal und im Panel und führt keine Messungen durch, anstatt auf einen Indikator zu verweisen, der möglicherweise nicht auf Ihrem Terminal vorhanden ist. Wenn der Pfad in einem Live-Chart falsch ist, bleibt das Tool angehängt und versucht es alle 30 Sekunden erneut, sodass die Eingabe korrigiert werden kann, ohne es zu entfernen. Gemessen auf XAUUSD M1 mit einem falschen Pfad: Das Tool gab den Fehlercode einmal an, das Terminal fügte bei jedem Versuch (im Abstand von 30,4 und 30,7 Sekunden) eine eigene Zeile „Kann nicht geladen werden“ hinzu, und nach Korrektur des Pfads begann die Messung, ohne dass etwas getrennt wurde. |
| Parameter, durch Kommas getrennt (leer = Standardwerte des Indikators) | leer | Die Eingabeliste des zu testenden Indikators, zum Beispiel 12,5,3. Jeder Eintrag wird nach seinem Inhalt typisiert: „true“ und „false“ werden zu „bool“, eine Zahl mit einem Punkt oder einem Exponenten wird zu „double“, eine einfache Zahl wird zu „int“, alles andere wird zu einer Zeichenkette, und umgebende Anführungszeichen werden entfernt. Die geparste Liste wird zu Beginn im Protokoll ausgegeben, sodass eine falsche Liste sofort erkennbar ist. Leer bedeutet, dass der Indikator mit seinen eigenen Standardwerten läuft. |
| Anzahl der zu überwachenden Puffer (1..32) | 1 | Anzahl der zu lesenden Puffer. Berechnungspuffer werden ebenfalls gezählt. Ein Puffer, über den der Indikator nicht verfügt, führt zum Scheitern der gesamten Prüfung: Dies wird als übersprungene Prüfung gewertet, und die ersten paar Vorkommnisse werden mit dem Fehlercode ins Protokoll geschrieben, sodass der Fehler sichtbar wird und nicht unbemerkt bleibt. |
| Symbol (leer = Chart-Symbol) | leer | Einen Indikator für ein anderes Symbol überprüfen, ohne dessen Chart zu öffnen. |
| Zeitrahmen | Aktuell | Einen Indikator in einem anderen Zeitrahmen anzeigen. |
| Beobachtete geschlossene Kerzen (Verschiebung 1..N) | 300 | Tiefe der Überprüfung. Die Anzahl der Balken multipliziert mit den Puffern ist auf 200.000 Slots begrenzt; darüber hinaus wird die Tiefe reduziert und eine Zeile in das Journal geschrieben. |
| Mindestzeit in Sekunden zwischen den Überprüfungen, simulierte Zeit im Tester (0 = bei jedem Tick) | 1 | Drosselung. Eine Sekunde erfasst jede Neudarstellung, auf die ein Mensch reagieren könnte, und beansprucht weitaus weniger CPU-Leistung als bei jedem Tick; allerdings kann ein Wert, der weniger als das Intervall andauert, übersehen werden. Im Strategietester wird die modellierte Uhr anstelle der realen Uhr verwendet, sodass dieselbe Einstellung dort funktioniert. |
| Änderungen, die kleiner als dieser Wert sind, ignorieren (0 = jede Änderung zählen) | 0,0 | Absolute Toleranz in den Einheiten des Puffers für einen Indikator, der aus Gleitkommazahlen neu berechnet wird und bei dem es zu Schwankungen in den letzten Ziffern kommt. 0 zählt jede Differenz. Eine Änderung, die nicht größer als die Toleranz ist, wird überhaupt nicht erfasst – kein Ereignis, keine CSV-Zeile, kein Beitrag zu Max |delta|. |
| 0,0 als „kein Wert“ behandeln (Pfeil-/ZigZag-Puffer) | true | Viele Signalindikatoren geben bei „kein Signal“ 0,0 statt EMPTY_VALUE aus. Wenn diese Option aktiviert ist, gilt 0,0 als leer und diese Ereignisse werden als „Erschienen“ und „Verschwunden“ gemeldet. Deaktivieren Sie diese Option für einen Puffer, bei dem genau Null ein zulässiger Wert ist. |
| Indikator-Handle alle N Minuten neu erstellen (0 = nie) | 0 | Gibt das Handle frei und fordert vom Terminal ein neues an, was eine vollständige Neuberechnung auslöst, sofern kein anderes Programm denselben Indikator mit denselben Parametern weiterhin hält. Der aufgezeichnete Verlauf wird nicht gelöscht; auf diese Weise wird der Indikator erfasst, der während der Ausführung stabil ist, sich nach einem Neuladen jedoch ändert. |
| Beende die Messung nach N Minuten (0 = so lange laufen lassen, bis sie entfernt wird) | 0 | Beendet die Messung und friert den Bericht ein, was für einen unbeaufsichtigten Lauf praktisch ist. |
| Jedes Ereignis in MQL5\Files (CSV) schreiben | true | Die Ereignisdatei. |
| CSV-Dateiname (leer = automatisch) | leer | Automatische Namen werden aus Symbol, Zeitrahmen und Startzeit gebildet. Wenn eine Datei mit diesem Namen derzeit geöffnet ist, weil eine andere Instanz in derselben Minute gestartet wurde, wird ein numerischer Zusatz hinzugefügt, anstatt die Instanz ohne Datei laufen zu lassen. Eine geschlossene Datei mit demselben Namen aus einem früheren Lauf in derselben Minute wird überschrieben; geben Sie daher einen eigenen Namen an, wenn ein Lauf von Bedeutung ist. |
| Schreiben nach dieser Anzahl von Zeilen beenden | 100000 | Schützen Sie sich vor einem Indikator, der bei jedem Tick neu gezeichnet wird. Die Zählung wird nach Erreichen des Limits fortgesetzt; lediglich die Datei wächst nicht weiter, und eine Zeile im Protokoll weist darauf hin. |
| Zeige das Berichtsfenster im Chart an | true | Deaktivieren Sie es für einen unbeaufsichtigten Lauf oder einen Testlauf. |
| Abstand des Fensters X, Pixel bei 96 dpi | 12 | Position. Das Fenster wird entsprechend der Bildschirm-dpi skaliert. |
| Y-Abstand des Panels, Pixel bei 96 dpi | 20 | Position. |
| Schriftgröße, Punkte (4 oder mehr; das Bedienfeld wird entsprechend der Bildschirmauflösung skaliert) | 9 | Das Panel ist eine Tabelle in einer Monospace-Schriftart. Verkleinern Sie es auf einem Bildschirm mit hoher dpi-Auflösung oder bei einem kleinen Diagramm; die obigen Screenshots verwenden 4. |
| Fensterecke | Oben links | Anker-Ecke. |
| Hintergrundfarbe des Fensters | dunkelgrau | Farben des Fensters. Eine Instanz pro Chart, wie bei jedem Expert Advisor; mehrere Charts können gleichzeitig Instanzen ausführen. |
| Farbe des Feldrahmens | blassgrau | |
| Textfarbe des Fensters | hellgrau | |
| Farbe der Kopfzeile, wenn alle Puffer stabil sind | Limettengrün | |
| Farbe der Kopfzeile, wenn ein Puffer neu gezeichnet wird | tomatenrot |
Der Bericht
Dies ist der Zusammenfassungsblock, den das Tool in das Journal geschrieben hat, als der oben gezeigte Live-ZigZag-Lauf gestoppt wurde, wortwörtlich kopiert. Das Feld im Chart zeigt dieselbe Tabelle, wobei die Laufzeit rechtsbündig ausgerichtet ist:
=== Zusammenfassung des Repaint Inspectors ===================================== Repaint Inspector Examples\ZigZag (12,5,3) XAUUSD M1 300 geschlossene Balken beobachtet läuft seit 01:26:39 Prüfungen 4 387 übersprungen 0 Neusynchronisierungen 0 Neuladungen 0 Puffer Beurteilung Vergleiche Geändert Erscheint Verschwindet MaxShift Max |delta| 0 REPAINTS 1 315 713 0 0 17 15 - 1 REPAINTS 1 315 713 0 0 3 1 - 2 REPAINTS 1 315 713 0 0 10 3 - CSV: RepaintInspector_XAUUSD_M1_20260930_0219.csv (30 Zeilen) gestartet am 30.09.2026 um 02:19:31 Uhr Serverzeit, 4387 Prüfungen, 0 übersprungen, 0 Neusynchronisierungen, 0 Handle-Neuladungen Ereignisse insgesamt 30, CSV-Zeilen 30 Puffer 0: REPAINTS, Vergleiche 1.315.713, geändert 0, erschienen 0, verschwunden 17, betroffene Balken 17 Puffer 0: maximale Verschiebung 15 (VANISHED am Balken 30.09.2026 02:59) Puffer 0: max. |delta| keine Puffer 0: erstes Ereignis 30.09.2026 02:23:02, letztes Ereignis 30.09.2026 03:46:03
Die Ereignisdatei im Verzeichnis „MQL5\Files“ enthält eine Zeile pro Ereignis:
detect_time;bar_time;shift_at_detect;buffer;event;old_value;new_value;delta;drift_from_first;after_reload 28.09.2026 17:11:20;28.09.2026 17:06:00;5;0;VANISHED;4126,18400000;EMPTY;;;0
Ein leerer Wert wird als „EMPTY“ geschrieben und eine undefinierte Differenz bleibt leer, sodass kein Leser eine fehlende Zahl mit einer Null verwechseln kann. Eine zweite Datei, <name>_summary.csv, enthält pro Puffer eine Zeile mit jedem Zähler sowie dem Indikator, dessen Parametern, Symbol, Zeitrahmen und Tiefe; sie wird während des Laufs alle 15 Sekunden aktualisiert, sodass die Zahlen aus der Ereignisdatei nachgezählt werden können, ohne ein Protokoll auswerten zu müssen. Das Journal erhält den Startblock, die ersten 20 Ereignisse in voller Länge sowie die oben genannte Zusammenfassung, wenn das Tool entfernt wird.
So verwenden Sie es
- Legen Sie den Indikator, den Sie überprüfen möchten, im Ordner „MQL5\Indicators“ ab und notieren Sie sich dessen Parameterliste.
- Fügen Sie den „Repaint Inspector“ einem Chart des Symbols und des Zeitrahmens hinzu, mit denen Sie tatsächlich handeln, geben Sie den Pfad und die Parameter ein und legen Sie die Anzahl der Puffer fest.
- Lassen Sie das Tool über die Stunden laufen, in denen Sie handeln. Repainting ist eine Eigenschaft der Marktaktivität, nicht der Uhrzeit, und ein ruhiger Sonntagabend beweist gar nichts.
- Lesen Sie zunächst den „MaxShift“-Wert ab, dann die Aufteilung zwischen „Changed“, „Appeared“ und „Vanished“, öffnen Sie anschließend die CSV-Datei und sehen Sie sich einige Zeilen an.
- Wenn der Indikator das übersteht, stellen Sie die Neuladungsintervalle auf 30 Minuten ein und lassen Sie ihn erneut laufen.
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 Stichprobenentnahme im Prüfintervall. Ein Wert, der innerhalb eines Intervalls kurzzeitig auftritt und wieder verschwindet, kann übersehen werden, und die obige Messung zeigt, dass dies zweimal in anderthalb Stunden geschieht.
- Es misst, was ein Indikator über seine Puffer ausgibt. Ein Indikator, der Objekte auf das Chart zeichnet, anstatt Puffer zu füllen, ist für das Tool unsichtbar.
- Der Strategietester ist hier nützlich, da er einen Tag auf Sekunden komprimiert, aber ein Repaint im Tester und ein Repaint im Live-Betrieb sind nicht automatisch dasselbe. Wenn das Ergebnis entscheidend ist, führen Sie den Test im Live-Betrieb durch.
- Im Strategietester muss der zu testende Indikator vor Beginn des Laufs 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: Bei einer Messung mit einem absichtlich falschen Pfad führt das Erstellen des Handles in „OnInit“ zu einem „Indikator-Erstellungsfehler“ und anschließend zu einem „kritischen Fehler in OnInit“, während das Erstellen bei der ersten Überprüfung stattdessen dieselben sechs Fehlerdatensätze erzeugt, die mit „kritischer Fehler in OnTester“ enden. Auf einem Live-Chart ist derselbe falsche Pfad nicht fatal: Das Tool blieb verbunden und versuchte es erneut, und die Messung mit dem korrigierten Pfad begann an der richtigen Stelle.
- Das sagt nichts darüber aus, ob ein Indikator profitabel ist. Ein Indikator ohne Repainting kann dennoch nutzlos sein, und manche Indikatoren mit Repainting werden bewusst und korrekt eingesetzt.
- Keine Handelsfunktionen, keine DLL, kein Netzwerkzugriff, keine externen Dateien erforderlich. Es liest Puffer aus und schreibt CSV-Dateien in den Ordner „MQL5\Files“.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/77842
ATS Liquidity City - liquidity pools and sweeps, drawn as a neon city
Zeigt an, wo Stopps wahrscheinlich liegen und welche gerade ausgelöst wurden. Liquiditätspools = bestätigte Swing-Hochs und -Tiefs, die der Kurs noch nicht durchbrochen hat, gleiche Hochs/Tiefs (ein größerer Pool) sowie das gestrige Hoch und Tief. Wenn eine Kerze über einen Pool hinaushandelt, wird sie als „geswept“ markiert und als „erobert & zurückgewiesen“, wenn dieselbe Kerze wieder innerhalb des Pools schließt. Kein Repainting: Ein Swing wird erst nach N geschlossenen Kerzen auf jeder Seite verwendet. Das Panel ist eine auf einem CCanvas gezeichnete Neonstadt: Der Kurs ist ein fliegendes Auto, Verkaufs-Stops sind Türme darunter, Kauf-Stops schwebende Plattformen darüber, die gestrigen Niveaus goldene Werbetafeln, ein Suchscheinwerfer fegt über den Himmel und ein Ticker zeigt den heutigen Fang an. Zwei Puffer liefern den nächstgelegenen aktiven Pool oberhalb und unterhalb zur Verwendung in einem Expert Advisor. Nur Indikator: Es werden niemals Trades ausgeführt.
Symbol Spec Auditor
Ein Diagrammfenster, das die Details der Kontraktspezifikationen anzeigt, die die Positionsgröße und die Handelskosten (Punktwert, Spread-Kosten, Margin, Swap, Ausführungsregeln) in der Kontowährung bestimmen, vor Broker-Einstellungen warnt, die den Lot-Größen-Code unbemerkt verletzen, und die Überprüfung jedes Market-Watch-Symbols als CSV-Datei exportiert.
Session Levels - Asia London New York High Low with Alerts
Zeichnet Hoch und Tief von bis zu 3 Handelssitzungen (Asien, London, New York) mit optionalen Ausbruchs-Alarmen ohne Repainting.
Accelerator Oszillator (AC)
Der Acceleration/Deceleration Indikator (AC) misst die Beschleunigung und Verlangsamung des aktuellen Marktimpulses, der Kraft der Kursbewegung.