Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
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
Ansichten:
10
Rating:
(2)
Veröffentlicht:
\MQL5\Include\EVT\
GPDModel.mqh (12.21 KB) ansehen
MQL5 Freelance Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Überblick

Fast jedes Risikomanagement-Tool im Standard-Toolkit von MetaTrader 5 basiert auf einer versteckten Annahme: dass der schlimmste Verlust, für den man planen sollte, in etwa dem schlimmsten Verlust entspricht, den man bereits erlebt hat. Die Average True Range bemisst die Positionsgröße anhand der jüngsten Volatilität. Ein Monte-Carlo-Resampler mischt die tatsächlich getätigten Trades neu. Der historische Value at Risk (VaR) entnimmt direkt aus Ihrer Renditehistorie ein Perzentil. Alle diese Methoden betrachten den Hauptteil der Verteilung und hoffen stillschweigend, dass die Zukunft nichts Extremeres hervorbringt als die Vergangenheit.

Finanzielle Renditen weisen „Fat Tails“ auf, sodass diese Hoffnung fehl am Platz ist. Große Kursbewegungen treten häufiger auf und reichen weiter, als es eine Normalverteilung zulässt, und der schlimmste Tag in einer Stichprobe ist fast nie der schlimmste Tag, zu dem der Markt fähig ist. Jede Methode, die Verluste nur so hoch einschätzen kann wie die, die bereits in ihrem Betrachtungsfenster liegen, wird einen seltenen Crash systematisch unterschätzen.

Normalverteilung, überlagert auf einem Renditehistogramm mit dicken Enden, wobei die Lücke in den Enden schattiert ist

Das Normalmodell (Kurve) im Vergleich zu realen Renditen mit dicken Enden (Histogramm). Der schattierte linke Schwanz stellt den Verlust dar, den das Modell übersieht.

Dieser Indikator integriert den für diese Lücke entwickelten Zweig der Statistik nativ in MQL5. Die Extremwerttheorie modelliert nicht die gesamte Verteilung; sie modelliert nur den Randbereich, und zwar mit einer Form, die durch einen Grenzwertsatz begründet und nicht angenommen wird. Das angepasste Modell kann dann über alles in der Stichprobe hinaus extrapolieren: einen Verlust von 99,9 %, eine Bewegung, die etwa einmal alle drei Jahre auftritt – eine Zahl, die Ihre historische Datenreihe tatsächlich nie hervorgebracht hat.

Die Methode. Der Indikator implementiert „Peaks-Over-Threshold“. Er wandelt die Schlusskurse des Charts in eine einseitige Abwärtsverlustreihe um, wobei die Größe jeder Abwärtsbewegung beibehalten und jede Aufwärtsbewegung auf Null gesetzt wird. Er wählt einen hohen Schwellenwert u an einem Quantil dieser Reihe aus, verworfen alles darunter und untersucht nur die Überschreitungen – die Beträge, um die die Verluste den Schwellenwert überschreiten. Der Satz von Pickands-Balkema-de Haan besagt, dass diese Überschreitungen für eine breite Klasse von zugrunde liegenden Verteilungen mit steigendem Schwellenwert zu einer einzigen Familie konvergieren: der verallgemeinerten Pareto-Verteilung. Die Form des Schwanzes muss also nicht geschätzt, sondern lediglich angepasst werden.

Schwellenwert für eine Verlustreihe, Überschreitungen entfernt und mit einer GPD angepasst

„Peaks-Over-Threshold“: Für die Verlustreihe wird ein Schwellenwert festgelegt, die darüber liegenden Überschreitungen werden herausgefiltert, und allein an diese Überschreitungen wird eine verallgemeinerte Pareto-Verteilung angepasst.

Die Anpassung erfolgt durch eine echte Maximum-Likelihood-Optimierung von Form und Skala der GPD, die über den im Terminal enthaltenen ALGLIB-Optimierer mit Nebenbedingungen durchgeführt wird. Es gibt keine Python-Brücke, keine DLL und keinerlei externe Abhängigkeiten.

