Guarda come scaricare robot di trading gratuitamente
Ci trovi su Telegram!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Visualizzazioni:
19
Valutazioni:
(4)
Pubblicato:
Aggiornato:
\MQL5\Include\EVT\
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

Panoramica

Quasi tutti gli strumenti di gestione del rischio presenti nella dotazione standard di MetaTrader 5 condividono un presupposto nascosto: che la perdita peggiore per cui vale la pena prepararsi sia all’incirca la perdita peggiore che si è già verificata. L’Average True Range dimensiona le posizioni in base alla volatilità recente. Un ricampionatore Monte Carlo rimescola le operazioni effettivamente effettuate. Il Value at Risk storico ricava un percentile direttamente dalla cronologia dei rendimenti. Tutti questi metodi considerano il corpo della distribuzione e sperano in silenzio che il futuro non produca nulla di più estremo rispetto al passato.

I rendimenti finanziari presentano code spesse, quindi tale speranza è mal riposta. I movimenti di ampia entità si verificano più spesso e raggiungono livelli più estremi di quanto consenta una distribuzione normale, e il singolo giorno peggiore in un campione non è quasi mai il giorno peggiore di cui il mercato è capace. Qualsiasi metodo in grado di considerare solo perdite gravi quanto quelle già presenti nel proprio campione sottovaluterà sistematicamente un crollo raro.

Distribuzione normale sovrapposta a un istogramma dei rendimenti con code spesse, con l’intervallo tra le code ombreggiato

Il modello normale (curva) rispetto ai rendimenti reali a coda spessa (istogramma). La coda sinistra ombreggiata rappresenta la perdita che sfugge all’analisi.

Questo indicatore integra nativamente in MQL5 il ramo della statistica sviluppato proprio per colmare tale lacuna. La teoria dei valori estremi non modella l’intera distribuzione; modella solo la coda, e lo fa con una forma giustificata da un teorema del limite piuttosto che ipotizzata. Il modello adattato può quindi estrapolare oltre qualsiasi dato presente nel campione: una perdita del 99,9%, un movimento che si verifica all’incirca una volta ogni tre anni, un valore che la vostra cronologia non ha mai effettivamente prodotto.

Il metodo. L’indicatore implementa il metodo Peaks-Over-Threshold. Converte le chiusure del grafico in una serie unilaterale di perdite al ribasso, mantenendo l’entità di ogni movimento al ribasso e azzerando ogni movimento al rialzo. Sceglie una soglia alta u a un quantile di quella serie, scarta tutto ciò che si trova al di sotto di essa e studia solo i superamenti, ovvero gli importi di cui le perdite superano la soglia. Il teorema di Pickands-Balkema-de Haan afferma che, per un’ampia classe di distribuzioni sottostanti, tali eccedenze convergono, all’aumentare della soglia, verso un’unica famiglia: la distribuzione di Pareto generalizzata. Pertanto, non è necessario ipotizzare la forma della coda, ma solo adattarla.

Soglia su una serie di perdite, superamenti eliminati e adattamento con un modello GPD

Picchi oltre la soglia: viene impostata una soglia sulla serie delle perdite, i superamenti al di sopra di essa vengono separati e una distribuzione di Pareto generalizzata viene adattata esclusivamente a tali superamenti.

L’adattamento consiste in una vera e propria ottimizzazione della massima verosimiglianza della forma e della scala della Distribuzione di Pareto Generalizzata (GPD), eseguita tramite l’ottimizzatore con vincoli ALGLIB fornito con il terminale. Non vi è alcun bridge Python, nessuna DLL e nessuna dipendenza esterna di alcun tipo.

Una nota sull’ambito di applicazione. L’EVT è uno strumentoper misurare l’entità del rischio, non uno strumentodi market timing. Indica quanto grave potrebbe essere una perdita rara e se la coda è attualmente pesante o leggera. Non indica quando si verificherà un crollo né in quale direzione operare. Interpretare una coda ascendente come un segnale per «andare short» costituisce un uso improprio dello strumento. La risposta corretta a una coda che si sta ingrossando è quella di controllare l’esposizione, mai quella di prevedere la direzione.


Cosa riporta

