Parte 5 - Strategie di trading: l’installazione del pacchetto Zipline
Nella quarta parte della serie di articoli abbiamo visto come creare o installare pacchetti in Python.
In questa parte, svilupperemo le conoscenze e installeremo il pacchetto Zipline, che ci consente di testare rapidamente strategie semplici.
L’approfondimento è a cura di TRADERS’ Magazine Italia
Back testing
Ci sono alcuni ostacoli da superare al fine di generare un back test accettabile. Questo è anche il motivo per cui si dovrebbe affrontare con cautela i presunti esperti di mercato azionario, che lottano per l’attenzione con risultati di back-test fenomenali.
Dopotutto, non ci vuole molta fatica a far risultare un back testing fenomenale, anche se questo non è in realtà il caso. All’inizio, tuttavia, dovremmo spiegare in modo più dettagliato il termine “backtesting”. In tal modo, si applica un processo, un modello, una teoria o una strategia ai dati storici.
La revisione fa l’ipotesi centrale che i dati storici contengano elementi che ci consentono di fare affermazioni sul futuro. Tuttavia, questa ipotesi non è sempre giustificata, motivo per cui alcuni backtest sono completamente inutili.
Overfitting
Sulla strada verso il backtest perfetto si incontreranno diversi problemi. Uno di questi è chiamato “Overfitting” ed è ampiamente utilizzato. Questo è anche il motivo per cui ce ne stiamo occupando in questo articolo. “Overfitting” significa che sono stati identificati più fattori di influenza per un modello di quanti ne esistano realmente.
Si può descrivere l’intera cosa utilizzando l’esempio di un tostapane. Immaginate di essere un bambino curioso seduto sulla sedia mentre la mamma prepara la colazione. Ogni volta che la mamma al mattino mette una fetta di pane nel tostapane, quando esce si ha un ottimo toast alla nutella.
Voi, come bambini, non potete comprendere perché avete davanti a voi questo delizioso toast e perché il pane è improvvisamente così croccante. Quindi, cosa provoca la tostatura della fetta di pane? Combinando i dati da soli, giungerete alla conclusione che avete bisogno della mamma per un toast.
Inoltre, pensate che il mattino o la luminosità siano la ragione del vostro toast. Potrebbe anche essere che crediate che la mamma sia più importante del tostapane per ottenere un pane così croccante. Questo è un chiaro caso di overfitting. Assorbono fattori di influenza insignificanti nel loro modello e quindi eliminano quelli essenziali.
Un esempio nel trading potrebbe essere che sembra più importante se la luna piena fosse stata ieri piuttosto che guardare la prestazione fondamentale del rispettivo titolo. Un tale overfitting può verificarsi se si utilizzano pochi dati, in modo da non poter distinguere i fattori essenziali dai fattori influenti non essenziali. Un altro motivo è una complessità troppo elevata.
Ad esempio, si verifica quando si desidera includere in un modello fattori completamente disgiunti utilizzando regole speciali. Quindi cercano di vedere un contesto dove in realtà nessuno lo è.
La mamma o il momento della giornata non è il motivo per cui il vostro pane è tostato. Un altro esempio di overfitting è quando si utilizza lo stesso record da cui è stata creata una strategia per il backtesting. Si può evitare ciò facendo quanto segue: supponete di avere dati del titolo Apple dal 01/01/2010. Ora possiamo dividerli.
Il primo set di dati è l’area di training e va, ad esempio, dal 01.01.2010 all’01.01.2012. Quindi sviluppiamo una strategia di trading. Tuttavia, ora eseguiamo il backtest di questa strategia con il secondo set di dati, l’area di convalida. Questo va dal 02.01.2012 all’01.01.2019.
Quindi assicuratevi di utilizzare la maggior quantità di dati possibile. Inoltre, non dovreste interpretare troppo i singoli eventi. E infine, ma non meno importante, è fondamentale non rivedere gli stessi dati per una strategia che avete usato per crearla.
Backtesting usando Zipline
Per eseguire il backtest delle nostre semplici strategie di esempio, utilizziamo il pacchetto Zipline Python fornito da Quantopian (società che fornisce una piattaforma agli analisti quantitativi per programmare e utilizzare algoritmi di trading). Possiamo, come discusso nella Parte 4, scaricarlo gratuitamente e poi installarlo. Il vantaggio di Zipline è che è stato scritto in Python ed è relativamente facile da gestire.
Il rovescio della medaglia: Zipline non è uno dei pacchetti di backtesting più completi. Di conseguenza, strategie più complesse potrebbero non essere facili da implementare. Ma questo non è necessario per scopi di apprendimento.
Creare un nuovo ambiente Python
Nella parte precedente, abbiamo solo esaminato la teoria di come creare nuovi ambienti Python. Ora, d’altro canto, ne stiamo praticamente parlando e
creeremo un nuovo ambiente Python in Python versione 3.5 per il pacchetto Zipline. Per fare ciò si avvia, come al solito, il Navigatore Anaconda.
Nel menu a sinistra arriverete al punto “Ambienti”. Nel campo al centro, potete vedere l’ambiente Python “root” già usato. Ora dovete aggiungerne uno nuovo. Potete farlo cliccando su “Create”. Quindi, selezionate la versione di Python desiderata, nel nostro caso 3.5, e date un nome qualsiasi all’ambiente.
Una volta completata questa parte, potete iniziare l’ambiente Python direttamente, come nell’ultimo articolo, cliccando sulla freccia verde e poi su “Open Terminal”. Dopo aver configurato un nuovo ambiente Python, potete scaricare e installare il pacchetto Zipline.
Per fare questo, scrivete “conda install zipline -c Quantopian” nel terminale. Questo comando funziona, come già accennato nell’ultimo articolo, solo con il tag “-c Quantopian”, che dice al gestore del pacchetto conda esattamente dove cercare il pacchetto Zipline.
Gestire Zipline
Se avete installato Zipline, poi potete semplicemente digitare “zipline - help” nel terminale, per vedere quali opzioni e comandi possono essere eseguiti dal pacchetto (vedi figura 1). Utilizzeremo tre di questi quattro comandi in questo articolo. Il primo comando è “bundle” e fa riferimento all’insieme di dati che sono disponibili durante il backtest.
Quindi digitate “zipline bundles” e vedrete l’insieme di dati attualmente disponibili che verranno utilizzati per i vostri backtest. Se volete includere nuovi insiemi di dati nel pacchetto, allora usate “ingest”. D’altra parte “run” entra in gioco quando si esegue un backtest. Ora diamo un’occhiata a come integrare nuovi insiemi di dati in Zipline.
Utilizzare il comando bundle zipline per determinare se esiste l’insieme di dati denominato quantopian-quandl. Se questo è il caso, allora un dato appare a destra di quel nome. Questo non è il caso nel nostro esempio.
Poiché l’insieme di dati forniti non soddisfano le nostre aspettative, dovete prima scaricare i dati sui prezzi pre-impostati da Quantopian e Quandl. Potete, come già indicato sopra, farlo con il comando “ingest”. Il comando: “zipline ingest —help” mostrerà anche le opzioni che potete usare con “ingest”. Per scaricare i dati richiesti, scrivete quanto segue: “zipline ingest -b quantopian-quandl”.
Quindi, il download inizia e potete utilizzare il comando “bundle zipline” per vedere se il download è andato a buon fine. Zipline è ora pronto per essere usato e potete eseguire il backtest sulla vostra prima strategia. Il problema è che non avete ancora programmato una strategia.
Strategia di trading
La semplicità di Python e Zipline ci consente di rivedere facilmente una strategia. Per cominciare, ci concentriamo su due funzioni: “initialize ()” e “handle_data ()”.
La funzione “initialize ()” viene chiamata una volta ad ogni avvio di backtest. Ad esempio, è possibile utilizzare questa funzione per definire i parametri iniziali. La seconda funzione “handle_data ()” viene chiamata durante il backtest con ogni immissione di dati. Pertanto, se si dispone di un record per ogni giorno, ad esempio i dati relativi ai prezzi, la funzione handle_data () viene chiamata di nuovo ogni giorno.
Nell’articolo compreremo un titolo ogni giorno del backtest. Per implementare questo, è richiesto un nuovo file Python. In questo file scrivete “from zipline.api import order, symbol”. Ciò significa che è possibile importare le seguenti funzioni dal pacchetto “ziplin” e dal modulo api: “order ()” e “symbol ()”.
Ad esempio è possibile acquistare azioni con la funzione order (). La funzione richiede i due parametri “asset” e “amount”. Si passano i titoli e il numero di titoli ai parametri “asset” e “amount”, che si desidera acquistare. Con la funzione “simbolo ()”, d’altra parte, è possibile chiamare una condivisione se si vuole passare un’abbreviazione del titolo alla funzione.
Se volete saperne di più sulle funzioni integrate in Zipline, potete utilizzare la documentazione di Quantopian (quantopian.com/help). Nel definire le funzioni “initalize ()” e “handle_data ()” noterete certamente che “context” è impostato come parametro (non inseriremo “dati” ora perché non lo abbiamo usato affatto).
“Context” è un dizionario Python vuoto che viene utilizzato per accedere agli oggetti all’interno delle seguenti funzioni impostate all’interno della funzione “initialize ()”.
Potete anche leggerlo in modo più dettagliato nella documentazione, il resto dovrebbe essere più chiaro con gli esempi. Cercate il codice sorgente nella figura 2.
Eseguire il backtest
Se ora si desidera eseguire l’algoritmo, ritornate al terminale, dove è già stato avviato l’ambiente Python con il pacchetto “zipline”. Qui scrivete il comando “zipline run -f C:/Users/alank/Desktop/test.py —start 2016-1-1 2018/01/01 - end 2018-1-1-b quantopian-quandl”.
Quindi il backtest viene eseguito e si ottiene un output (vedi figura 3). Il file in cui si trova l’algoritmo può essere trovato in questo esempio dal seguente percorso: “C: / Users / alank / Desktop/ test.py”. Il percorso è indicato dall’opzione “-f”. Questo è seguito dalla definizione di “da quando a quando” deve essere eseguito il backtest. Le opzioni “- start” e “—end” sono usate per questo.
Infine, indicate quale insieme di dati dovrebbe essere usato per il backtest. Utilizziamo l’insieme di dati precedentemente scaricato “quantopian-quandl”.
Conclusioni
In questa parte della nostra serie di articoli, abbiamo visto l’installazione di Zipline e l’uso pratico del backtest per darvi una panoramica del processo. Sicuramente avete ancora alcune domande, che saranno chiarite nella prossima parte. Nella prossima parte approfondiremo l’implementazione pratica.
© RIPRODUZIONE RISERVATA