Ein Hinweis zum Anwendungsbereich: EVT ist ein Instrumentzur Messung der Risikogröße, kein Instrumentzum Market-Timing. Es zeigt Ihnen, wie schwerwiegend ein seltener Verlust sein könnte und ob der Schwanz derzeit schwer oder leicht ist. Es sagt Ihnen nicht, wann ein Crash eintreten wird oder in welche Richtung Sie handeln sollten. Eine ansteigende Tail-Form als Signal für „Short-Positionen“ zu interpretieren, ist ein Missbrauch des Instruments. Die richtige Reaktion auf einen dicker werdenden Tail ist die Steuerung des Engagements, niemals die Vorhersage der Richtung.


Was es anzeigt

Drei Zahlen werden in einem gleitenden Fenster berechnet und in einem Panel direkt im Chart angezeigt, wobei die erste davon zusätzlich als Linie in einem Unterfenster dargestellt wird, sodass beobachtet werden kann, wie sich der „Tail“ im Laufe der Zeit verengt oder ausweitet.

Interpretation
Was es ist
Anwendung
EVT-VaR
Value at Risk bei dem gewählten Konfidenzniveau, extrapoliert aus dem angepassten Tail statt aus den historischen Daten abgelesen.
Der Verlust, den Sie einkalkulieren sollten. Wird im Panel als Prozentsatz angezeigt und als Linie im Unterfenster dargestellt. Eine ansteigende Linie bedeutet, dass sich der Schwanz verdickt.
EVT ES
Expected Shortfall, der durchschnittliche Verlust, falls der VaR überschritten wird.
Wie schlimm es wird, wenn der Worst-Case-Szenario eintritt. Immer schlimmer als der VaR und der ehrlichere Wert für die Platzierung von Stopps.
xi (Form)
Der angepasste Tail-Index. Je größer, desto schwergewichtiger: Die Verluste summieren sich weiter in der Zukunft.
Die Regime-Anzeige, im Panel farblich gekennzeichnet. Dies ist der Parameter, der bestimmt, wie weit die Extrapolation reicht.

Bei den beiden Schätzern handelt es sich um die Standardformen von GPD-POT, sodass das Panel genau Folgendes angibt:

VaR_p = u + (sigma / xi) * [ ( (Nu / n) / (1 - p) )^xi - 1 ]
ES_p  = VaR_p / (1 - xi) + (sigma - xi * u) / (1 - xi)

Hier ist u der Schwellenwert, Sigma und xi sind die angepasste Skala und Form, und Nu / n ist die Überschreitungsrate. Beide verfügen über eine exponentielle Grenze, die automatisch verwendet wird, wenn die angepasste Form nahe bei Null liegt, was die Arithmetik genau in dem Regime stabil hält, in dem eine Division durch die Form dies nicht tun würde.

Die „Tail-Ampel“. Das Panel färbt die Form so ein, dass der Bereich ohne Interpretation einer Zahl abgelesen werden kann:

xi
Farbe
Ablesewert
unter 0,10
Grün
Ähnlich wie bei der Exponentialverteilung mit schmalem Schwanz. Ruhig.
0,10 bis 0,30
Gold
Mäßig stark, hier liegen die meisten liquiden Instrumente.
über 0,30
Rot
Schwere Schwänze. Verluste summieren sich und Kursabstürze häufen sich.

Diese Grenzwerte dienen eher als Orientierungshilfe als als statistische Schwellenwerte und können nach Belieben angepasst werden. Entscheidend ist, dass dieselbe Verteilung, die die Farbe bestimmt, auch die Formeln bestimmt, sodass das Panel nicht grün anzeigen kann, während die Berechnung im Hintergrund einen VaR mit dickem Schwanz ermittelt.

EVT-Crash-Gauge-Anzeige in einem Diagramm, das das Panel und die VaR-Linie zeigt

Die Anzeige im Diagramm: Das Panel zeigt den VaR, den Expected Shortfall und die farbcodierte Schwanzform an, während das Unterfenster den EVT-VaR im Zeitverlauf darstellt.


Es weigert sich zu raten

Dies ist eine Designentscheidung, die man kennen sollte, bevor man das Panel einbindet, da sie die Bedeutung eines leeren Messwerts verändert. Eine Zweiparameter-Schwanzanpassung benötigt eine bestimmte Anzahl von Überschreitungen, um vertrauenswürdig zu sein, und in der EVT-Literatur werden etwa dreißig bis fünfzig Schwanzpunkte als praktischer Mindestwert angesehen. Die Engine schreibt dreißig vor. Unterhalb dieser Grenze meldet sie ihren Status statt eines Zahlenwerts, und das Panel drückt dies in klaren Worten aus:

Status
Bedeutung
OK
Die Anpassung konvergierte auf genügend Tail-Daten. VaR, ES und xi sind aktiv.
Unzureichende Tail-Daten (weniger als 30 Überschreitungen)
Das Zeitfenster ergab weniger als dreißig Überschreitungen. Erhöhen Sie den Lookback-Zeitraum oder senken Sie das Schwellenquantil.
Anpassung konvergierte nicht
Der Optimierer hat keine gültige Form und Skala erreicht. Es wird nichts gemeldet.
Nicht angepasst / fehlerhafte Eingabe
Es wurde noch keine Anpassung durchgeführt, oder das Fenster war leer oder entartet.

Ein konkretes Beispiel dafür in der Praxis: Bei der Standardschwelle von 0,95 liefert ein Lookback von 500 Bar nur etwa fünfundzwanzig Überschreitungen, und das Messgerät meldet „unzureichende Daten am Rand“ (25/30 Überschreitungen) anstelle einer Zahl. Bei 800 bar wird der Schwellenwert überschritten und die Anpassung erfolgt einwandfrei. Das ist kein Fehler, den man umgehen muss, sondern das Modell weigert sich, eine Schätzung abzugeben – genau das ist das gewünschte Verhalten eines Tools, dessen einziger Zweck darin besteht, seltene Ereignisse ehrlich darzustellen.

Das gleiche Prinzip gilt auch am anderen Ende. Wenn die angepasste Form den Wert eins erreicht, divergiert der Mittelwert des Schwänzens, und der Expected Shortfall existiert nicht mehr; daher gibt die Engine an dieser Stelle Null zurück, anstatt einen erfundenen Wert zu liefern. Überall dort, wo eine Anpassung nicht den Status „OK“ erhält, bleibt die dargestellte Linie für diesen Balken leer, anstatt einen veralteten Wert weiterzuführen; somit ist die Linie genau dort leer, wo das Modell keine Aussage treffen wollte.


Empfohlene Konfiguration

Einstellung
Empfohlener Wert
Anmerkungen
Symbol
Jedes liquide Wertpapier
Nichts ist symbolspezifisch: Die Anpassung erfolgt auf Basis der logarithmierten Renditen, daher liegen die Werte als Prozentsätze vor und sind instrumentenübergreifend vergleichbar. Ein Symbol mit geringem Handelsvolumen ist der einzige Fall, bei dem die Untergrenze wahrscheinlich nicht eingehalten wird.
Zeitrahmen
H4 oder D1
Der VaR ist eine Verlustgröße pro Bar, daher bestimmt der Zeitrahmen, was die Zahl bedeutet. Auf D1 handelt es sich um einen Tagesverlust. Intraday funktioniert zwar, aber der Ausreißer einer 1-Minuten-Rendite ist ein anderes Phänomen.
Rückblick
800 Balken
So gewählt, dass der Schwellenwert von 0,95 die Untergrenze von 30 Überschreitungen mit Spielraum unterschreitet. Kürzere Zeitfenster reagieren schneller, stoßen jedoch an die Untergrenze.
Erforderliche Historie
Lookback + 2 Balken
Vor dem ersten anpassbaren Balken wird nichts dargestellt. Stellen Sie sicher, dass der Chart tatsächlich so viele historische Daten heruntergeladen hat, sonst bleibt die Anzeige leer.
Schwellenwert-Quantil
0,95
Die Standardvoreinstellung. Eine Verringerung dieses Wertes führt zu Überschreitungen auf Kosten der asymptotischen Gültigkeit, da der Satz nur bei steigendem Schwellenwert gilt.


Eingabeparameter