Tre valori vengono calcolati su una finestra mobile e visualizzati in un pannello sul grafico; il primo di essi viene anche tracciato come una linea in una finestra secondaria, in modo da poter osservare come la coda si restringa o si allarghi nel tempo.

Interpretazione
Che cos’è
Come utilizzarlo
EVT VaR
Valore a rischio (VaR) al livello di confidenza scelto, estrapolato dalla coda adattata anziché ricavato dai dati storici.
La perdita che dovresti prevedere. Visualizzata come percentuale sul pannello e rappresentata graficamente come linea nella finestra secondaria. Una linea ascendente indica che la coda si sta allargando.
EVT ES
Shortfall atteso, ovvero la perdita media nel caso in cui il VaR venga superato.
Quanto peggiora la situazione una volta che si verifica lo scenario peggiore. È sempre peggiore del VaR e rappresenta il valore più attendibile per il posizionamento degli stop.
xi (forma)
L'indice di coda adattato. Più è alto, più la coda è pesante: le perdite si accumulano ulteriormente.
L'indicatore di regime, contrassegnato da un codice colore nel pannello. Questo è il parametro che determina la portata dell'estrapolazione.

I due stimatori sono le forme standard GPD-POT, quindi ciò che il pannello riporta è esattamente:

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

Qui u è la soglia, sigma e xi sono la scala e la forma adattate, e Nu / n è il tasso di superamento. Entrambi hanno un limite esponenziale che viene utilizzato automaticamente quando la forma adattata si avvicina a zero, il che mantiene stabile l’aritmetica proprio nel regime in cui la divisione per la forma non lo sarebbe.

Il semaforo della coda. Il pannello colora la forma in modo che il regime possa essere interpretato senza dover leggere un numero:

xi
Colore
Lettura
inferiore a 0,10
Verde
Simile al caso esponenziale a coda sottile. Calmo.
Da 0,10 a 0,30
Oro
Moderatamente intenso, dove si colloca la maggior parte degli strumenti liquidi.
superiore a 0,30
Rosso
Coda pesante. Le perdite si accumulano e i crolli si concentrano.

Questi valori di soglia sono più che altro un aiuto alla lettura piuttosto che soglie statistiche e possono essere modificati a proprio piacimento. Ciò che conta è che la stessa forma che determina il colore sia quella che determina le formule, in modo che il pannello non possa mostrare il verde mentre il calcolo sta silenziosamente elaborando un VaR a coda spessa.

Indicatore EVT Crash Gauge su un grafico che mostra il pannello e la linea VaR

L’indicatore sul grafico: il pannello riporta il VaR, l’Expected Shortfall e la forma della coda codificata a colori, mentre la finestra secondaria traccia l’EVT VaR nel tempo.


Si rifiuta di fare ipotesi

Questa è la scelta progettuale che vale la pena conoscere prima di integrarlo, perché cambia il significato di una lettura vuota. Un adattamento della coda a due parametri necessita di un numero reale di superamenti per essere affidabile, e la letteratura sull’EVT considera circa trenta-cinquanta punti di coda come la soglia minima pratica. Il motore impone trenta. Al di sotto di tale soglia riporta il proprio stato anziché un valore, e il pannello lo indica chiaramente:

Stato
Significato
OK
L’adattamento ha convergito su un numero sufficiente di dati di coda. VaR, ES e xi sono attivi.
Dati di coda insufficienti (N/30 superamenti)
La finestra ha prodotto meno di trenta superamenti. Aumentare il periodo di riferimento o abbassare il quantile di soglia.
L'adattamento non ha raggiunto la convergenza
L’ottimizzatore non ha raggiunto una forma e una scala valide. Non viene segnalato nulla.
Adattamento non eseguito / input errato
Non è stata ancora eseguita alcuna adattamento, oppure la finestra era vuota o degenerata.

Un esempio concreto di questo comportamento: con la soglia predefinita di 0,95, un lookback di 500 bar produce solo circa venticinque superamenti, e l'indicatore segnala dati di coda insufficienti (25/30 superamenti) invece di un numero. A 800 bar supera la soglia minima e si adatta perfettamente. Non si tratta di un bug da aggirare, ma del modello che si rifiuta di formulare ipotesi, il che è esattamente il comportamento che ci si aspetta da uno strumento il cui unico scopo è la trasparenza riguardo agli eventi rari.

