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:
- 5
- Rating:
- Veröffentlicht:
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Übersicht
Dies ist eine originalgetreue MetaTrader-5-Portierung des Relative-Moving-Average-Konzepts (RMA), das von Dr. Daniel Alexandre Bloch in seinem Kurs „A Course on Systematic Trading with RMA“ vorgestellt wurde. Ein klassischer gleitender Durchschnitt reduziert ein Kursfenster auf einen geglätteten Wert, der zwar das Niveau, aber nicht die Seltenheit angibt: Ein hoher Schlusskurs kann weit von allen umliegenden Kursen entfernt sein oder hoch und dennoch innerhalb des Fensters völlig gewöhnlich sein. Der RMA beantwortet die zweite Frage. Er behandelt das gleitende Fenster als kleine Verteilung, ordnet den aktuellen Kurs innerhalb dieses Fensters ein und gibt diesen Rang auf einer Skala von [0, 1] an, die bei jedem Instrument und in jedem Volatilitätsregime dasselbe bedeutet.
Das Framework besteht aus drei Ebenen, die im Code exakt widergespiegelt werden:
- Der SMA des hinteren Fensters von W-Schlusskursen, der als lokales Gleichgewicht betrachtet und auf Null festgelegt wird.
- Die RMA-Familie, d. h. die Abweichung jedes Fenster-Meilensteins von diesem Gleichgewicht als reines Verhältnis sma / x - 1, berechnet am letzten Schlusskurs, am ersten Schlusskurs, am mittleren Schlusskurs sowie am Fensterminimum und -maximum. Da es sich um Verhältnisse handelt, sind sie skalierungsfrei und über verschiedene Wertpapiere hinweg vergleichbar.
- Die Perzentile, die das Fenster als normalisierte Renditen (Schlusskurs / SMA – 1) neu ausdrücken und die aktuellen, minimalen und maximalen Werte innerhalb dieser Verteilung rangieren. Dies ist die einfache empirische Verteilungsfunktion (CDF), wörtlich aus der Definition im Anhang der Veröffentlichung übernommen, und f_w ist die Reihe, auf deren Grundlage alle nachgelagerten Handelsvorgänge tatsächlich erfolgen.

