Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Telegram !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Vues:
51
Note:
(3)
Publié:
\MQL5\Include\EVT\
GPDModel.mqh (12.21 KB) afficher
MQL5 Freelance Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance

Aperçu

Presque tous les outils de gestion des risques de la boîte à outils standard de MetaTrader 5 partagent une hypothèse cachée : la pire perte à anticiper correspond à peu près à la pire perte que vous ayez déjà subie. L’Average True Range (ATR) dimensionne les positions en fonction de la volatilité récente. Un rééchantillonneur de Monte Carlo réorganise les transactions que vous avez réellement effectuées. La valeur à risque historique (Historical Value at Risk) extrait un centile directement de l’historique de vos rendements. Tous ces outils se basent sur le corps de la distribution et espèrent secrètement que l’avenir ne produira rien de plus extrême que le passé.

Les rendements financiers présentent des queues épaisses; cet espoir est donc vain. Les fluctuations importantes se produisent plus souvent et vont plus loin que ne le permet une distribution normale, et la pire journée d’un échantillon n’est presque jamais la pire journée dont le marché est capable. Toute méthode qui ne peut envisager que des pertes aussi importantes que celles déjà présentes dans son champ d’observation sous-estimera systématiquement un krach rare.

Distribution normale superposée à un histogramme de rendements à queues épaisses, avec l'espace entre les queues ombré

Le modèle normal (courbe) par rapport aux rendements réels à queues épaisses (histogramme). La queue gauche ombrée correspond à la perte qu’il ne prend pas en compte.

Cet indicateur intègre nativement dans MQL5 la branche des statistiques développée pour combler cette lacune. La théorie des valeurs extrêmes ne modélise pas l’ensemble de la distribution ; elle ne modélise que la queue, et ce avec une forme justifiée par un théorème de limite plutôt que supposée. Le modèle ajusté peut alors extrapoler au-delà de tout ce qui figure dans l’échantillon : une perte de 99,9 %, un mouvement observé environ une fois tous les trois ans, un chiffre que votre historique n’a en réalité jamais produit.

La méthode. L’indicateur met en œuvre la technique « Peaks-Over-Threshold ». Il convertit les cours de clôture du graphique en une série de pertes à la baisse unilatérale, en conservant l’amplitude de chaque mouvement baissier et en attribuant la valeur zéro à chaque mouvement haussier. Il choisit un seuil élevé u à un quantile de cette série, écarte tout ce qui se trouve en dessous et n’étudie que les dépassements, c’est-à-dire les montants par lesquels les pertes franchissent le seuil. Le théorème de Pickands-Balkema-de Haan stipule que, pour une vaste classe de distributions sous-jacentes, ces dépassements convergent, à mesure que le seuil augmente, vers une seule famille : la distribution de Pareto généralisée. Il n’est donc pas nécessaire de deviner la forme de la queue, mais seulement de l’ajuster.

Seuil sur une série de pertes, dépassements éliminés et ajustement à l'aide d'un modèle GPD

Pics au-dessus du seuil : un seuil est défini sur la série de pertes, les dépassements au-dessus de celui-ci sont isolés, puis une distribution de Pareto généralisée est ajustée uniquement à ces dépassements.

L’ajustement consiste en une véritable optimisation par maximum de vraisemblance de la forme et de l’échelle de la distribution de Pareto généralisée (GPD), effectuée via l’optimiseur sous contraintes ALGLIB fourni avec le terminal. Il n’y a ni passerelle Python, ni DLL, ni aucune dépendance externe d’aucune sorte.

Remarque sur le champ d’application. EVT est un outild’évaluation de l’ampleur du risque, et non un outilde timing de marché. Il vous indique l’ampleur potentielle d’une perte rare et si la queue de la distribution est actuellement lourde ou légère. Il ne vous indique pas quand un krach se produira ni dans quelle direction négocier. Interpréter une courbe de queue ascendante comme un signal de « vente à découvert » constitue une mauvaise utilisation de l’outil. La réponse appropriée à une queue qui s’épaissit consiste à contrôler l’exposition, et non à prédire la direction du marché.


Ce qu’il indique

Trois chiffres sont calculés sur une fenêtre glissante et affichés dans un panneau intégré au graphique ; le premier d’entre eux est également représenté sous forme de courbe dans une sous-fenêtre, ce qui permet d’observer le resserrement ou l’élargissement de la queue au fil du temps.

Interprétation
De quoi s’agit-il ?
Comment l'utiliser
EVT VaR
Valeur à risque au niveau de confiance choisi, extrapolée à partir de la queue ajustée plutôt que lue à partir de l'historique.
La perte que vous devez prévoir. Affichée sous forme de pourcentage sur le panneau et représentée par la courbe de la sous-fenêtre. Une courbe ascendante indique que la queue s'épaissit.
EVT ES
Shortfall attendu : la perte moyenne en cas de dépassement de la VaR.
L'ampleur du sinistre une fois que le scénario le plus défavorable se produit. Toujours supérieure à la VaR, c'est le chiffre le plus fiable pour le placement des stops.
xi (forme)
L'indice de queue ajusté. Plus il est élevé, plus la courbe est lourde : les pertes s'amplifient à mesure que l'on s'éloigne.
L'indicateur de régime, représenté par un code couleur sur le tableau. C'est le paramètre qui détermine la portée de l'extrapolation.

Ces deux estimateurs correspondent aux formulaires GPD-POT standard ; le tableau indique donc exactement :

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

Ici, u est le seuil, sigma et xi sont l’échelle et la forme ajustées, et Nu / n est le taux de dépassement. Les deux disposent d’une limite exponentielle qui est utilisée automatiquement lorsque la forme ajustée est proche de zéro, ce qui maintient la stabilité arithmétique précisément dans le régime où la division par la forme ne le serait pas.

Le feu tricolore de queue. Le panel met la forme en couleur afin que le régime puisse être lu sans avoir à interpréter un chiffre :

xi
Couleur
Lecture
inférieur à 0,10
Vert
Proche du cas exponentiel à queue fine. Calme.
De 0,10 à 0,30
Or
Modérément intense, où se situent la plupart des instruments liquides.
supérieur à 0,30
Rouge
Queue lourde. Les pertes s’accumulent et les krachs se multiplient.

Ces seuils sont davantage des aides à la lecture que des seuils statistiques, et ils peuvent être modifiés à votre convenance. Ce qui importe, c’est que la forme qui détermine la couleur soit la même que celle qui détermine les formules ; ainsi, le panneau ne peut pas afficher du vert alors que le calcul effectue discrètement une VaR à queue épaisse.

Indicateur EVT Crash Gauge sur un graphique représentant le panneau et la courbe VaR

L'indicateur sur un graphique : le panneau affiche la VaR, l'Expected Shortfall et la forme de la queue codée par couleur, tandis que la sous-fenêtre trace la VaR EVT au fil du temps.


Il refuse de deviner

Il s’agit là d’un choix de conception qu’il convient de connaître avant d’intégrer ce module, car il modifie la signification d’un affichage vide. Un ajustement de queue à deux paramètres nécessite un nombre réel de dépassements pour être fiable, et la littérature sur l’EVT considère qu’environ trente à cinquante points de queue constituent le seuil pratique minimum. Le moteur impose le nombre de trente. En dessous de ce seuil, il signale son état plutôt qu’un chiffre, et le panneau l’indique clairement :

Statut
Signification
OK
L'ajustement a convergé sur un nombre suffisant de données de queue. La VaR, l'ES et xi sont opérationnels.
Données de queue insuffisantes (N/30 dépassements)
La fenêtre a généré moins de trente dépassements. Augmentez la période de rétrospective ou abaissez le quantile seuil.
L'ajustement n'a pas convergé
L'optimiseur n'a pas atteint une forme et une échelle valides. Aucun résultat n'est rapporté.
Pas d’ajustement / entrée incorrecte
Aucun ajustement n’a encore été effectué, ou la fenêtre était vide ou dégénérée.

Un exemple concret de ce phénomène : avec le seuil par défaut de 0,95, une période de référence de 500 bar ne donne qu’une vingtaine de dépassements, et l’indicateur signale un manque de données en queue de distribution (25/30 dépassements) au lieu d’afficher un chiffre. À 800 bars, le seuil est franchi et l’ajustement s’effectue correctement. Il ne s’agit pas d’un bug à contourner, mais du modèle refusant de faire des suppositions, ce qui correspond précisément au comportement attendu d’un outil dont l’objectif premier est de refléter fidèlement les événements rares.

Le même principe s’applique à l’autre extrémité. Lorsque la courbe ajustée atteint un, la moyenne de la queue diverge et l’« Expected Shortfall » cesse d’exister ; le moteur renvoie donc zéro à cet endroit plutôt qu’un chiffre inventé. Chaque fois qu’un ajustement n’obtient pas le statut « OK », la ligne tracée reste vierge pour cette barre plutôt que de reporter une valeur obsolète ; la ligne est donc vide exactement là où le modèle a refusé de se prononcer.