Lo stesso principio vale anche all’altra estremità. Quando la forma adattata raggiunge l’unità, la media della coda diverge e l’Expected Shortfall cessa di esistere, quindi il motore restituisce zero in quel punto anziché una cifra inventata. Ovunque un adattamento non ottenga lo stato “OK”, la linea tracciata viene lasciata vuota per quella barra anziché riportare un valore obsoleto, quindi la linea è vuota esattamente nel punto in cui il modello si è rifiutato di fornire una stima.


Configurazione consigliata

Impostazione
Valore consigliato
Note
Simbolo
Qualsiasi strumento liquido
Non vi sono specifiche relative al simbolo: l’adattamento viene eseguito sui rendimenti in scala logaritmica, pertanto i valori sono espressi in percentuale e sono comparabili tra i diversi strumenti. Un simbolo con scarsi volumi di negoziazione è l’unico caso in cui è probabile che non venga rispettata la soglia minima di superamento.
Intervallo di tempo
H4 o D1
Il VaR rappresenta l'entità della perdita per singola barra, pertanto l'intervallo di tempo determina il significato del valore. Su D1 si tratta di una perdita giornaliera. L'intervallo intraday è utilizzabile, ma la coda di un rendimento su un minuto rappresenta un oggetto diverso.
Lookback
800 barre
Scelto in modo che la soglia di 0,95 superi con un margine il limite minimo di trenta superamenti. Finestre più brevi reagiscono più rapidamente ma raggiungono il limite minimo.
Cronologia richiesta
Lookback + 2 barre
Non viene tracciato nulla prima della prima barra utilizzabile. Assicurarsi che il grafico abbia effettivamente scaricato una quantità di dati storici sufficiente, altrimenti l'indicatore rimarrà vuoto.
Quantile della soglia
0,95
Il valore predefinito standard. Abbassandolo si ottengono più superamenti a scapito della validità asintotica, poiché il teorema rimane valido all’aumentare della soglia.


Parametri di input

Parametro
Impostazione predefinita
Descrizione
Lookback
800
Finestra mobile, in barre, su cui viene calcolato ogni adattamento. Una finestra i cui rendimenti utilizzabili scendono al di sotto della metà di questo valore viene scartata in quanto troppo sparsa.
SogliaQuant
0,95
Quantile della serie di perdite utilizzato per impostare la soglia u del POT. Valori accettati compresi tra 0,5 e 0,999.
Confidenza
0,99
Livello di confidenza per VaR ed ES. La coda adattata viene estrapolata, pertanto 0,999 è un valore ammissibile anche se il campione non contiene perdite di tale entità.
RefitEvery
1
Frequenza di riadattamento per le barre storiche. Con valore pari a 1, ogni barra viene riadattata e la linea tracciata viene risolta completamente; aumentando questo valore si sacrifica la risoluzione storica a favore della velocità su grafici molto lunghi. La barra corrente viene comunque sempre riadattata.
ShowPanel
true
Disegna il pannello di testo sul grafico. Gli oggetti del pannello vengono rimossi quando l’indicatore viene scollegato.
Note sulle prestazioni: un adattamento GPD è un’ottimizzazione, non una ricerca. La regola della frequenza esiste perché l’adattamento su ogni barra di un grafico molto lungo richiede un carico di lavoro significativo. Se il primo caricamento risulta lento, aumentare il valore di RefitEvery; la lettura in tempo reale rimane comunque esatta, poiché la barra più recente viene sempre riadattata.


Utilizzo del motore nel proprio codice

Il modello tail è una classe autonoma "header-only", CGPDModel, senza dipendenze da grafici o buffer di indicatori. Effettua l'adattamento su un array di perdite in cui un valore maggiore indica semplicemente una situazione peggiore, quindi la convenzione dei segni rimane quella del chiamante e qualsiasi strategia in grado di produrre una serie di perdite può utilizzarlo direttamente:

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