Die Konstruktion: Ein gleitendes Fenster aus Schlusskursen wird zu einem SMA, die Schlusskurse werden als Verteilung normalisierter Renditen um diesen SMA herum ausgedrückt, und der Rang des aktuellen Kurses innerhalb dieser Verteilung wird zu seinem Perzentil auf der Skala [0, 1].
Darüber hinaus werden zwei abgeleitete Kennzahlen mit der Engine ausgeliefert. Ein Regime-Detektor klassifiziert die Streuung der normalisierten Renditen als expandierend, kontrahierend oder im Übergang, wobei die in der Veröffentlichung beschriebenen relativen Extremwertverhältnisse (Relative Extremum Ratios) herangezogen werden, die durch eine Steigung nach der Methode der kleinsten Quadrate, einen z-Score und einen Variationskoeffizienten untermauert werden. Ein Monitor für ungünstige Kursbewegungen liefert „d_med_w“, das auf den Median zentrierte Perzentil, sowie „D_k“, den Anteil der jüngsten Kurssprünge von Bar zu Bar, die nach oben gingen. Dabei handelt es sich um einen Wert zur Richtungskonsistenz, der die Aussage „diese Bewegung verläuft in die andere Richtung“ präzise macht und nicht nur eine Frage der Meinung ist.
Zwei Programme sind enthalten. RMA_Engine berechnet jede Reihe und stellt alle neunzehn davon als Puffer bereit, sodass ein Expert Advisor oder ein anderer Indikator die genauen Zahlen direkt aus dem Chart auslesen kann, anstatt die mathematischen Berechnungen neu zu implementieren und dadurch den Schritt zu verlieren. RMA_Panel berechnet überhaupt nichts: Es lokalisiert die bereits an den Chart angefügte Engine und spiegelt eine Gruppe ihrer Puffer in ein eigenes Unterfenster, da die RMA-Familie in Promille gemessen wird und d_med_w auf Null zentriert ist, sodass beides auf der 0-bis-1-Achse der Engine nicht ablesbar ist.
Was die Engine zeichnet
Die Engine öffnet ein separates Fenster, dessen vertikale Achse auf [0, 1] festgelegt ist, und zeichnet sechs Kurven:
| Diagramm | Darstellung | Beschreibung |
|---|---|---|
| Betriebsbereich | Farbiges Band in voller Höhe hinter allen anderen Elementen | Grün für Expansion, Rot für Kontraktion, Gelb für eine sich ausbreitende Expansion, Blau für eine ausbrechende Kontraktion. Solange das Regime noch unentschieden ist, wird nichts gezeichnet, sodass ein Warm-up nicht mit einem Farbfeld beginnt, das „noch keine Antwort“ bedeutet. |
| f_w | Dicke blaue Linie | Das Perzentil des aktuellen Schlusskurses: Die Position der letzten normalisierten Rendite innerhalb ihres eigenen Zeitfensters. Dies ist die Hauptreihe. |
| f_min / f_max | Gepunktet rot und grün | Die Perzentile des Fensterminimums und -maximums, also die Unter- und Obergrenze der Hüllkurve, die f_w durchläuft. |
| alpha_lo_mean / alpha_hi_mean | Violette und orangefarbene Linien | Geglättete Quantilwerte: ein EMA von f_w und dessen Komplement, der den langsameren Hintergrund bildet, vor dem sich ein Ausschlag in f_w als Ausschlag abzeichnet. |
Drei horizontale Hilfslinien werden an den beiden Einstiegsschwellenwerten und am Median eingezeichnet. Sie werden aus denselben Eingabedaten erstellt, die auch dem zugehörigen Expert Advisor zur Verfügung stehen, und sind nicht fest codiert. Daher verschieben sich die Hilfslinien bei einer Neuanpassung der Schwellenwerte entsprechend mit, anstatt dass das Diagramm stillschweigend im Widerspruch zu den Regeln steht.
So ist es zu interpretieren: Ein f_w, das an die obere Hilfslinie drückt, bedeutet, dass der aktuelle Schlusskurs am höchsten Stand liegt, den das Fenster bisher verzeichnet hat – genau dort, wo eine Abwärtsbewegung ausgelöst wird; ein f_w an der unteren Hilfslinie ist der umgekehrte Fall. Der Median ist das Niveau, auf dessen rechter Seite sich eine Traversal noch befinden muss; das Überschreiten dieses Niveaus ist der natürliche Ausstieg. Das farbige Band liefert den Kontext für diese Interpretation, da der Rhythmus der Strategie darin besteht, Positionen zu Beginn einer Expansionsphase zu eröffnen und sie während einer Kontraktionsphase zu schließen.
Empfohlene Konfiguration
| Einstellung | Empfohlener Wert | Anmerkungen |
|---|---|---|
| Symbol | Beliebig | Die Fraktilskala normalisiert sich selbst, sodass keine Kalibrierung pro Symbol erforderlich ist, damit die Anzeige aussagekräftig ist. Bei der Entwicklung und den folgenden Screenshots wurde EURUSD verwendet. |
| Zeitrahmen | M30 bis H4 | Funktioniert in jedem Zeitrahmen. Das Fenster wird in Bars gemessen, daher beschreibt ein kürzerer Zeitrahmen bei gleicher Fensterbreite (W) lediglich einen kürzeren Marktabschnitt. |
| Fenstergröße (W) | 106 Balken | Der Standardwert. In der Abhandlung ist vorgesehen, dass das Fenster für jeden Vermögenswert individuell kalibriert wird; daher handelt es sich hierbei eher um einen Ausgangspunkt als um eine Empfehlung. |
| Erforderliche Historie | W + Lookback-Bars des Regimes | 126 Balken bei den Standardeinstellungen. Jede Darstellung beginnt dort, wo das jeweilige Modul erstmals eine Antwort liefern kann, und nicht erst nach der längsten Aufwärmphase des Datensatzes; daher erscheinen die Perzentile vor dem Regime-Band. |
Wichtigste Merkmale
Getreu der Veröffentlichung
- Das Fraktil entspricht der Definition im Anhang der Veröffentlichung: f_i = (1 / |W_i|) * sum_j I( W_ij <= v_i ), und wurde genau wie beschrieben implementiert. Wo der Text der Veröffentlichung und der Anhang voneinander abweichen, hat der Anhang Vorrang, und die Abweichung wird im Quellcode dokumentiert, anstatt stillschweigend korrigiert zu werden.
- Die Regimeklassifizierung folgt den relativen Extremwertverhältnissen (Relative Extremum Ratios), wobei zunächst die Kontraktion geprüft wird, da dies die strengste Auslegung ist und einer Bestätigung bedarf, während die Expansion bewusst leichter zu erreichen ist.
- Es wurden keine Glättungen, Schwellenwerte oder Filter hinzugefügt, die im Quelltext nicht vorgesehen sind.
Für die Verarbeitung durch andere Programme konzipiert
- Alle neunzehn Reihen werden als Indikatorpuffer bereitgestellt – sechs davon werden grafisch dargestellt, dreizehn dienen ausschließlich der Berechnung –, sodass ein EA dieselben Zahlen lesen kann, die auch das Diagramm anzeigt, und es niemals zu Abweichungen zwischen beiden kommen kann.
- Die Pufferzuordnung ist in einem einzigen gemeinsamen Header hinterlegt, sodass die Engine, die Panels und alle Verbraucher dieselbe Sprache sprechen, anstatt sich voneinander zu entfernen, ohne dass ein Kompilierungsfehler vorwarnt.
- Die mathematischen Berechnungen finden vollständig in reinen Header-Klassen statt, ohne Abhängigkeit von Charts oder Orders, sodass derselbe Code ein Skript oder einen Test-Harness antreiben kann, ohne dass etwas gestubbt werden muss.
Korrekte inkrementelle Neuberechnung
- Jeder Durchlauf berechnet neu ausgehend von „prev_calculated-1“, nicht von „prev_calculated“. Der Balken an diesem Index befand sich beim vorherigen Aufruf noch im Aufbau, und sein Schlusskurs wurde erst jetzt endgültig; würde man ihn unverändert lassen, würde ein halbfertiger Wert in jeder davon abhängigen Reihe festgeschrieben, und die Differenz der Perzentile zwischen zwei Balken würde zu einer Differenz zwischen zwei unvollständigen Zahlen werden.
- Aufwärm-Balken enthalten „EMPTY_VALUE“ statt Null, sodass ein Verbraucher, der mitten im Aufwärmprozess einsteigt, „fehlt“ anstelle einer plausiblen Zahl sieht.
- Die Regimeklassifizierung ist innerhalb ihres Übergangsbereichs pfadabhängig, daher wird eine Historie pro Balken geführt statt eines fortlaufenden Feldes; dies ermöglicht es einem inkrementellen Durchlauf, die Kette wieder ab dem vorherigen Balken aufzunehmen.
Panels, die eine zweite Achse nutzen
- Die Engine öffnet die angeforderten Panels automatisch und überprüft dabei zunächst das Diagramm, damit eine Vorlage, die diese bereits enthält, oder eine Neuinitialisierung nach einer Eingabeänderung keine zweite Kopie hinter der ersten stapelt. Panels werden mit der Engine entfernt, jedoch erst bei der tatsächlichen Entfernung; daher kehrt man beim Wechsel des Zeitrahmens zu dem Layout zurück, das man verlassen hat.
- Das Panel findet die Engine, indem es deren Kurznamen im Chart abgleicht, anstatt einen eigenen Handle zu erstellen; so kann es niemals zu einer zweiten, anders parametrisierten Berechnung verzweigen, die neben der eigentlichen angezeigt wird.
Screenshots