Configuration recommandée

Paramètre
Valeur recommandée
Remarques
Symbole
Tout instrument liquide
Aucun paramètre n’est spécifique à un symbole : l’ajustement s’effectue sur les rendements logarithmiques, de sorte que les valeurs sont exprimées en pourcentage et comparables d’un instrument à l’autre. Un symbole peu négocié est le seul cas susceptible de ne pas respecter le seuil minimal.
Horizon temporel
H4 ou D1
La VaR correspond à l’ampleur d’une perte par barre ; l’horizon temporel détermine donc la signification de ce chiffre. Sur D1, il s’agit d’une perte journalière. L’horizon intrajournalier fonctionne, mais la queue d’un rendement sur une minute constitue un cas à part.
Période de référence
800 barres
Ce choix permet au seuil de 0,95 de dépasser largement le seuil minimal de trente dépassements. Des fenêtres plus courtes réagissent plus rapidement mais atteignent ce seuil minimal.
Historique requis
Période de rétrospective + 2 barres
Rien n’est affiché avant la première barre pouvant être prise en compte. Assurez-vous que le graphique a bien téléchargé suffisamment d’historique, sinon l’indicateur restera vide.
Quantile du seuil
0,95
Valeur par défaut standard. L'abaisser entraîne des dépassements au détriment de la validité asymptotique, car le théorème reste valable à mesure que le seuil augmente.


Paramètres d'entrée

Paramètre
Valeur par défaut
Description
Lookback
800
Fenêtre glissante, en barres, sur laquelle chaque ajustement est calculé. Une fenêtre dont les rendements exploitables sont inférieurs à la moitié de ce nombre est rejetée car trop clairsemée.
Seuil quant
0,95
Quantile de la série de pertes utilisé pour fixer le seuil u du POT. Valeurs acceptées comprises entre 0,5 et 0,999.
Confiance
0,99
Niveau de confiance pour la VaR et l'ES. La queue ajustée s'extrapole ; par conséquent, la valeur 0,999 est un paramètre valable même si l'échantillon ne contient aucune perte de ce type.
RefitEvery
1
Fréquence de réajustement des barres historiques. À 1, chaque barre est réajustée et la courbe tracée est entièrement résolue ; augmenter cette valeur permet de privilégier la vitesse au détriment de la résolution historique sur les graphiques très longs. La barre actuelle est toujours réajustée, quel que soit le réglage.
Afficher le panneau
true
Affiche le panneau de texte sur le graphique. Les objets du panneau sont supprimés lorsque l'indicateur est détaché.
Remarque concernant les performances : un ajustement GPD est une optimisation, pas une simple recherche. La règle de fréquence existe car le réajustement à chaque barre d’un graphique très long représente un travail important. Si le premier chargement semble lent, augmentez la valeur de RefitEvery; la lecture en temps réel reste exacte dans tous les cas, puisque la barre la plus récente est toujours réajustée.


Utilisation du moteur dans votre propre code

Le modèle « tail » est une classe autonome de type « header-only », CGPDModel, sans dépendance vis-à-vis des graphiques ou des tampons d’indicateurs. Il ajuste un tableau de pertes où une valeur plus grande signifie simplement une situation plus défavorable ; la convention de signe reste donc celle de l’appelant, et toute stratégie capable de produire une série de pertes peut l’utiliser directement :

#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());

Par ailleurs, la classe expose l’échelle ajustée, le seuil sélectionné, le nombre de dépassements et l’énumération d’état, ce qui permet à un utilisateur d’enregistrer ou d’afficher précisément la raison pour laquelle une valeur n’a pas été communiquée. Pour lire l’indicateur plutôt que la classe, obtenez un descripteur avec iCustom sur EVT\EVTCrashGauge et copiez le tampon 0, qui contient la VaR EVT et prend la valeur zéro sur toute barre où l’ajustement n’était pas fiable.


Limites