Oltre a ciò, la classe espone la scala adattata, la soglia selezionata, il conteggio delle eccedenze e l’enumerazione dello stato, in modo che un utente possa registrare o visualizzare esattamente il motivo per cui un valore è stato omesso. Per leggere l’indicatore anziché la classe, acquisire un handle con iCustom su EVT\EVTCrashGauge e copiare il buffer 0, che contiene il VaR EVT e mantiene il valore zero su qualsiasi barra in cui l’adattamento non fosse affidabile.


Limiti

EVT si guadagna il suo posto in un kit di strumenti di gestione del rischio, ma è uno strumento specializzato e utilizzarlo bene significa sapere dove non è applicabile:

  • Richiede molti dati di coda. Un adattamento della coda a due parametri necessita di un numero significativo di superamenti. Su un titolo poco negoziato o in un intervallo di tempo breve, la risposta corretta è «dati insufficienti», e il design rispetta questo principio piuttosto che inventare un numero.
  • È sensibile alla soglia. Il valore predefinito di 0,95 è standard, ma la forma e la scala adattate variano di conseguenza. Un impiego serio dovrebbe studiare tale sensibilità piuttosto che affidarsi a un'unica impostazione; ecco perché il quantile è indicato come parametro di input.
  • Misura l’entità, non la tempistica. Vale la pena ribadirlo perché si tratta dell’errore più comune. Un indice della coda in aumento non è un segnale direzionale.
  • La coda può smettere di essere ben definita. Man mano che la forma adattata si avvicina a uno, lo Shortfall Atteso cessa di esistere, e uno zero in quel regime è di per sé un’informazione piuttosto che un errore.


Struttura dei file

Un indicatore e un’intestazione. L’intestazione è inclusa come <EVT\GPDModel.mqh>, quindi deve trovarsi nella sottocartella EVT all’interno di Include.

File
Ruolo
Descrizione
Indicators\EVT\EVTCrashGauge.mq5
L'indicatore
Crea la serie delle perdite al ribasso a partire dalla finestra mobile delle chiusure, esegue l’adattamento sulla base della cadenza delle barre, traccia l’EVT VaR e mantiene il pannello sul grafico con la lettura della coda codificata a colori.
Include\EVT\GPDModel.mqh
Motore della coda
La classe CGPDModel: selezione delle soglie, estrazione delle eccedenze, adattamento del GPD con il metodo della massima verosimiglianza tramite ottimizzazione vincolata con ALGLIB, VaR ed Expected Shortfall, nonché l’enumerazione di stato che regola ogni lettura.

Il motore fornisce all’ottimizzatore una stima con il metodo dei momenti prima di eseguire la massima verosimiglianza e vincola la forma a un intervallo ragionevole, in modo che una finestra patologica la spinga verso un adattamento rifiutato piuttosto che verso uno errato ma apparentemente plausibile.


Basi di ricerca

L’implementazione segue il trattamento standard Peaks-Over-Threshold della Teoria dei Valori Estremos: il teorema di Pickands-Balkema-de Haan sulla convergenza degli eccessi rispetto alla soglia verso la Distribuzione di Pareto Generalizzata, la stima della massima verosimiglianza della sua forma e scala, e le consuete espressioni GPD-POT per il Value at Risk e l’Expected Shortfall.

Questo programma è destinato esclusivamente a scopi didattici. Il trading comporta un elevato livello di rischio e una stima della coda è una stima, non una garanzia sull’entità della prossima perdita. Effettuare sempre test approfonditi su un conto demo prima di rischiare capitale reale.

Un articolo di approfondimento illustra il metodo, analizza il motore e l’indicatore riga per riga e integra la stima della coda in un Expert Advisor per il dimensionamento delle posizioni, al fine di valutarne l’efficacia nello Strategy Tester: Teoria dei valori estremi in MQL5: Costruire un indicatore di rischio di coda oltre il VaR di Monte Carlo.

Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/75557

RSI Histogram RSI Histogram

Si tratta di un indicatore personalizzato MQL5 per MetaTrader 5 denominato “RSI Histogram”. Visualizza la linea RSI standard in una finestra separata, oltre a una versione sotto forma di istogramma con codifica a colori degli stessi valori RSI, il cui colore varia in base allo slancio:

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.