Das Engine-Fenster für EURUSD, M30: f_w mit seiner Hüllkurve und den geglätteten Quantil-Mittelwerten vor dem farbigen Regime-Hintergrund.

Das Panel für gegenläufige Trends: d_med_w, zentriert auf Null, mit D_k darüber, dem Wert für die Richtungskonsistenz.

Das RMA-Familien-Panel: rma_w mit dem Fensterminimum und -maximum auf einer eigenen Skala, die Hüllkurve, die der aktuelle Kurs durchläuft.
Installation und Dateistruktur
Zwei Indikatoren und vier Header-Dateien. Die Anordnung ist entscheidend: Die Engine lädt das Panel über den relativen Pfad „RMA\RMA_Panel“, und die Header-Dateien werden als „<RMA\...>“ eingebunden, daher müssen sich beide in ihren jeweiligen RMA-Unterordnern befinden.
| Datei | Rolle | Beschreibung |
|---|---|---|
| Indikatoren\RMA\RMA_Engine.mq5 | Hauptindikator | Führt die drei Module auf Live-Balken aus, bindet alle neunzehn Puffer, zeichnet die sechs Kurven und das Regime-Band und öffnet die Panels. Enthält keine eigenen mathematischen Berechnungen. |
| Indikatoren\RMA\RMA_Panel.mq5 | Passthrough-Panel | Positioniert die Engine auf dem Chart und spiegelt eine Gruppe ihrer Puffer in ein Unterfenster mit eigener Skalierung. Zwei Modi: widrige Bewegung (D_k, d_med_w) und die RMA-Familie (rma_w, rma_min, rma_max). |
| Include\RMA\RmaTypes.mqh | Gemeinsames Vokabular | Die Regime- und Cross-State-Aufzählungen, die Pufferkarte sowie die Anzahl der Plots und Paletten. Der einzige Ort, an dem sich die Engine, die Panels und alle Verbraucher einig sind. |
| Include\RMA\RmaCore.mqh | Numerischer Kern | Der SMA, die fünfteilige RMA-Familie, die normalisierte Renditeverteilung, die Fraktilfunktion, der Fensterbereich und die geglätteten Alpha-Grenzen. |
| Include\RMA\RegimeDetector.mqh | Regimeklassifizierung | Expansion, Kontraktion und die beiden Übergangszustände, abgeleitet aus der Hüllkurve des Extremwertverhältnisses, bestätigt durch Steigung, Z-Score und Variationskoeffizienten. |
| Include\RMA\AdverseMonitor.mqh | Richtungskonsistenz | d_med_w, das medianzentrierte Perzentil, und D_k, der Anteil der Aufwärtsbewegungen bei den jüngsten Bar-zu-Bar-Schritten. |
Auslesen der Puffer aus Ihrem eigenen Code
Erwerben Sie mit iCustom einen Handle auf RMA\RMA_Engine und lesen Sie jeden beliebigen Index darunter mit CopyBuffer aus. Die Indizes 0 bis 6 sind die dargestellten Reihen und 7 bis 18 dienen nur der Berechnung, aber alle neunzehn sind lesbar.
| Index | Reihe | Bedeutung |
|---|---|---|
| 0, 1 | Regime-Band, Farbindex | Die Höhe des Hintergrunds und sein Farbplatz. Enthält keinen Messwert, sondern nur eine Farbe. |
| 2 | f_w | Fraktil des letzten normalisierten Wertes des Fensters im Bereich [0, 1]. Die Primärreihe. |
| 3, 4 | f_min, f_max | Fraktile des Minimal- und Maximalwerts des Fensters. |
| 5, 6 | alpha_lo_mean, alpha_hi_mean | EMA der unteren und oberen Alpha-Grenzen. |
| 7 | sma | Der einfache gleitende Durchschnitt des Fensters in Preiseinheiten. |
| 8 bis 12 | rma_w, rma_1, rma_mid, rma_min, rma_max | Die RMA-Familie: sma geteilt durch den letzten, ersten, mittleren, minimalen und maximalen Schlusskurs, minus eins. |
| 13 | range | Streuung der normierten Renditen des Fensters; der Wert, den der Regime-Detektor ausliest. |
| 14, 15 | alpha_lo, alpha_hi | Das Rohquantil, das f_w einnimmt, und dessen Komplement. |
| 16 | regime | Die Regime-Nummerierung als Double-Wert: 0 Expansion, 1 Kontraktion, 2 Rollover, 3 Ausbruch, 4 unbekannt. |
| 17, 18 | D_k, d_med_w | Richtungskonsistenz und das medianzentrierte Perzentil. |
Eingabeparameter
| Gruppe | Parameter | Standardwerte |
|---|---|---|
| Fenster | InpWindowSize, InpSmoothingPeriod | 106 Takte, 10 |
| Regime-Erkennung | InpEpsilonLow, InpEpsilonHigh, InpSlopeThreshold, InpRegimeLookback, InpVariationRatioLow, InpZScoreExpansion, InpRangeHistoryLookback | 0,15, 3,0, 0,0001, 20, 0,1, 1,0, 100 |
| Ungünstige Bewegung | InpAdverseLookback | 10 Balken |
| Referenzlinien | InpEntryUpperThreshold, InpEntryLowerThreshold | 0,9, 0,1 |
| Bedienfelder | InpAutoAttachPanels, InpPanelAdverse, InpPanelRmaValues, InpAdverseThresholdDown, InpAdverseThresholdUp | true, true, false, 0,3, 0,7 |
| Regime-Hintergrund | InpShowRegimeBand plus eine Farbe pro Regime | true, dunkelgrün / rot / bernsteinfarben / blau |
Forschungsgrundlage
Die Umsetzung folgt:
- Daniel Alexandre Bloch, „A Course on Systematic Trading with RMA“, verfügbar auf SSRN.
Eine Einschränkung sollte klar erwähnt werden, da sie aus der Quelle selbst stammt: Der Abschnitt „Ergebnisse“ der Arbeit wird als zukünftige Aufgabe offen gelassen. Er bietet ein Rahmenwerk und dessen Funktionsweise, jedoch keine empirische Erfolgsbilanz. Was dieser Indikator Ihnen bietet, ist eine Beschreibung des Marktzustands auf einer Skala, die überall dieselbe Bedeutung hat – dies ist eine Grundlage für Ihre eigenen Tests und kein validierter Vorteil, der direkt aus der Quelle übernommen wurde.
Ein Begleitartikel erläutert die mathematischen Grundlagen und die Implementierung jedes Moduls und erstellt den Expert Advisor, der auf Basis dieser Puffer handelt: „Blochs Relative Moving Average (RMA)-Framework-Implementierung in MQL5“.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/75472
SpreadAudit – der tatsächliche Spread des Brokers aus dem M1-Verlauf
Das Skript ermittelt den tatsächlichen Spread Ihres Brokers aus dem Feld „Spread“ der M1-Balken und gibt den Median, das 90. und das 99. Perzentil in Preiseinheiten, in Punkten und in ATR-Anteilen aus und exportiert den durchschnittlichen und den maximalen Spread für jede Stunde des Tages in eine CSV-Datei. Dies ist erforderlich, um Strategien anhand der tatsächlichen Kosten Ihres Kontos zu testen und nicht anhand eines „typischen“ Spreads, den man sich aus dem Kopf ausrechnet.
Clock (Spread)
Funktionsweise dieses Indikators „Clock (Spread).mq5“ ist ein MetaTrader-5-Chartindikator, der in der Ecke des Charts eine kleine Textbeschriftung anzeigt, die folgende Informationen enthält: Countdown-Timer bis zum Schließen der aktuellen Kerze (im Format HH:MM:SS oder MM:SS, je nach Zeitrahmen) Aktueller Spread (Ask − Bid, in Punkten), angezeigt in Klammern neben dem Timer. Änderungsprotokoll: Version 2.20: - Der Spread wird nun je nach Richtung dynamisch eingefärbt (grün = steigend, rot = fallend) - Konfigurierbare Eingaben für die Spread-Farben hinzugefügt
Trading Panel EA
Pro Manager ist ein All-in-One-MT5-Handelsassistent, der speziell für Prop-Firmen und professionelle Trader entwickelt wurde. Führen Sie Trades schneller aus, verwalten Sie Positionen intelligenter, kontrollieren Sie Risiken effizient und automatisieren Sie tägliche Handelsaufgaben mit leistungsstarken Tools wie Break-even, Average TP, Magic-Number-Management und Auto Grid.
Accelerator Oszillator (AC)
Der Acceleration/Deceleration Indikator (AC) misst die Beschleunigung und Verlangsamung des aktuellen Marktimpulses, der Kraft der Kursbewegung.