EVT a sa place dans une boîte à outils de gestion des risques, mais il s’agit d’un instrument spécialisé et pour bien l’utiliser, il faut savoir dans quels cas il ne s’applique pas :

  • Il a besoin de nombreuses données de queue. Un ajustement de queue à deux paramètres nécessite un nombre significatif de dépassements. Pour un titre peu négocié ou une fenêtre de temps courte, la bonne réponse est « données insuffisantes », et la conception en tient compte plutôt que d’inventer un chiffre.
  • Il est sensible au seuil. La valeur par défaut de 0,95 est standard, mais la forme et l’échelle ajustées varient en fonction de ce seuil. Une mise en œuvre sérieuse consisterait à étudier cette sensibilité plutôt que de se fier à un seul paramètre, c’est pourquoi le quantile est proposé comme paramètre d’entrée.
  • Il mesure l’amplitude, et non le moment. Cela mérite d’être répété, car il s’agit de l’erreur d’utilisation la plus courante. Un indice de queue en hausse n’est pas un signal directionnel.
  • La queue peut cesser d’être bien définie. À mesure que la forme ajustée tend vers un, le « shortfall attendu » cesse d’exister, et une valeur nulle dans ce régime constitue en soi une information plutôt qu’un échec.


Structure du fichier

Un indicateur et un en-tête. L’en-tête est inclus sous le nom <EVT\GPDModel.mqh>; il doit donc se trouver dans le sous-dossier EVT de la partition Include.

Fichier
Rôle
Description
Indicators\EVT\EVTCrashGauge.mq5
La jauge
Construit la série des pertes à la baisse à partir d’une fenêtre glissante de cours de clôture, effectue l’ajustement au rythme des barres, trace la VaR EVT et maintient le panneau sur le graphique avec la lecture de la queue codée par couleur.
Include\EVT\GPDModel.mqh
Moteur de calcul des queues
La classe CGPDModel : sélection des seuils, extraction des dépassements, ajustement par maximum de vraisemblance du GPD via l’optimisation contrainte d’ALGLIB, VaR et shortfall attendu, ainsi que l’énumération d’états qui contrôle chaque valeur affichée.

Le moteur alimente l’optimiseur avec une estimation par la méthode des moments avant d’exécuter le calcul de vraisemblance maximale, et contraint la forme à une plage raisonnable, de sorte qu’une fenêtre pathologique le pousse vers un ajustement rejeté plutôt que vers un ajustement erroné mais d’apparence plausible.


Fondements de la recherche

La mise en œuvre suit le traitement standard « Peaks-Over-Threshold » (pics au-dessus du seuil) de la théorie des valeurs extrêmes : le théorème de Pickands-Balkema-de Haan concernant la convergence des excès par rapport au seuil vers la distribution de Pareto généralisée, l’estimation par maximum de vraisemblance de sa forme et de son échelle, ainsi que les expressions habituelles GPD-POT pour la valeur à risque (VaR) et le shortfall attendu.

Ce programme est destiné exclusivement à des fins pédagogiques. Le trading comporte un niveau de risque élevé, et une estimation de la queue de distribution n’est qu’une estimation, et non une garantie quant à l’ampleur de la prochaine perte. Testez toujours minutieusement sur un compte démo avant de risquer du capital réel.

Un article complémentaire présente le raisonnement à l’origine de la méthode, explique le moteur et l’indicateur ligne par ligne, et intègre l’estimation de la queue dans un Expert Advisor de dimensionnement de position afin d’évaluer son comportement dans le Strategy Tester : « Extreme Value Theory in MQL5 : Building a Tail-Risk Crash Gauge Beyond Monte Carlo VaR ».

Traduit de l’anglais par MetaQuotes Ltd.
Code original : https://www.mql5.com/en/code/75557

RSI Histogram RSI Histogram

Il s'agit d'un indicateur personnalisé MQL5 pour MetaTrader 5, appelé « RSI Histogram ». Il affiche la courbe RSI standard dans une fenêtre distincte, ainsi qu'une version sous forme d'histogramme, avec un code couleur, des mêmes valeurs RSI, dont la couleur varie en fonction de la dynamique :

IronHawk Fibonacci Structure Map IronHawk Fibonacci Structure Map

Free MT5 indicator that automatically maps Fibonacci levels across multiple timeframes and highlights confluence zones, market structure, premium/discount areas and key price reactions.

GDS Renko Reversal Context GDS Renko Reversal Context

A simple MT5 indicator that shows the current fixed-size Renko run and the exact price level required to confirm a classic two-brick reversal.

GDS Renko Bricks GDS Renko Bricks

A simple real-time classic Renko chart for MetaTrader 5. Set the brick size and the indicator builds equal-width Renko bricks directly from tick data. No offline charts, custom symbols or external libraries are required.