Introduzione al Deep Learning Trading in Hedge Fund
Pubblicato: 2022-03-11Negli ultimi anni, le reti neurali profonde sono diventate estremamente popolari. Questo campo emergente dell'informatica è stato creato attorno al concetto di reti neurali biologiche e oggi il deep learning è diventato una sorta di parola d'ordine.
Scienziati e ingegneri del deep learning cercano di descrivere matematicamente vari modelli del sistema nervoso biologico. I sistemi di deep learning sono stati applicati a vari problemi: visione artificiale, riconoscimento vocale, elaborazione del linguaggio naturale, traduzione automatica e altro ancora. È interessante ed entusiasmante che in alcune attività il deep learning abbia superato gli esperti umani. Oggi daremo un'occhiata al deep learning nel settore finanziario.
Una delle applicazioni più interessanti del deep learning è negli hedge fund. Gli hedge fund sono fondi di investimento, organizzazioni finanziarie che raccolgono fondi dagli investitori e li gestiscono. Di solito lavorano con i dati delle serie temporali e cercano di fare alcune previsioni. Esiste un tipo speciale di architettura di deep learning adatta per l'analisi delle serie temporali: le reti neurali ricorrenti (RNN) o, ancora più specificamente, un tipo speciale di rete neurale ricorrente: le reti di memoria a breve termine (LSTM).
Gli LSTM sono in grado di acquisire le caratteristiche più importanti dai dati di serie temporali e di modellarne le dipendenze. Un modello di previsione del prezzo delle azioni viene presentato come un caso di studio illustrativo su come gli hedge fund possono utilizzare tali sistemi. Il framework PyTorch, scritto in Python, viene utilizzato per addestrare il modello, progettare esperimenti e disegnare i risultati.
Inizieremo con alcune nozioni di base sul deep learning prima di passare a esempi del mondo reale:
- Introduci il deep learning come un concetto astratto.
- Introduci gli RNN, o, più specificamente, gli LSTM e come possono essere utilizzati per modellare i dati delle serie temporali.
- Familiarizzare i lettori con i dati finanziari adatti al deep learning.
- Illustra come un vero hedge fund utilizza il deep learning per prevedere i prezzi delle azioni.
- Infine, fornire raccomandazioni attuabili per hedge fund nuovi ed esistenti su come utilizzare/sfruttare il deep learning per aumentare le proprie prestazioni.
Presentando il caso per il trading di apprendimento profondo
Uno dei compiti più impegnativi ed entusiasmanti nel settore finanziario è prevedere se i prezzi delle azioni aumenteranno o scenderanno in futuro. Oggi siamo consapevoli che gli algoritmi di deep learning sono molto bravi a risolvere compiti complessi, quindi vale la pena provare a sperimentare i sistemi di deep learning per vedere se possono risolvere con successo il problema della previsione dei prezzi futuri.
Come concetto, la rete neurale artificiale esiste da molto tempo, ma l'hardware non era abbastanza buono per consentire esperimenti veloci di deep learning. Nvidia ha contribuito a rivoluzionare le reti di deep learning dieci anni fa, quando ha iniziato a offrire unità di elaborazione grafica (GPU) molto veloci per l'elaborazione generica nei prodotti della serie Tesla. Invece di ombreggiare i poligoni nei giochi e nelle applicazioni di progettazione professionale, le GPU altamente parallelizzate possono calcolare anche altri dati e, in molti casi, sono di gran lunga superiori alle CPU.
Ci sono pochissimi articoli scientifici sull'utilizzo del deep learning in finanza, ma la domanda di esperti di deep learning da parte delle aziende fintech è forte, poiché ovviamente ne riconoscono il potenziale. Questo articolo aiuterà a spiegare perché il deep learning in finanza sta diventando sempre più popolare, delineando come i dati finanziari vengono utilizzati nella costruzione di sistemi di deep learning. Verrà inoltre presentato un tipo speciale di rete neurale ricorrente, la rete LSTM. Delineeremo come un compito relativo alla finanza può essere risolto utilizzando reti neurali ricorrenti.
Questo articolo presenta anche un caso di studio illustrativo su come gli hedge fund possono utilizzare tali sistemi, presentato attraverso esperimenti. Considereremo anche come migliorare i sistemi di deep learning e come gli hedge fund possono assumere talenti per costruire quei sistemi, ad esempio, che tipo di background deve avere il talento di deep learning.
Cosa rende gli hedge fund diversi
Prima di passare all'aspetto tecnico del problema, dobbiamo spiegare cosa rende unici gli hedge fund. Allora, cos'è un hedge fund?
Un hedge fund è un fondo di investimento, un'organizzazione finanziaria che raccoglie fondi dagli investitori e li colloca in investimenti a breve e lungo termine o in diversi prodotti finanziari. Di solito è costituita come una società in accomandita semplice o una società a responsabilità limitata. L'obiettivo di un hedge fund è massimizzare i rendimenti. Un rendimento è un guadagno o una perdita nel patrimonio netto degli hedge fund in un determinato periodo di tempo. È generalmente accettato che quando si assume più rischi, c'è un maggiore potenziale per maggiori rendimenti e perdite.
Per ottenere buoni rendimenti, gli hedge fund si affidano a vari tipi di strategie di investimento, cercando di fare soldi sfruttando le inefficienze del mercato. A causa di vari tipi di strategie di investimento non consentite nei fondi di investimento ordinari, gli hedge fund non sono registrati come fondi, ovvero di solito non sono controllati dallo stato come gli altri fondi. Non hanno bisogno di pubblicare le loro strategie di investimento e risultati aziendali, il che può renderli piuttosto rischiosi. Alcuni hedge fund generano più denaro rispetto alla media del mercato, ma alcuni perdono denaro. Alcuni di essi portano risultati permanenti, mentre alcuni dei risultati degli hedge fund sono variabili.
Investendo in hedge fund, gli investitori aumentano il patrimonio netto del fondo. Tuttavia, non tutti possono investire in hedge fund. Gli hedge fund sono destinati a un piccolo numero di investitori facoltosi. Di solito, coloro che vogliono partecipare agli hedge fund devono essere accreditati. Ciò significa che devono avere uno status speciale per quanto riguarda le leggi sulla regolamentazione finanziaria. C'è una distinzione da paese a paese per quanto riguarda chi può avere quello status speciale. Di solito, il patrimonio netto di un investitore deve essere molto alto: non solo gli individui, ma anche le banche e le grandi società possono operare in hedge fund. Tale accreditamento è progettato per consentire la partecipazione solo a soggetti con una conoscenza significativa degli investimenti, proteggendo così dal rischio gli investitori piccoli e inesperti.
Questo articolo considera il quadro normativo degli Stati Uniti, poiché gli Stati Uniti hanno il mercato finanziario più sviluppato al mondo. Quindi, negli Stati Uniti d'America, il termine "investitore accreditato" è definito nella Rule 501 della Regulation D della US Securities and Exchange Commission (SEC).
Secondo tale regolamento, gli investitori accreditati possono essere:
- Banche
- Società private di sviluppo del business
- Organizzazioni
- Amministratori, funzionari esecutivi e soci accomandatari degli emittenti dei titoli offerti o venduti
- Persone fisiche il cui patrimonio netto individuale, o congiunto con il coniuge di quella persona, supera $ 1.000.000
- Persone fisiche che hanno avuto un reddito individuale superiore a $ 200.000 in ciascuno degli ultimi due anni o un reddito congiunto con il coniuge di quella persona superiore a $ 300.000 in ciascuno di quegli anni e hanno una ragionevole aspettativa di raggiungere lo stesso livello di reddito nell'anno in corso
- Trust con un patrimonio totale superiore a $ 5.000.000
- Entità in cui tutti i proprietari di azioni sono investitori accreditati
I gestori di hedge fund gestiscono l'hedge fund. Un gestore di hedge fund deve trovare un modo per creare un vantaggio competitivo per avere successo, ovvero per creare un vantaggio sui rivali e la capacità di generare maggiore valore. Può essere una scelta professionale molto interessante, in quanto può essere molto redditizia se un individuo eccelle nella gestione del fondo.
D'altra parte, se molte decisioni dei gestori di hedge fund si rivelano sbagliate, non verranno pagate e guadagneranno una reputazione negativa. I migliori gestori di hedge fund costituiscono una delle professioni meglio pagate in tutti i settori. I gestori di hedge fund ottengono una percentuale dei rendimenti che guadagnano per gli investitori, oltre alla commissione di gestione. Questa modalità di compensazione fa sì che i gestori di hedge fund investano in modo più aggressivo al fine di ottenere maggiori rendimenti, ma d'altro canto, ciò porta anche a un aumento del rischio dell'investitore.
Una breve storia di hedge fund
Il primo hedge fund è apparso nel 1949, fondato dall'ex scrittore e sociologo Alfred Winslow Jones. Fu mentre scriveva un articolo sulle attuali tendenze di investimento per Fortune, nel 1948.
Ha cercato di gestire i soldi e ha avuto molto successo. Ha raccolto fondi utilizzando la sua innovazione di investimento, che ora è ampiamente conosciuta come long/short equity. La strategia è ancora molto popolare tra gli hedge fund. Le azioni possono essere acquistate (compra: lungo) o vendute (vendi: breve).
Quando il prezzo di un'azione è basso e ci si aspetta che il prezzo di un'azione salga, è logico acquistare un'azione (long) e venderla (short) non appena raggiunge il picco massimo di prezzo, e che è esattamente il punto dell'innovazione realizzata da Alfred Winslow Jones: assumere posizioni lunghe in titoli che dovrebbero apprezzarsi e posizioni corte in titoli che dovrebbero diminuire.
Dati finanziari e set di dati
I dati finanziari appartengono ai dati delle serie temporali. Una serie temporale è una serie di punti dati indicizzati nel tempo. Di solito, una serie temporale è una sequenza presa in punti temporali successivi equidistanti: una sequenza di dati a tempo discreto. Esempi di serie temporali sono l'altezza delle maree oceaniche, il conteggio delle macchie solari e il valore di chiusura giornaliero del Dow Jones Industrial Average.
I dati storici in questo contesto sono dati di serie temporali del passato. È una delle parti più importanti e più preziose per speculare sui prezzi futuri. Esistono alcuni set di dati disponibili pubblicamente online, ma in genere tali dati non contengono molte funzionalità: di solito sono dati a intervalli di 1 giorno, dati a intervalli di 1 ora o dati a intervalli di 1 minuto.
I set di dati con funzionalità più complete e su intervalli di tempo più piccoli di solito non sono disponibili pubblicamente e possono essere molto costosi da ottenere. Intervalli più piccoli significano più dati di serie temporali in un periodo fisso: in un anno ci sono 365 (o 366) giorni, quindi sono disponibili un massimo di 365 (o 366) punti dati. Ogni giorno ha 24 ore, quindi in un anno sono disponibili 8.760 (o 8.784) punti dati orari e ogni giorno ha 86.400 minuti, quindi in un anno sono disponibili 525.600 (o 527.040) punti dati minuti.
Con più dati, più informazioni sono disponibili, e con più informazioni, è possibile trarre conclusioni migliori su ciò che accadrà nel prossimo periodo di tempo, supponendo, ovviamente, che i dati consistono in una caratteristica sufficientemente buona da generalizzare bene. I dati sui prezzi delle azioni dal 2007 al 2008, al culmine della crisi finanziaria globale, sono distorti e probabilmente non rilevanti per fare previsioni sui prezzi in questi giorni. Con un intervallo di tempo più piccolo, è più facile prevedere cosa accadrà dopo a causa di molti punti dati in un intervallo fisso. È più facile prevedere cosa accadrà nel prossimo nanosecondo se disponiamo di tutti i punti dati per ogni nanosecondo in un intervallo fisso di n anni rispetto a ciò che accadrà sul mercato azionario l'anno prossimo se disponiamo di tutti gli n punti dati per ogni anno in un intervallo fisso di n anni.
Tuttavia, ciò non significa che, supponendo che una serie rapida di previsioni a breve termine sia corretta, anche la previsione a lungo termine dovrebbe essere corretta. Ogni previsione introduce un errore e, concatenando più previsioni, la previsione a lungo termine conterrà una quantità significativa di errore alla fine e sarà inutile. Di seguito è riportato un esempio di dati di intervallo di 1 giorno per le condivisioni Google raccolte online da Yahoo Finance.
Ci sono solo alcune colonne nel set di dati: Data, Apertura, Massima, Minima e Chiusura, rispettivamente il prezzo al quale un titolo viene scambiato per la prima volta all'apertura di una borsa valori, il prezzo più alto che il titolo ha raggiunto in un determinato giorno di negoziazione , il prezzo più basso raggiunto in un determinato giorno di negoziazione e il prezzo finale al quale un titolo viene negoziato quel giorno.
Di solito, ci sono altre due colonne in tali set di dati: Chiusura aggiustata e Volume, ma non sono rilevanti qui. La chiusura rettificata è il prezzo di chiusura dopo gli aggiustamenti per le divisioni e le distribuzioni di dividendi applicabili, mentre il volume è il numero di azioni negoziate sul mercato durante un determinato periodo di tempo.
Puoi vedere che mancano alcune date. Questi sono i giorni in cui la borsa non funziona, di solito durante i fine settimana e i giorni festivi. Ai fini della nostra dimostrazione dell'algoritmo di deep learning, i giorni mancanti vengono integrati con il prezzo precedentemente disponibile. Ad esempio, i prezzi di chiusura per 2010-01-16, 2010-01-17, 2010-01-18 saranno tutti 288.126007 perché è quello che era il 2010-01-15. È importante per il nostro algoritmo che i dati siano privi di lacune in modo da non confonderli. L'algoritmo di deep learning potrebbe imparare da qui quando sono i fine settimana e i giorni festivi, ad esempio apprenderà che dopo cinque giorni lavorativi devono esserci due giorni con prezzi forfettari dall'ultimo giorno lavorativo.
Questo è un grafico dei movimenti dei prezzi delle azioni di Google dal 04-01-2010. Nota che solo i giorni di negoziazione vengono utilizzati per tracciare il grafico.
Che cos'è l'apprendimento profondo?
Il deep learning fa parte del machine learning e si basa sulle rappresentazioni dei dati di apprendimento. L'apprendimento automatico esamina algoritmi la cui funzionalità non è programmata ma appresa dai dati. È essenzialmente un approccio all'intelligenza artificiale.
Il deep learning è stato applicato a vari campi: visione artificiale, riconoscimento vocale, elaborazione del linguaggio naturale, traduzione automatica e in alcune di queste attività ha raggiunto prestazioni superiori a quelle umane.
Una rete neurale profonda è al centro del deep learning. L'esempio più semplice e basilare di una rete neurale profonda è una rete neurale feedforward. Di seguito è riportata un'immagine di una semplice rete neurale feedforward. È costituito dai livelli di input e output e dai livelli nascosti.
I livelli nascosti sono tutti i livelli tra i livelli di input e di output. Diciamo che una rete neurale è profonda se ha più di uno strato nascosto. Ogni strato è costituito da vari numeri di neuroni. Gli strati in questa rete neurale feedforward di base sono chiamati strati lineari: i neuroni nello strato lineare moltiplicano solo i valori degli input 1-D (o 2-D se i dati vengono inviati attraverso la rete in batch) con il peso appropriato, sommano i prodotti e dare il risultato finale come output 1-D o 2-D.
La funzione di attivazione viene solitamente applicata nelle reti feedforward per introdurre non linearità in modo che la rete possa modellare problemi più complessi e non lineari. Nelle reti feedforward, i dati fluiscono dal livello di input al livello di output senza tornare indietro. Le connessioni tra i neuroni sono ponderate. I pesi devono essere regolati in modo che la rete neurale restituisca output corretti per gli input dati. La rete feedforward mappa i dati dallo spazio di input allo spazio di output. I livelli nascosti estraggono caratteristiche importanti e più astratte dalle caratteristiche del livello precedente.
La pipeline generale di deep learning è la stessa della pipeline di machine learning e consiste nei seguenti passaggi:
- Raccolta dati. I dati sono separati in tre parti: dati di training, dati di convalida e dati di test.
- Addestramento del DNN utilizzando i dati di addestramento su un numero di "epoche" (ciascuna composta da un numero di iterazioni) e convalida dopo ogni epoca utilizzando i dati di convalida.
- Testare il modello (un'istanza di una rete neurale con parametri fissi) dopo la sequenza di sessioni di training e validazioni.
Allenare la rete neurale significa in realtà regolare i pesi tra le coppie di neuroni riducendo al minimo la funzione di perdita utilizzando un algoritmo di backpropagation in combinazione con la discesa del gradiente stocastico. Fatta eccezione per i pesi determinati attraverso il processo di apprendimento, gli algoritmi di deep learning richiedono solitamente l'impostazione degli iperparametri, parametri che non vengono appresi ma fissi prima dell'apprendimento. Gli iperparametri sono il numero di livelli, il numero di neuroni nei livelli, i tipi di livelli, i tipi di neuroni e l'inizializzazione del peso.
Ci sono restrizioni hardware nell'impostazione degli iperparametri; attualmente non è fisicamente possibile impostare un trilione di neuroni su una singola GPU. Il secondo problema per la ricerca esauriente dell'iperparametro è l'esplosione combinatoria; non è possibile cercare tutte le possibili combinazioni di iperparametri perché ci vorrebbe un tempo infinito. Per questo motivo, gli iperparametri vengono impostati in modo casuale o utilizzando alcune euristiche ed esempi ben noti descritti in articoli scientifici: uno degli iperparametri utilizzati per l'analisi dei dati finanziari mostrati più avanti in questo post del blog è l'uso di neuroni ricorrenti, come scienziati e ingegneri hanno dimostrato che funzionano bene con i dati delle serie temporali. Di solito, il modo migliore per vedere se gli iperparametri per un dato problema sono buoni o meno è attraverso esperimenti.
Lo scopo dell'addestramento è fare in modo che le reti neurali si adattino ai dati di addestramento. Sia la convalida del modello, che viene eseguita dopo ogni fase di addestramento, sia il test del modello, che viene eseguito dopo l'intera procedura di addestramento, vengono eseguiti per vedere se il modello può generalizzare bene. La generalizzazione significa che la rete neurale può fare buone previsioni su dati nuovi e invisibili.
Esistono due termini importanti relativi alla selezione del modello: overfitting e underfitting . Se una rete neurale è troppo complessa per quanto riguarda i dati su cui è addestrata, se ha troppi parametri (troppi livelli e/o troppi neuroni in livelli), la rete neurale può sovradimensionare i dati. Può adattarsi bene ai dati di addestramento perché ha una capacità più che sufficiente per adattarsi a tutti i dati, ma le prestazioni sulla convalida e sui set di test sono scarse.

Se la rete neurale è troppo semplice per quanto riguarda i dati su cui è stata addestrata, la rete neurale può non adattarsi ai dati. In tal caso, la rete neurale ha scarse prestazioni su addestramento, convalida e set di test perché la sua capacità non è sufficientemente buona per adattarsi ai dati di addestramento e per generalizzare. Nell'immagine sottostante, questi termini sono spiegati graficamente. La linea blu rappresenta ciò che è modellato dalla rete neurale. La prima immagine mostra la situazione in cui ci sono pochi parametri della rete neurale, non sufficienti per adattarsi ai dati di addestramento e per generalizzare. La seconda immagine mostra la situazione in cui c'è il numero ottimale di parametri e la rete neurale può generalizzare bene su dati invisibili, e la terza immagine mostra la situazione in cui il numero di parametri di una rete neurale è troppo grande e la rete neurale può perfettamente adatta tutti i dati del set di addestramento, ma ha scarse prestazioni sui set di convalida e test.
Reti neurali ricorrenti
Una versione più complicata di una rete neurale è una rete neurale ricorrente. Nelle reti neurali ricorrenti, i dati possono fluire in qualsiasi direzione, al contrario delle reti neurali feedforward. Possono imparare bene le dipendenze delle serie temporali. L'architettura di una rete neurale ricorrente generale è mostrata nell'immagine seguente.
Nell'immagine sottostante è mostrato un neurone ricorrente. Prende X_{t} , punto nel tempo t , come input e restituisce h_{t} , stato nascosto nel tempo t , come uscita. L'output nascosto viene propagato al neurone. Il neurone ricorrente può essere srotolato poiché è mostrato sulla stessa immagine dal lato destro. X_{t_0} è un punto nel periodo di tempo t_{0} , X_{t_1} nel periodo di tempo t_{1} e X_{t} nel periodo di tempo t . Gli output ottenuti utilizzando gli input X_{t_0} , X_{t_1} , …, X_{t_n} nei periodi di tempo t_{0} , t_{1} , …, t_{n} sono i cosiddetti output nascosti: h_{t_0} , h_{t_1} , …, h_{t_n} , rispettivamente.
Una delle migliori architetture di reti neurali ricorrenti è l'architettura LSTM. LSTM è mostrato di seguito:
Gli LSTM hanno la stessa struttura generale delle reti neurali ricorrenti generali, ma il neurone ricorrente è leggermente diverso con una struttura più complessa. Si può vedere dall'immagine sopra che molti calcoli vengono eseguiti all'interno di una cella LSTM. Le celle LSTM possono essere osservate come una scatola nera nel contesto di questo post, ma per i lettori più curiosi, questo fantastico post sul blog spiega i calcoli all'interno degli LSTM e molto altro.
Chiamiamo l'input per la rete neurale un "vettore di funzionalità". È un vettore n -dimensionale i cui elementi sono caratteristiche: f_{0} , f_{1} , f_{2} …, f_{n} .
\vv{X} = [f_{0}, f_{1}, f_{2}, …, f_{n}] Ora, spieghiamo come le reti neurali ricorrenti possono essere applicate a un'attività legata alla finanza. L'input per la rete neurale ricorrente è [X_{t_0}, X_{t_1}, X_{t_2}, …, X_{t_n}] . Diciamo che n = 5 . Prendiamo cinque prezzi delle azioni Google Close da cinque giorni consecutivi (vedi la tabella con i dati di apertura/massimo/minimo/chiusura sopra) tra, diciamo, 2010-01-04 e 2010-01-08, ovvero [[311.35], [309.98], [302.16], [295.13], [299.06]] . Il vettore di feature in questo esempio è unidimensionale. La sequenza temporale è composta da cinque di questi vettori di caratteristiche. Gli output della rete neurale ricorrente sono funzioni nascoste [h_{t_0}, h_{t_1}, h_{t_2}, …, h_{t_n}] . Tali caratteristiche sono a un livello più astratto rispetto alle funzioni di input [X_{t_0}, X_{t_1}, X_{t_2}, …, X_{t_n}] —LSTM dovrebbe apprendere le parti importanti delle funzioni di input e proiettarle su lo spazio delle caratteristiche nascoste. Quelle caratteristiche nascoste e astratte possono essere propagate nella cella LSTM successiva, che fornirà la serie successiva di caratteristiche nascoste e più astratte che possono quindi essere nuovamente propagate alla LSTM successiva e così via. Dopo la sequenza di LSTM concatenati, il componente finale della rete neurale è lo strato lineare (la parte costitutiva della semplice rete feedforward spiegata nella sezione precedente) che mappa le caratteristiche nascoste dall'ultimo LSTM al punto in uno spazio unidimensionale, e quel punto è l'output finale della rete, il prezzo di chiusura previsto nel periodo di tempo X_{t+1} . La verità fondamentale in questo esempio per X_{t+1} è 298.61 .
Nota: può esserci anche un minimo di un LSTM: l'impostazione del numero di LSTM è un iperparametro, che generalmente si trova empiricamente, sebbene possiamo usare alcune euristiche. Se i dati non sono così complessi, utilizziamo un'architettura meno complessa in modo che il modello non superi i dati. Se i dati sono complessi, utilizziamo un modello complesso in modo che il modello non si adatti ai dati.
Nella fase di addestramento, i prezzi di chiusura previsti vengono confrontati con i prezzi di verità di base e la differenza tra i prezzi di chiusura previsti e i prezzi di verità di base viene ridotta al minimo utilizzando un algoritmo di backpropagation e un algoritmo di ottimizzazione della discesa del gradiente (o una delle sue forme, concretamente, in questo blog, viene utilizzata la cosiddetta versione “Adam” di un algoritmo di ottimizzazione della discesa del gradiente) modificando i pesi della rete neurale.
Dopo la formazione e il test, in futuro, l'utente deve solo fornire dati di input alla rete neurale e questa restituirà il prezzo previsto (e, si spera, un prezzo molto vicino al prezzo reale del futuro).
Un'altra cosa da menzionare qui è che, di solito, i batch di dati vengono inviati attraverso la rete, sia durante l'addestramento che nelle fasi di test, affinché la rete calcoli più output in un solo passaggio.
Di seguito un'immagine di un'architettura utilizzata in questo blog per gli esperimenti. È costituito da due LSTM impilati e uno strato lineare.
Esperimenti con algoritmi di hedge fund
Prova a utilizzare strategie di trading algoritmiche così semplici, come segue: se l'algoritmo prevede che il prezzo salirà il giorno successivo, acquista n ( n = 1 in questo esempio) azioni di una società (long), altrimenti vendi tutte le azioni di un compagnia (breve). Il valore iniziale del portafoglio (il valore di contanti e azioni combinati) è fissato a $ 100.000. Ogni azione lunga o corta acquisterà n azioni di una società (Google, in questo esempio) o venderà tutte le azioni di una società, rispettivamente. All'inizio, il sistema possiede 0 azioni di una determinata società.
Ricorda sempre che questo è un esempio molto semplice e di base, non pensato per l'uso nel mondo reale, poiché sarebbe necessario molto più lavoro di ricerca e sviluppo per modificare il modello in modo che funzioni bene nella pratica. Qui vengono trascurate alcune cose che dovrebbero essere considerate in uno scenario del mondo reale; ad esempio, le commissioni di transazione non sono incorporate nel modello. Si presume che il sistema possa negoziare esattamente alla stessa ora ogni giorno e si presume che ogni giorno, anche nei fine settimana o nei giorni festivi, sia un giorno di negoziazione.
Per il test viene utilizzato un metodo di backtesting. Il metodo del backtesting utilizza i dati storici per ricostruire operazioni che sarebbero avvenute in passato utilizzando le regole definite con la strategia che viene sviluppata. Il set di dati è suddiviso in due parti: la prima parte è il set di addestramento (passato) e la seconda parte è il set di test (futuro). Il modello viene addestrato su un set di addestramento e, dopo l'addestramento, simuliamo il futuro sulla seconda parte del set di dati per vedere come si sarebbe comportato il modello addestrato in futuro senza essere addestrato su di esso.
La metrica per valutare la strategia di trading è lo Sharpe ratio (la sua versione annualizzata, supponendo che tutti i giorni di un anno siano giorni di negoziazione e l'anno abbia 365 giorni: sqrt(365)*mean(returns)/std(returns)) , dove il rendimento è definito come p_{t}/p_{t-1} - 1 e p_{t} è il prezzo nel periodo di tempo t . L'indice di Sharpe mostra il rapporto tra i rendimenti e il rischio aggiuntivo che si corre, quindi è bene avere un rapporto di Sharpe più grande. Normalmente, un rapporto maggiore di 1 è accettabile dagli investitori, 2 è molto buono e 3 è eccellente.
Solo il prezzo di chiusura giornaliero, dei prezzi storici di Google dal set di dati di Yahoo Finance, viene utilizzato come funzionalità. Altre funzionalità aiuteranno, ma non rientra nell'ambito di questo blog testare quali altre funzionalità del set di dati (Aperto, Alto, Basso) sono importanti. Potrebbero essere utili anche alcune altre caratteristiche non incluse nella tabella, ad esempio il sentimento delle notizie in un particolare minuto o eventi importanti in un determinato giorno. Tuttavia, a volte è molto difficile creare rappresentazioni dei dati utili per l'input della rete neurale e combinarle con le funzionalità esistenti. Ad esempio, è facile estendere il vettore di funzionalità e inserire un numero che rappresenti il sentimento delle notizie o il sentimento del tweet di Trump ( -1 molto negativo, 0 neutro, +1 molto positivo, ecc.) per ogni dato periodo di tempo, ma non lo è così facile inserire particolari momenti guidati da eventi (pirati nel canale di Suez, bomba in una raffineria in Texas) nel vettore delle caratteristiche perché, per ogni momento specifico, dovremo avere un elemento aggiuntivo nel vettore delle caratteristiche per inserire 1 se l'evento è accaduto o 0 altrimenti, che porterà a un numero infinito di elementi per tutti i momenti possibili.
Per quel dato più difficile, potremmo definire delle categorie e, per ogni momento, determinare a quale categoria appartiene. Potremmo anche aggiungere funzionalità dalle azioni di altre società per un sistema per apprendere la correlazione tra i prezzi delle azioni di diverse società. Inoltre, esiste un tipo di rete neurale specializzata per la visione artificiale, le reti neurali convoluzionali, che sarebbe interessante combinare con livelli ricorrenti e vedere come le caratteristiche visive sono correlate ai prezzi di alcune aziende. Forse potremmo usare il feed della telecamera da una stazione ferroviaria affollata come funzione e collegare quel feed a una rete neurale e vedere se ciò che vede la rete neurale è correlato ai prezzi delle azioni di alcune società: potrebbero esserci delle conoscenze nascoste anche in questo esempio banale e assurdo.
Di seguito è riportato un grafico che mostra come la perdita media di allenamento diminuisce nel tempo, il che significa che la rete neurale ha una capacità sufficiente per adattarsi ai dati di allenamento. È importante dire che i dati devono essere normalizzati in modo che l'algoritmo di deep learning possa convergere.
Di seguito è riportato un grafico che mostra come la perdita media del test diminuisce nel tempo, il che significa che la rete neurale ha la capacità di generalizzare su dati invisibili.
L'algoritmo è avido; se prevede che il prezzo aumenterà il giorno successivo, l'algoritmo acquista immediatamente n=1 azione di una società (se c'è abbastanza liquidità in portafoglio) e in caso contrario vende tutte le azioni della società (se ne ha ). Il periodo di investimento è fisso e richiede 300 giorni. Dopo 300 giorni, tutte le azioni vengono vendute. La simulazione su dati invisibili, dopo un po' di addestramento, può essere vista di seguito. Viene mostrato come il valore del portafoglio aumenta nel tempo con azioni long/short (o non fare nulla) ogni giorno.
Il rapporto Sharpe per la simulazione sopra è 1,48. Il valore finale del portafoglio dopo 300 giorni è di $ 100.263,79. Se acquistassimo azioni solo il primo giorno e le vendessimo dopo 300 giorni, il portafoglio varrebbe $ 99.988,41.
Di seguito è mostrata una situazione in cui la rete neurale non è ben addestrata e perde denaro dopo un periodo fisso di 300 giorni.
Il rapporto Sharpe è -0,94. Il valore finale del portafoglio dopo 300 giorni è di $ 99.868,36.
Ecco un esempio interessante: l'algoritmo di cui sopra è avido e prevede solo il prezzo per il giorno successivo, agendo solo in base a quella previsione. È possibile concatenare più previsioni e prevedere il prezzo nei prossimi passaggi futuri. Ad esempio, con un primo input di [X_ground_truth_{t0}, X_ground_truth_{t1}, X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}] e il primo output è [X_predicted_{t5}] , possiamo alimentare il rete neurale con quella previsione in modo che l'input successivo sia [X_ground_truth_{t1}, X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}, X_predicted_{t5}] e l'output sia [X_predicted_{t6}] . L'input successivo da lì è [X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}, X_predicted_{t5}, X_predicted_{t6}] che risulta in [X_predicted_{t7}] e così via. Il problema qui è che stiamo introducendo un errore di previsione che aumenta ad ogni nuovo passaggio e alla fine si ottiene un pessimo risultato a lungo termine, come mostrato nell'immagine qui sotto. La previsione all'inizio segue la tendenza decrescente della verità di base, quindi ristagna e peggiora sempre di più nel tempo.
È stata eseguita un'analisi di deep learning molto semplice sui prezzi delle azioni Google, ma può incorporare quasi tutti i set di dati finanziari, a condizione che la quantità di dati sia sufficientemente grande e di buona qualità. I dati devono essere discriminatori e devono descrivere e rappresentare bene il problema.
Avvolgendo
Se funzionasse e si generalizzasse bene su test approfonditi, questo sistema potrebbe consentire ai gestori di hedge fund di speculare sui prezzi futuri delle azioni di una società utilizzando il deep learning e basandosi su strategie di trading algoritmiche.
I gestori di hedge fund potrebbero dare al sistema una somma di denaro da negoziare automaticamente ogni giorno. Tuttavia, sarebbe molto brutto lasciare che gli algoritmi di trading automatizzato commerciano senza alcuna supervisione. Il gestore di hedge fund dovrebbe avere alcune capacità di apprendimento approfondito o assumere qualcuno con le competenze necessarie per supervisionare il sistema e determinare quando il sistema ha perso la capacità di generalizzare e negoziare bene.
If the system lost the ability to generalize, then it would be necessary to retrain it from the beginning and test it again (maybe by introducing more discriminative features or new knowledge—using new data from the past that didn't exist when the model was first trained).
Sometimes, the data is simply not good enough for the deep learning system to be trained and generalize well and, in that case, an experienced deep learning engineer should be able to detect and rectify such a situation. To build a deep learning trading system, you need hedge funds data scientists, machine learning/deep learning experts (both scientists and engineers), R&D engineers familiar with machine learning/deep learning, etc. No matter which part of an application of machine learning they are familiar with, whether it's computer vision or speech recognition, seasoned professionals will be able to put their experience to good use in the financial sector. At its root, deep learning has the same basics regardless of application or industry, and it should be easy for someone experienced to switch from theme to theme.
The system we presented is very basic and, to be applied in the real world, more R&D should be done in order to increase the returns. Possible improvements of the system could be in developing better trading strategies. Collecting more data for training, which is usually very expensive, will help. A smaller time interval between the points is better. Improvements can also surface in using more features (eg, news sentiments or important happenings corresponding to each point in the dataset, despite being hard to code for a neural network) and extensive grid search for hyperparameters and RNN architecture discovery.
Also, more computing power (powerful GPUs are a must) is needed to make a lot of extensive experiments in parallel and to process a large amount of data, provided that a large amount of data is collected.
Riferimenti:
- https://www.datacamp.com/community/tutorials/finance-python-trading
- http://colah.github.io/posts/2015-08-Understanding-LSTMs/
- https://en.wikipedia.org
- https://www.investopedia.com/
- https://finance.yahoo.com/
- http://pytorch.org/
Author's Note: I would like to thank Ivan Capalija and Matej Paradzik for the constructive conversations and advice about deep learning in finance, which helped me in writing this blog.