Parameter
Standard
Beschreibung
Rückblick
800
Gleitendes Fenster in Bars, über das jede Anpassung berechnet wird. Ein Fenster, dessen verwertbare Renditen unter die Hälfte dieses Wertes fallen, wird als zu spärlich verworfen.
Schwellenwert
0,95
Quantil der Verlustreihe, das zur Festlegung des POT-Schwellenwerts u verwendet wird. Zulässige Werte liegen zwischen 0,5 und 0,999.
Konfidenz
0,99
Konfidenzniveau für VaR und ES. Da der angepasste Schwanz extrapoliert wird, ist 0,999 eine zulässige Einstellung, auch wenn die Stichprobe keinen solchen Verlust enthält.
RefitEvery
1
Häufigkeit der Neuanpassung für historische Balken. Bei einem Wert von 1 wird jeder Balken neu angepasst und die dargestellte Linie vollständig aufgelöst; eine Erhöhung dieses Wertes tauscht bei sehr langen Charts die historische Auflösung gegen Geschwindigkeit ein. Der aktuelle Balken wird unabhängig davon immer neu angepasst.
ShowPanel
true
Zeigt das Textfeld auf dem Chart an. Die Objekte des Textfelds werden entfernt, wenn der Indikator abgetrennt wird.
Zur Leistung: Eine GPD-Anpassung ist eine Optimierung, kein Nachschlagen. Die Regel zur Anpassungshäufigkeit existiert, da das Neuanpassen bei jedem Balken eines sehr langen Charts einen erheblichen Rechenaufwand darstellt. Wenn das erste Laden langsam erscheint, erhöhen Sie den Wert von „RefitEvery“; die Live-Anzeige bleibt in jedem Fall exakt, da der aktuellste Balken immer neu angepasst wird.


Verwendung der Engine in Ihrem eigenen Code

Das Tail-Modell ist eine eigenständige „Header-only“-Klasse, CGPDModel, ohne Abhängigkeit von Charts oder Indikator-Puffern. Es passt ein Array von Verlusten an, wobei „größer“ einfach „schlechter“ bedeutet; somit bleibt die Vorzeichenkonvention die des Aufrufers, und jede Strategie, die eine Verlustreihe erzeugen kann, kann es direkt verwenden:

#include <EVT\GPDModel.mqh>

CGPDModel model;
model.SetThresholdQuantile(0.95);

if(model.Fit(losses,count) && model.IsReliable())
  {
   double var = model.VaR(0.99);
   double es  = model.ExpectedShortfall(0.99);
   double xi  = model.Xi();
  }
else
   Print("tail not usable: ",model.StatusText());

Darüber hinaus stellt die Klasse die angepasste Skala, den ausgewählten Schwellenwert, die Anzahl der Überschreitungen und die Status-Enumeration bereit, sodass ein Nutzer genau protokollieren oder anzeigen kann, warum ein Wert zurückgehalten wurde. Um den Indikator anstelle der Klasse auszulesen, erwirben Sie ein Handle mit iCustom auf EVT\EVTCrashGauge und kopieren Sie Puffer 0, der den EVT-VaR enthält und bei jedem Balken, bei dem die Anpassung nicht zuverlässig war, den Wert Null enthält.


Einschränkungen

EVT hat seinen Platz in einem Risiko-Toolkit verdient, ist jedoch ein spezialisiertes Instrument, und um es gut einzusetzen, muss man wissen, wo es nicht anwendbar ist:

  • Es benötigt umfangreiche Daten zu den Extremwerten. Eine Anpassung der Extremwerte mit zwei Parametern erfordert eine aussagekräftige Anzahl von Überschreitungen. Bei einem wenig gehandelten Wertpapier oder einem kurzen Zeitfenster lautet die richtige Antwort „unzureichende Daten“, und das Design berücksichtigt dies, anstatt eine Zahl zu erfinden.
  • Es reagiert empfindlich auf den Schwellenwert. Der Standardwert von 0,95 ist gängig, doch die angepasste Form und Skala verschieben sich mit ihm. Bei einem ernsthaften Einsatz sollte diese Empfindlichkeit untersucht werden, anstatt sich auf eine einzige Einstellung zu verlassen – weshalb das Quantil als Eingabewert zur Verfügung steht.
  • Es misst die Größenordnung, nicht den Zeitpunkt. Das ist es wert, wiederholt zu werden, da es sich um den häufigsten Missbrauch handelt. Ein steigender Tail-Index ist kein Richtungssignal.
  • Der Schwanz kann seine klare Definition verlieren. Wenn sich die angepasste Form der Eins nähert, hört der Expected Shortfall auf zu existieren, und ein Wert von Null in diesem Bereich ist selbst eine Information und kein Fehler.


Dateistruktur

