EbenezerScrooge
Nuovo Utente
- Registrato
- 6/7/14
- Messaggi
- 646
- Punti reazioni
- 23
E` da ormai un paio d'anni che mi capita di collaborare con privati e aziende in ambito speculativo, sia in termini di "studi di fattibilità" sia in termini operativi, fornendo modelli previsionali veri e propri. E`un interesse che oggi affianco ad altre attività e che ho coltivato di fatto a partire da quel mio primo vecchio post in questo forum che suscitò tante reazioni.
Volevo riportare qui i risultati dei test per due commesse che ho ricevuto negli ultimi mesi e che mi sembrano particolarmente interessanti, non tanto per i discreti risultati quanto per l'estrema semplicità degli approcci.
In generale a me piace ricondurre i modelli previsionali in ambito finanziario a 3 categorie:
1. Voglio prevedere una quantità nel tempo e "fitto" un modello ai passati valori di quella quantità.
Questa cosa funziona solo a volte, e quasi sempre per limitati periodi di tempo. E` un approccio un po' ingenuo ed è di fatto l'argomento del thread di 3 anni fa. Funziona molto bene in altri ambiti.
2. Voglio prevedere una quantità nel tempo e "fitto" un modello a uno scenario più complesso che contempla molte variabili, determinate algoritmicamente. Il più delle volte la variabile da prevedere non fa nemmeno parte dell'input del modello.
Questo approccio è computazionalmente intenso e richiede la conoscenza del settore per la scelta complessiva delle variabili ma di media dà buoni risultati.
3. Non voglio prevedere nulla. Ho una strategia basata su assunti semplici e oggettivi (es. trend following) e uso l'intelligenza artificiale per ottimizzarla.
A rendere interessanti questi due casi è il fatto che appartengano alla prima categoria.
Caso 1
Un privato israeliano che opera unicamente in opzioni su azioni del mercato americano mi ha chiesto di provare a prevedere la volatilità di alcuni titoli nel paniere SP500 attraverso reti neurali MLP, ricorrenti e di alto ordine, utilizzando come input solo i passati valori della volatilità stessa. Non conosco i dettagli della sua operatività, dal poco che mi ha detto credo che abbia intenzione di sfruttare eventuali gap tra la volatilità implicita delle opzioni e quella reale degli asset sottostanti.
Per fornire le previsioni è stato utilizzato l'algoritmo che ho sviluppato negli ultimi anni in ambiente matlab e che si basa interamente sulle reti neurali artificiali. E` il frutto di un progetto di ricerca sull'intelligenza artificiale di cui faccio parte nell'università di Torino e che è poi la mia attività principale.
La volatilità è calcolata come media mobile (su una finestra di 21 giorni) dei moduli dei ritorni giornalieri, ed è annualizzata moltiplicando il valore per la radice quadrata di 252.
La selezione degli iperparametri (topologia delle reti, dimensione degli strati interni, parametri per l'algoritmo di addestramento, dimensione dell'input, ecc) avviene tramite un algoritmo genetico che minimizza l'errore quadratico medio in sample. Il time frame è di 21 giorni; quindi operata la selezione dei parametri del modello si addestra l'algoritmo, si produce un forecast 21 giorni avanti, si shifta di 21 giorni la finestra di dati, si addestra di nuovo (con gli stessi parametri,) si produce una nuova previsione e così via. I titoli sono stati testati su periodi di tempo diversi per rendere fattibile la computazione in tempi ragionevoli (ad esempio un titolo per cui è stato selezionata una rete più piccola può essere backtestato su un periodo più lungo.)
Nella tabella che segue riporto i titoli su cui sono stati eseguiti i test, il numero di trade, il numero di trade profittevoli e la percentuale complessiva di trade profittevoli.
Non conoscendo i dettagli dell'operatività di questa persona e non avendo a disposizione dati sulla volatilità implicita non ho potuto tracciare equity lines, sarà poi lui a valutare la bontà delle previsioni. Io ho considerato profittevoli i trade in cui il forecast è in grado di individuare la direzione della variazione di volatilità rispetto al valore corrente, come se ad esempio volessi tradare futures sul vix.
Sono state utilizzate due soglie di attivazione: ossia ho provato a vedere cosa succedeva utilizzando solo i forecast che differiscono dalla volatilità corrente di almeno 0.05 e poi di 0.1.
Quello che mi colpisce è l'omogeneità dei risultati in un periodo di tempo così ampio e su un insieme di titoli che raccoglie tutti i settori di sp500. Il risultato in sé è buono ma non eccezionale, si può ottenere di meglio con approcci più intelligenti. Inoltre si potrebbe pensare a una ulteriore ottimizzazione, già solo non considerando il singolo titolo andato peggio (Wells Fargo & Co) si sale al 75% di accuratezza. Da notare inoltre che il sistema reagisce con regolarità alle soglie di attivazione e che è un primissimo tentativo con topologie delle reti prive di ricorrenze e di input polinomiali di più alto ordine.
Alla luce di questo lavoro mi sento di poter azzardare che la volatilità dei titoli americani si lascia prevedere anche solo cercando una relazione diretta tra i suoi valori passati e quelli futuri.
Caso 2
Un broker estero di opzioni binarie mi ha chiesto di progettargli nel modo più semplice possibile una funzione che esprimesse la probabilità per un'opzione di finire in the money. In questo modo può modificare il prezzo di esercizio delle opzioni in modo da mantenere costante il valore atteso della casa anche quando il mercato diventa particolarmente prevedibile per via di forti trend in un contesto di gestione del rischio. Tra parentesi il valore atteso della casa è già di per sé astronomico e ben oltre qualsiasi soglia morale, se l'investitore/scommettitore vince guadagna 75, se perde perde 100.
Questioni morali a parte, sulle prime ho rifiutato la commessa spiegando che c'è poco da trovare probabilità su un'opzione che scade tra 30 secondi o un minuto e che se anche fosse possibile di certo non se ne viene a capo con un modello universale da applicare ovunque indiscriminatamente tra valute, commodities e altro.
Mi è stato risposto di provare lo stesso. Ho provato.
Visto che mi è stato chiesto di usare modelli molto semplici e visto che l'algo avrebbe dovuto girare sui loro server non ho potuto utilizzare il mio framework solito.
Ho scritto un semplice algoritmo basato su regressioni lineari. L'idea è fittare una regressione lineare agli ultimi n prezzi di un asset, calcolare l'errore quadratico medio commesso, assumere una distribuzione normale di questo errore (assunto non ragionevole il più delle volte) e su queste ipotesi calcolare la probabilità di un prezzo futuro più alto o più basso del prezzo corrente dell'asset.
In realtà era un poco più complicato di così perché in questo modo a causa dell'estrema varianza dei prezzi si può verificare una probabilità in contrasto con il trend rilevato ma l'idea di base era questa.
Mi hanno fornito una settimana di dati intraday tick by tick sull'eurodollaro per fare qualche prova. Io ero già pronto col "ve l'avevo detto" quando vengono fuori i seguenti risultati:
con regressioni lineari addestrate ad ogni tick, per una settimana, sugli ultimi 30 minuti di dati e un forecast 10 minuti avanti, considerando di entrare a mercato solo quando il sistema produce una probabilità prossima al 100% vengono selezionate circa 200 operazioni in una settimana di cui più del 95% in the money...
Questo ha stupito tanto me quanto loro. Ovviamente non mi illudo che sia un risultato replicabile su periodi più lunghi e su asset diversi, al contrario del risultato precedente, meno eclatante ma di certo più solido e significativo, però ecco di sicuro varrà la pena fare ulteriori indagini.
Epilogo
La morale di queste due storielle è che se anche personalmente non consiglierei di buttarsi nei mercati con qualche trading system che si limiti a cercare una relazione tra i prezzi passati e quelli futuri, a volte anche approcci un po' ingenui come questo possono essere solidi e funzionare.
Buon anno!
Volevo riportare qui i risultati dei test per due commesse che ho ricevuto negli ultimi mesi e che mi sembrano particolarmente interessanti, non tanto per i discreti risultati quanto per l'estrema semplicità degli approcci.
In generale a me piace ricondurre i modelli previsionali in ambito finanziario a 3 categorie:
1. Voglio prevedere una quantità nel tempo e "fitto" un modello ai passati valori di quella quantità.
Questa cosa funziona solo a volte, e quasi sempre per limitati periodi di tempo. E` un approccio un po' ingenuo ed è di fatto l'argomento del thread di 3 anni fa. Funziona molto bene in altri ambiti.
2. Voglio prevedere una quantità nel tempo e "fitto" un modello a uno scenario più complesso che contempla molte variabili, determinate algoritmicamente. Il più delle volte la variabile da prevedere non fa nemmeno parte dell'input del modello.
Questo approccio è computazionalmente intenso e richiede la conoscenza del settore per la scelta complessiva delle variabili ma di media dà buoni risultati.
3. Non voglio prevedere nulla. Ho una strategia basata su assunti semplici e oggettivi (es. trend following) e uso l'intelligenza artificiale per ottimizzarla.
A rendere interessanti questi due casi è il fatto che appartengano alla prima categoria.
Caso 1
Un privato israeliano che opera unicamente in opzioni su azioni del mercato americano mi ha chiesto di provare a prevedere la volatilità di alcuni titoli nel paniere SP500 attraverso reti neurali MLP, ricorrenti e di alto ordine, utilizzando come input solo i passati valori della volatilità stessa. Non conosco i dettagli della sua operatività, dal poco che mi ha detto credo che abbia intenzione di sfruttare eventuali gap tra la volatilità implicita delle opzioni e quella reale degli asset sottostanti.
Per fornire le previsioni è stato utilizzato l'algoritmo che ho sviluppato negli ultimi anni in ambiente matlab e che si basa interamente sulle reti neurali artificiali. E` il frutto di un progetto di ricerca sull'intelligenza artificiale di cui faccio parte nell'università di Torino e che è poi la mia attività principale.
La volatilità è calcolata come media mobile (su una finestra di 21 giorni) dei moduli dei ritorni giornalieri, ed è annualizzata moltiplicando il valore per la radice quadrata di 252.
La selezione degli iperparametri (topologia delle reti, dimensione degli strati interni, parametri per l'algoritmo di addestramento, dimensione dell'input, ecc) avviene tramite un algoritmo genetico che minimizza l'errore quadratico medio in sample. Il time frame è di 21 giorni; quindi operata la selezione dei parametri del modello si addestra l'algoritmo, si produce un forecast 21 giorni avanti, si shifta di 21 giorni la finestra di dati, si addestra di nuovo (con gli stessi parametri,) si produce una nuova previsione e così via. I titoli sono stati testati su periodi di tempo diversi per rendere fattibile la computazione in tempi ragionevoli (ad esempio un titolo per cui è stato selezionata una rete più piccola può essere backtestato su un periodo più lungo.)
Nella tabella che segue riporto i titoli su cui sono stati eseguiti i test, il numero di trade, il numero di trade profittevoli e la percentuale complessiva di trade profittevoli.
Non conoscendo i dettagli dell'operatività di questa persona e non avendo a disposizione dati sulla volatilità implicita non ho potuto tracciare equity lines, sarà poi lui a valutare la bontà delle previsioni. Io ho considerato profittevoli i trade in cui il forecast è in grado di individuare la direzione della variazione di volatilità rispetto al valore corrente, come se ad esempio volessi tradare futures sul vix.
Sono state utilizzate due soglie di attivazione: ossia ho provato a vedere cosa succedeva utilizzando solo i forecast che differiscono dalla volatilità corrente di almeno 0.05 e poi di 0.1.
Codice:
th = 0 th = 0.05 th = 0.1
trades hits rate trades hits rate trades hits rate
Apple Inc 50 30 60% 27 19 70% 14 10 71%
E.I. Du Pont 39 22 56% 20 12 60% 9 6 67%
Duke Energy Corp 36 19 53% 6 6 100% 2 2 100%
Exxon Mobil Corp 39 26 67% 14 9 64% 5 4 80%
General Electric 38 26 68% 21 16 76% 7 6 86%
Johnson & Johnson 39 23 59% 13 9 69% 3 2 67%
Procter & Gamble 39 23 59% 13 11 85% 2 2 100%
Walt Disney Comp 38 26 68% 20 13 65% 14 10 71%
Wells Fargo & Co 57 32 56% 34 18 53% 19 11 58%
Tot 375 227 61% 168 113 67% 75 53 71%
Quello che mi colpisce è l'omogeneità dei risultati in un periodo di tempo così ampio e su un insieme di titoli che raccoglie tutti i settori di sp500. Il risultato in sé è buono ma non eccezionale, si può ottenere di meglio con approcci più intelligenti. Inoltre si potrebbe pensare a una ulteriore ottimizzazione, già solo non considerando il singolo titolo andato peggio (Wells Fargo & Co) si sale al 75% di accuratezza. Da notare inoltre che il sistema reagisce con regolarità alle soglie di attivazione e che è un primissimo tentativo con topologie delle reti prive di ricorrenze e di input polinomiali di più alto ordine.
Alla luce di questo lavoro mi sento di poter azzardare che la volatilità dei titoli americani si lascia prevedere anche solo cercando una relazione diretta tra i suoi valori passati e quelli futuri.
Caso 2
Un broker estero di opzioni binarie mi ha chiesto di progettargli nel modo più semplice possibile una funzione che esprimesse la probabilità per un'opzione di finire in the money. In questo modo può modificare il prezzo di esercizio delle opzioni in modo da mantenere costante il valore atteso della casa anche quando il mercato diventa particolarmente prevedibile per via di forti trend in un contesto di gestione del rischio. Tra parentesi il valore atteso della casa è già di per sé astronomico e ben oltre qualsiasi soglia morale, se l'investitore/scommettitore vince guadagna 75, se perde perde 100.
Questioni morali a parte, sulle prime ho rifiutato la commessa spiegando che c'è poco da trovare probabilità su un'opzione che scade tra 30 secondi o un minuto e che se anche fosse possibile di certo non se ne viene a capo con un modello universale da applicare ovunque indiscriminatamente tra valute, commodities e altro.
Mi è stato risposto di provare lo stesso. Ho provato.
Visto che mi è stato chiesto di usare modelli molto semplici e visto che l'algo avrebbe dovuto girare sui loro server non ho potuto utilizzare il mio framework solito.
Ho scritto un semplice algoritmo basato su regressioni lineari. L'idea è fittare una regressione lineare agli ultimi n prezzi di un asset, calcolare l'errore quadratico medio commesso, assumere una distribuzione normale di questo errore (assunto non ragionevole il più delle volte) e su queste ipotesi calcolare la probabilità di un prezzo futuro più alto o più basso del prezzo corrente dell'asset.
In realtà era un poco più complicato di così perché in questo modo a causa dell'estrema varianza dei prezzi si può verificare una probabilità in contrasto con il trend rilevato ma l'idea di base era questa.
Mi hanno fornito una settimana di dati intraday tick by tick sull'eurodollaro per fare qualche prova. Io ero già pronto col "ve l'avevo detto" quando vengono fuori i seguenti risultati:
con regressioni lineari addestrate ad ogni tick, per una settimana, sugli ultimi 30 minuti di dati e un forecast 10 minuti avanti, considerando di entrare a mercato solo quando il sistema produce una probabilità prossima al 100% vengono selezionate circa 200 operazioni in una settimana di cui più del 95% in the money...
Questo ha stupito tanto me quanto loro. Ovviamente non mi illudo che sia un risultato replicabile su periodi più lunghi e su asset diversi, al contrario del risultato precedente, meno eclatante ma di certo più solido e significativo, però ecco di sicuro varrà la pena fare ulteriori indagini.
Epilogo
La morale di queste due storielle è che se anche personalmente non consiglierei di buttarsi nei mercati con qualche trading system che si limiti a cercare una relazione tra i prezzi passati e quelli futuri, a volte anche approcci un po' ingenui come questo possono essere solidi e funzionare.
Buon anno!
Ultima modifica: