Misurare la Persistenza delle Metriche di un Trading System

di , pubblicato il
In questo articolo Luca Giusti analizza e spiega il concetto di persisitenza, che si può riassumere in una frase: le migliori combinazioni di parametri ottenute lavorando sulla porzione di dati In Sample (IS, ossia lo storico su cui è stato addestrati il sistema), continuerà ad essere la migliore anche sulla porzione di dati Out Of Sample (OOS, ossia sul campione test che il sistema non ha mai visto, e su cui analizzare la

Se vuoi costruire strategie ROBUSTE allora devi comprendere il concetto di persistenza delle metriche di un trading system, e come misurarla. Questo articolo è un pò più tecnico del solito (abbiamo alzato un pò l’asticella), ma ti consiglio di leggerlo fino in fondo, perché potresti iniziare a guardare con occhi diversi la prossima ottimizzazione dei parametri di una strategia.

Il concetto di persistenza del risultato (secondo una metrica predefinita, come ad esempio il Net Profit o il Profit Factor) si può sintetizzare in questa frase: le migliori combinazioni di parametri ottenute lavorando sulla porzione di dati In Sample (IS), continuerà ad essere la migliore anche sulla porzione di dati Out Of Sample (OOS)? In altri termini, scegliendo la miglior versione del Trading System ottenuta su dati storici, si confermerà la migliore scelta anche nel prossimo futuro? Scopriamo come poter misurare questo concetto di persistenza.

Trading System e il confine fra Fitting e Over-Fitting

Un trading system è un modello che, applicato su un vettore di dati, è in grado di fornire un segnale di trading. Il vettore di dati solitamente comprende massimi, minimi, aperture, chiusure e volumi storici campionati secondo un certo timeframe, che, combinati secondo determinate logiche (il trading system), sono in grado di generare segnali di ingresso, uscita, o di attesa.

Il modello di analisi dei dati così costruito, implica spesso l’utilizzo di alcune costanti che lo sviluppatore deve individuare, come per esempio, l’orizzonte temporale di calcolo di una media mobile. Al variare di queste costanti, chiamate parametri del sistema, varia l’output del backtest (ovvero il risultato prodotto dalla strategia sui dati storici – che chiameremo porzione In Sample), e dato che non esiste ancora un modo alternativo per identificare i valori “corretti” di queste costanti, spesso si ricorre a un’ottimizzazione per testare tutti i risultati ottenuti per ogni valore su cui abbiamo deciso di fare fluttuare questo parametro, e arrivare ad individuare quello che produce i risultati più stabili per un intorno di tali valori.

Anche il trading system più semplice, quindi, implica un certo livello di fitting (=adattamento): variare manualmente alcuni dei valori dei parametri impiegati, piuttosto che delegare alla macchina una scansione estesa a tutti i valori ragionevoli che potrebbe assumere, significa comunque effettuare un’ottimizzazione (con un differente livello di efficienza).

L’ottimizzazione di un trading system porta con sé tutta una serie di problematiche che se ignorate rendono questo processo pieno di insidie. Lo sviluppatore dovrà munirsi di tutti gli strumenti necessari a riconoscere quando un fisiologico fitting, diventa over-fitting (sovraottimizzazione). Tale degenerazione si nasconde spesso dietro una moltitudine di pratiche apparentemente banali, semplici, o innocue: dalla selezione degli strumenti su cui testare il sistema, alle molteplici regole su cui il sistema si basa, dalle date scelte per il backtest, alla sottostima dei costi.

La minaccia più grande, tuttavia, resta quella della dimensione del dominio su cui si imposta la ricerca dei parametri del modello: maggiore lo spazio navigato dall’ottimizzazione, maggiore è il rischio di overfitting.

Anche prendendo le giuste precauzione una domanda resta pur sempre legittima: cosa garantisce che i set di parametri che hanno generato i migliori risultati sul passato (a prescindere dalla fitness function impiegata), saranno quelli che nel futuro avranno le migliori prestazioni?

La risposta che ci siamo dati è stata che nulla può garantirlo, ma possiamo individuare (e misurare) se un sistema presenti una tendenza a mostrare prestazioni accettabili su dati mai visti, con quei parametri che sui dati di sviluppo si erano dimostrati i più efficaci.

Il concetto dietro a questa tendenza prende il nome di: Persistenza delle Metriche.

Il concetto di Persistenza delle Metriche

Un sistema presenta persistenza su una determinata metrica (per esempio il Net Profit, il Profit Fatcor o il CAGR) se i migliori set di parametri sui dati In Sample, restano i migliori anche in Out of Sample, ovvero su dati mai visti prima.

Un sistema che mostri persistenza è un sistema su cui è ragionevole proseguire nella ricerca del set di parametri più opportuno sulla porzione di dati In Sample a disposizione. Un sistema che non mostri persistenza, invece, è un sistema il cui comportamento sui dati Out of Sample non è facilmente modellabile partendo dai dati In Sample. In questo caso la ricerca dei parametri migliori attraverso un’ottimizzazione su dati In Sample sarebbe inopportuna, in quanto le combinazioni migliori individuate nella porzione In Sample non resterebbero tali anche sulla porzione di dati Out Of Sample.

Il concetto di persistenza, dunque, si fonda sul confronto tra il punteggio ottenuto sui due diversi set di dati: quello IS (In Sample) e quello OOS (Out of Sample). Per semplificare la questione definiamo questo punteggio come una percentuale, così che il set di parametri migliori sia associato al 100%, mentre il peggiore allo 0%. Il set di parametri che si colloca a metà classifica, per esempio, sarà associato al 50%. Formalmente stiamo considerando il percentile di ogni set di parametri.

Si comincerà a notare come è possibile, da qui, definire la persistenza: se a percentuali alte in IS, corrispondono percentuali alte OOS, il sistema in esame mostra persistenza sulla metrica utilizzata. Questo in quanto i migliori set di parametri sui dati di sviluppo restano i migliori anche su dati che il trading system non ha mai visto e su cui non è stato sviluppato.

Illustrando il processo di stima della persistenza di un sistema utilizzeremo due esempi: un trading system reale che sappiamo mostrare questa proprietà, e un trading system che opera sul mercato attraverso segnali prodotti da un generatore di numeri casuali.

Per definizione, quest’ultimo, non può e non deve mostrare persistenza, lo utilizzeremo dunque come sistema di controllo.

Sulla piattaforma StrategyLAB la stima della persistenza avviene attraverso l’utilizzo di supporti visivi e numerici, cominciamo da quelli visivi.

Analisi della Persistenza

Si prenda il 10% migliore dei set di parametri in IS, e si veda la distribuzione del loro collocamento OOS in Figura 1. Non stiamo, quindi, ragionando su uno specifico set di parametri che definisce un trading system, ma su tutti i possibili trading system originati da tutte le combinazioni dei valori su cui abbiamo deciso di fare fluttuare ogni parametro della strategia.

Figura 1, Due Strategie a confronto: i migliori risultati IS restano i migliori anche in OS? Partendo dal 10% migliore dei set di parametri in IS, questa è la distribuzione del loro collocamento OOS per entrambe le strategie (quella casuale a sinistra e quella reale a destra).

Nel grafico a sinistra in Figura 1 si può notare come si distribuiscono in OOS il migliore 10% dei test in IS. Vediamo come nel sistema di random trading, figura a sinistra, il comportamento sia casuale. Con uguale probabilità, un set di parametri proveniente dal miglior 10% IS potrebbe collocarsi in OOS tra il 90% e il 100%, come tra lo 0% e il 10%.

Nel caso invece del nostro sistema di riferimento (il grafico a destra in Figura 1), la distribuzione di probabilità è schiacciata a destra. Questo implica che i migliori 10% IS, tenderanno a collocarsi tra il 70% e il 100% in OOS, con il picco di probabilità tra 80% e 100%. La probabilità combinata del range 80%-100% è dell’87%.

Questo vuol dire che optando per uno dei test che ha meglio performato sui dati In Sample si tenderà a ricadere, su dati mai visti, tra i risultati migliori.

Concentriamoci ora, più in generale, su tutti i decili IS, e vediamo qual è il percentile medio ottenuto in OOS.
In ascissa dei grafici in Figura 2, è indicato il decile in IS, e in ordinata il percentile medio OOS ottenuto dai test facenti parte del decile di partenza IS della relativa ascissa.

Figura 2, Due Strategie a confronto: il percentile in cui si collocano in OS tutti i risultati IS. Analizzando tutti i decili IS, vediamo qual è il percentile medio ottenuto in OOS per la strategia casuale (a sinistra) e quella reale (a destra)

 

Vediamo come nel test aleatorio (sempre il grafico di sinistra) non vi sia alcuna relazione tra il decile IS e la media di posizionamento OOS: ad esempio, i test facenti parte del decile 90%-100% in IS, hanno un percentile medio OOS del 49%, ovvero immediatamente sotto metà classifica.

Questa media resta pressoché invariata scendendo di decile in decile lungo la classifica IS. Ciò comporta che, a prescindere dal posizionamento IS, su dati mai visti i risultati tendono a distribuirsi omogeneamente tra lo 0% e il 100%, con media 50% (quello che potremmo definire come un risultato casuale).

La strategia reale, invece, mostra un comportamento differente: il percentile medio OOS è molto basso per i test che avevano performato peggio in IS, e molto alto per quei test che avevano performato meglio. L’andamento crescente costante, per decili IS crescenti, ci dice che la strategia tende a preservare l’ordinamento delle performance tra IS e OOS (e ad indicarci che le combinazioni che hanno performato meglio in In Sample, sono quelle che performano meglio in Out Of Sample, e allo stesso modo, le peggiori scelte in IS restano le peggiori anche in OOS).

Questi supporti visivi ci suggeriscono che la strategia randomica non presenza alcuna persistenza, ovvero che la qualità del trading system sui dati di sviluppo non è uno stimatore valido della qualità che il sistema presenterà su dati mai visti. Il contrario si può invece affermare del modello reale preso da noi in esame.

Misurazione della Persistenza

Sarebbe utile, a questo punto, poter assegnare un valore numerico che funga da indice della persistenza del sistema sulla metrica di riferimento: in altre parole, misurare la persistenza.

Abbiamo sviluppato questo indice e lo abbiamo chiamato Metric Persistence Index (MPI).

Per il calcolo dell’MPI a ogni set di parametri viene assegnato un percentile IS (posizionamento nella classifica IS, da 0% a 100%), e un percentile OOS. I due percentili vengono poi utilizzati come coordinate per il loro collocamento su uno scatter plot (grafico a dispersione).

In figura 3 è possibile esaminare il risultato per i due sistemi da noi presi in esame.

Figura 3, La Misurazione della Persistenza. Il Metric Persistence Index (MPI) è un Indice proprietario costruito per misurare la persistenza: nel grafico a sinistra lo scatter plot della strategua casuale e a destra quello della strategia reale (persistente).

Definiamo come Esattamente Persistente quel sistema che presenta classifiche invariate tra IS e OOS. In questo caso il percentile IS del risultato di un set di parametri è uguale al suo percentile OOS. Per esempio il migliore set di parametri IS (100% in IS) resta il migliore set di parametri anche in OOS (100% in OOS), il peggiore resta il peggiore (0% IS e 0% OOS), il set a metà classifica resta a metà classifica (50% IS e 50% OOS), e così via. Sui grafici di Figura 3, tutti i punti relativi ai diversi set di parametri del sistema, dovrebbero trovarsi sulla linea tratteggiata rossa.

Un sistema Inversamente Persistente osserverebbe il comportamento opposto: il migliore (100%) in IS diventa il peggiore (0%) in OOS, il secondo diventa il penultimo, il terzo il terzultimo, e così via. Questi punti giacciono sulla retta a pendenza -1 passante per il punto (0%, 100%).Un sistema che non mostra persistenza, come infatti anticipato, è un sistema il cui posizionamento in IS non è uno stimatore del posizionamento in OOS.

Possiamo dunque dire che più i punti sullo scatter plot si distribuiscono uniformemente lungo la retta tratteggiata rossa, più il sistema mostra persistenza.

Vediamo come, nel caso del trading system aleatorio, i punti rappresentanti i diversi set di parametri si posizionino in modo uniforme sull’area del grafico, a indicare la non predittività del comportamento IS rispetto al comportamento OOS. Si può dire il contrario, invece, dei punti rappresentanti i set di parametri del sistema reale di nostra scelta, che si distribuiscono uniformemente lungo la retta di Persistenza Esatta.

Per indicizzare la persistenza di un sistema, dunque, abbiamo elaborato il sopracitato MPI nella piattaforma StrategyLAB. L’MPI è un indice della qualità con cui la retta rossa tratteggiata fitta i punti del sistema. MPI è compreso tra -100% e 100%, e va letto in questo modo:

  • Un MPI elevato positivo, prossimo a 100%, indica che il sistema presenta persistenza
  • Un MPI basso, prossimo a 0, indica che il sistema non presenta persistenza
  • Un MPI elevato negativo, prossimo a -100%, indica che il sistema presenta persistenza inversa

Nel caso dei due sistemi portati come esempio si ottengono i seguenti valori: per il sistema randomico troviamo MPI = 1.25%, a dimostrazione di quanto si era intuito visivamente e che ci aspettavamo per costruzione (poiché il sistema è basato su ingressi e uscite aleatorie il comportamento IS non può predire il comportamento OOS), ovvero che non vi è persistenza; per il sistema reale preso in esame, invece, si trova MPI = 89.97%, ovvero un elevato indice di persistenza, ancora una volta a conferma dell’ispezione visiva.

Possiamo quindi concludere che per il sistema da noi scelto per questo articolo, il processo di ottimizzazione per la selezione dei parametri ha valore, in quanto il comportamento della strategia sul dataset di sviluppo è un valido predittore del futuro comportamento su dati mai visti.

Si può fare un’ulteriore osservazione: nella nuvola di punti dello scatter plot di destra si vede come il posizionamento in OOS, sebbene stimato con affidabilità dal comportamento in IS, possa essere alquanto variabile. La nostra conclusione è che possa essere sensato, su dati mai visti, scegliere di implementare non un unico set di parametri, ma una sottoselezione dei migliori IS (per esempio tutti quelli facenti parte del miglior 5% o 10%). In questo modo si andrebbe a diversificare su un numero elevato di campioni, il rischio che il set di parametri scelto sottoperformi in OOS a causa della componetene ineliminabile di rumore e caso.

Il valore di MPI, per come è calcolato, non dipende dal numero di set di parametri. Questo vuol dire che a parità di bontà del fit, al crescere del numero dei set di parametri analizzati, MPI non cresce a sua volta. Tuttavia, euristicamente, a parità di fit noi consideriamo una persistenza più significativa se mostrata su una nuvola più fitta di set, in quanto è meno probabile che il caso sia sufficiente a giustificare l’MPI ottenuto. Con pochi set, e quindi una nuvola di valori meno densa, è invece più probabile che il valore di fit ottenuto sia dovuto esclusivamente al caso. Ma se MPI non viene rialzato dall’aumentare dei set, come facciamo a includere nell’analisi questa idea intuitiva di significatività? Attraverso la deviazione standard.

La deviazione standard di MPI, infatti, è inversamente proporzionale al numero dei set di parametri: questo vuol dire che, a confronto con la sua deviazione standard, a parità di MPI, nuvole più dense mostreranno una maggiore significatività (intesa come un maggiore rapporto MPI / StdDev). In StrategyLAB consideriamo come soglia di significatività tre deviazione standard, così che un MPI inferiore a questo limite non venga considerato sufficiente a rigettare l’ipotesi di una persistenza dovuta al caso.

Ed infine, un’ultima considerazione: come ha impattato, sul calcolo dell’MPI, la suddivisione periodale IS/OOS da noi scelta per l’analisi? Se si fosse scelta un’altra tipologia di segmentazione, come sarebbe cambiato il valore trovato? Ancora una volta, in modo sottinteso, ci stiamo chiedendo quanto il caso possa giustificare l’MPI trovato. Il caso qui è espresso nella forma di un’arbitraria segmentazione temporale, che avrebbe potuto essere diversa ed aver portato ad un risultato diverso.

La risposta a questa domanda la si può trovare attraverso una permutazione aleatoria, con i dovuti vincoli, della segmentazione IS/OOS che è possibile effettuare con un click nella piattaforma StrategyLAB. Il risultato è un vettore di nubi di punti, per i quali si calcola il valore di MPI. Di tutti questi MPI, si prende poi la media. Questo valore mediato è indipendente dalla segmentazione scelta, e quindi nettato dei suoi possibili effetti.

 

Luca Giusti è un trader sistematico su Opzioni e su Futures dal 2002. Laurea in Economia, Dottorato di Ricerca in Direzione Aziendale, fondatore del progetto QTLab (Quantitative Trading LAB) in Svizzera, dove sviluppa metodologie di trading quantitativo. E’ advisor di due istituzionali e collabora con una software house (Da Vinci Fintech) con cui sviluppa piattaforme di analisi di dati finanziari, di backtest di strategie in Opzioni e di analisi di Portafogli (StrategyLAB e OptionLAB). Autore del libro “Trading Meccanico”, edito da Hoepli, Socio Ordinario Professional e docente del Master SIAT, è al suo secondo mandato come membro del comitato scientifico di questa associazione. E’ il docente dei corsi di QTLab sui Trading System e sull’Operatività con le Opzioni. Dal 2008 è relatore all’ITForum e al Tol EXPO di Borsa Italiana, è stato speaker al convegno internazionale IFTA 2017, relatore per TradeStation a Dubai nel 2016 su dei corsi di Trading Sistematico, e speaker in un convegno del CME Group a Londra nel 2019.

 

Argomenti: ,

I commenti sono chiusi.