Ein Indikator und ein Header. Der Header ist als <EVT\GPDModel.mqh> enthalten und muss daher im EVT- Unterordner unter „Include“ abgelegt werden.

Datei
Rolle
Beschreibung
Indikatoren\EVT\EVTCrashGauge.mq5
Das Gauge
Erstellt die Abwärtsverlust-Reihe aus dem gleitenden Fenster der Schlusskurse, passt die Anpassung an den Takt der Kerzen an, zeichnet den EVT-VaR auf und verwaltet das Panel im Chart mit seinem farbcodierten Tail-Wert.
Include\EVT\GPDModel.mqh
Tail-Engine
Die Klasse CGPDModel: Schwellenwertauswahl, Extraktion von Überschreitungen, Maximum-Likelihood-Anpassung des GPD mittels ALGLIB-Optimierung mit Nebenbedingungen, VaR und Expected Shortfall sowie die Statusaufzählung, die jeden Messwert steuert.

Die Engine versorgt den Optimierer vor der Ausführung der Maximum-Likelihood-Schätzung mit einer Schätzung nach der Methode der Momente und beschränkt die Form auf einen sinnvollen Bereich, sodass ein pathologisches Fenster die Anpassung eher in Richtung einer verworfenen als in Richtung einer plausibel erscheinenden, aber falschen Anpassung treibt.


Forschungsgrundlage

Die Implementierung folgt der Standardbehandlung von „Peaks-Over-Threshold“ in der Extremwerttheorie: dem Pickands-Balkema-de-Haan-Theorem zur Konvergenz von Schwellenwertüberschreitungen zur verallgemeinerten Pareto-Verteilung, der Maximum-Likelihood-Schätzung ihrer Form und ihres Maßstabs sowie den üblichen GPD-POT-Ausdrücken für Value at Risk und Expected Shortfall.

Dieses Programm dient ausschließlich zu Bildungszwecken. Der Handel birgt ein hohes Risiko, und eine Schätzung des Tail-Werts ist lediglich eine Schätzung und keine Garantie für die Höhe des nächsten Verlusts. Testen Sie das Programm stets gründlich auf einem Demokonto, bevor Sie echtes Kapital riskieren.

Ein begleitender Artikel leitet die Methode her, führt Zeile für Zeile durch die Engine und den Indikator und bindet die Tail-Schätzung in einen Expert Advisor zur Positionsgrößenbestimmung ein, um dessen Verhalten im Strategietester zu messen: Extremwerttheorie in MQL5: Entwicklung eines Tail-Risk-Crash-Gauges jenseits des Monte-Carlo-VaR.

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

RSI Histogram RSI Histogram

Dies ist ein benutzerdefinierter MQL5-Indikator für MetaTrader 5 namens „RSI-Histogramm“. Er stellt die Standard-RSI-Linie in einem separaten Fenster dar, ergänzt durch eine farbcodierte Histogramm-Version derselben RSI-Werte, deren Farbe sich je nach Momentum ändert:

Relative Moving Average EA Relative Moving Average EA

Eine MQL5-Implementierung aller vier Crossover-Strategien aus Blochs „Relative Moving Average“-Framework, ergänzt um seine adaptiven Crossover-Exit-Regeln, die je nach Volatilitätsregime wechseln. Ein- und Ausstiege erfolgen im Fraktilraum, sodass die Schwellenwerte für jedes Symbol dieselbe Bedeutung haben.

GoldLondonBreakout GoldLondonBreakout

Bei XAUUSD werden im asiatischen Handel die Positionen innerhalb der Spanne gehalten, anschließend wird für die Eröffnung in London ein OCO-Breakout-Paar (BuyStop/SellStop) platziert, mit ATR-basierten Stopps und einer Positionsgröße, die sich am Risikoprozentsatz orientiert. Keine Indikatoren, keine Ermessensentscheidungen – die Spanne wird gemessen, nicht geschätzt.

Sessionvolatilityheatmap Sessionvolatilityheatmap

Zeigt die durchschnittliche Preisspanne pro Stunde des Handelstages als Heatmap direkt im Chart an, ergänzt durch eine Schattierung hinter den Kerzen für die Handelssitzungen in Asien, London und New York – so können Sie erkennen, wann sich ein Wertpapier tatsächlich bewegt, anstatt nur zu raten.