In questa lezione relativa alle basi del trading algoritmico con Python descriviamo le attività necessarie al fine di impostare un ambiente di sviluppo per il trading algoritmico robusto, efficiente ed interattivo. Questo ambiente si basa sulla distribuzione Linux molto conosciuta, come Ubuntu Desktop e il linguaggio di programmazione Python. Utilizzeremo questo ambiente per creare e testare strategie di trading algoritmico.
Per creare un ambiente di sviluppo per il trading algoritmico dobbiamo installe i seguenti strumenti software, tutti open-source e gratuiti da scaricare:
Oracle VirtualBox – Per la virtualizzazione del sistema operativo
Ubuntu Desktop Linux – Come nostro sistema operativo virtuale
Python – l’ambiente principale per la programmazione.
NumPy / SciPy – Per elaborare il calcolo di array / matrice in modo veloce ed efficiente
IPython – Per lo sviluppo interattivo visivo con Python
Matplotlib – Per la visualizzazione grafica dei dati
Pandas – Per il “wrangling” dei dati e analisi delle serie temporali
Scikit-learn – Per il machine learning e gli algoritmi di intelligenza artificiale
Questi strumenti (abbinati ad un efficiente database di asset finanziari) ci permettono di creare un ambiente efficiente ed interattivo per la ricerca di nuove strategie. Pandas è progettato per la “manipolazione” dei dati, potendo importare e ripulire i dati delle serie temporali in modo molto efficiente. Utilizzando NumPy / SciPy possiamo mantenere il sistema ottimizzato e performante. IPython / matplotlib (e la qtconsole descritta di seguito) possiamo avere una visualizzazione interattiva dei risultati e una rapida iterazione. Scikit-learn ci consente di applicare tecniche di machine learning alle nostre strategie per migliorare ulteriormente le prestazioni.
Inoltre abbiamo previsto un tutorial in modo che gli utenti Windows o Mac OSX che non vogliono o non siano in grado di installare direttamente Ubuntu Linux. Gli utenti Windows o Mac OSX possono comunque usare Linux tramite VirtualBox.
VirtualBox ci consente di creare una “Macchina Virtuale” all’interno del sistema host in grado di emulare un sistema operativo guest senza influenzare l’host in alcun modo. In questo modo possiamo testare e sperimentare Ubuntu e gli strumenti di Python prima di eseguire un’installazione completa.
Per coloro che hanno già installato Ubuntu, possono direttamente iniziare dalla sezione “Installare i pacchetti di Python nel sistema Ubuntu“.
Installare VirtualBox e Ubuntu-Linux
Questa sezione del tutorial si concentra sull’installazione di VirtualBox ed è stata scritta per un sistema Mac OSX, ma è adatta anche per ambiente Windows. Una volta installato VirtualBox, la procedura sarà la stessa per qualsiasi sistema operativo host sottostante.
Prima di iniziare l’installazione del software, dobbiamo scaricare sia Ubuntu che VirtualBox.
Scaricare l'immagine ISO di Ubuntu-Linux
Apri il tuo browser web preferito e vai alla homepage di Ubuntu Desktop, e seleziona “Download Ubuntu”:

Scarica l’ultima versione stabile di Ubuntu. Una volta raggiunta la pagina di download, assicurati di selezionarella versione LTS di Ubuntu. Dovrai scegliere se vuoi versione a 32 o 64 bit. È probabile che tu abbia un sistema a 64 bit, ma nel dubbio, scegli 32 bit. Su un sistema Mac OSX l’immagine del disco ISO di Ubuntu Desktop verrà memorizzata nella directory Download. Lo useremo successivamente, dopo aver installato la VirtualBox.
Scaricare l'immagine ISO di Ubuntu-Linux
Ora che abbiamo scaricato Ubuntu, il passo successivo per creare un’ambiente di sviluppo per il trading algoritmico è installare VirtualBox. Dobbiamo procurarci l’ultima versione del software VirtualBox di Oracle. Clicchiamo qui per visitare il sito web e selezionare la versione relativa al tuo specifico sistema host (in questo tutorial abbiamo bisogno della versione per Mac OSX):

Una volta scaricato il file, è necessario eseguirlo e fare clic sull’icona del pacchetto (questo varia leggermente in ambiente Windows ma è un processo simile):

Dopo che il pacchetto è stato aperto, seguiamo le istruzioni di installazione, mantenendo le impostazioni predefinite (a meno che non sentiate la necessità di cambiarle!). Ora che VirtualBox è stato installato possiamo aprirlo dalla cartella Applicazioni (che può essere trovata con Finder). Questo inserisce VirtualBox sul dock delle icone durante l’esecuzione, quindi puoi fissarlo in questa posizione in modo permanente se vuoi esamire e provare Ubuntu Linux Live prima di eseguire l’installazione completa:

A questo punto possiamo creare una nuova “scatola virtuale” (cioè un sistema operativo virtualizzato) facendo clic sull’icona Nuova, che sembra un ingranaggio. Abbiamo chiamato la mia scatola virtuale come “Ubuntu Desktop Algorithmic Trading” (quindi potresti usare qualcosa di simile anche tu!):

Scegliamo la quantità di RAM che desideri allocare al sistema virtuale. Abbiamo impostato 512 Mb poiché questo è solo un sistema di “test”. Per motivi di performance, un vero ambiente per il backtesting deve necessariamente prevedere un’installazione nativa (e quindi allocherà tutta la memoria disponibile per l’hardware utilizzato):

Creiamo quindi un disco rigido virtuale (si consiglia di utilizzare 8Gb) con una VirtualBox Image Box, dinamicamente assegnata, che abbia lo stesso nome dell’immagine virtuale impostata in precedenza:

A questo punto si ottiene un sistema completo, con il seguente elenco delle caratteristiche hardware e software:

Ora dobbiamo dire a VirtualBox di includere un “CD drive” virtuale per la nuova immagine del disco, in modo da poter simulare l’avvio della nostra immagine del sistema Ubuntu da questa unità CD.
Andiamo alla sezione Impostazioni, facciamo clic sulla scheda “Archiviazione” e aggiungiamo un disco. A questo punto dobbiamo selezionare il file ISO dell’immagine del sistema Ubuntu, memorizzato direttamente nei download (o ovunque abbiamo scaricato Ubuntu). Selezioniamo il file e salviamo le impostazioni:

A questo punto siamo pronti per avviare la nostra immagine di Ubuntu ed effettuare l’installazione del sistema operativo. E’ sufficiente fare clic su “Start” e quindi su “OK”.
Verrà quindi visualizzato la schermata di Ubuntu Desktop. Clicca su “Installa Ubuntu”:

Assicuriamoci di selezionare le opzioni corrette per installare i driver delle periferiche come la scheda grafica e il Wi-Fi:

Successivamente viene visualizzata una schermata in cui viene chiesto come si desidera memorizzare i dati creati per il sistema operativo. Non aver paura dell’opzione “Cancella disco e Installa Ubuntu”. Questo NON significa che cancellerà il tuo normale disco fisso!
In realtà si riferisce al disco virtuale che stiamo usando per avviare Ubuntu, che deve essere sicuramente cancellato e formattato (e comunque non ci sono dati al suo interno dato che lo abbiamo appena creato). Continuando con l’installazione e viene presentata una schermata che chiede il fuso orario e, successivamente, il layout della tastiera:

Inseriamo le tue credenziali ed assicuriamoci di ricordare la password scelta perchè è necessaria ogni volta per accedere al sistema e per installare nuovi software e pacchetti:

Dopo aver inserito tutti i dati richiesti, Ubuntu installerà i tutti i file del sistema operativo. Dovrebbe essere un processo relativamente veloce dato che copia i dati dal disco fisso al disco fisso!
Quando questo processo sarà concluso, VirtualBox si riavvierà. Se non si riavvia da solo, possiamo andare sul menu e forzare l’arresto. Al riavvio verrà visualizzata la schermata di login di Ubuntu:

Effettuiamo il login con lo username e la password (che abbiamo inserito in precedenza) e entriamo nel nuovo ambiente Ubuntu:

Installare i pacchetti Python per l'ambiente di sviluppo per il trading algoritmico
Ora che abbiamo installato Ubuntu Desktop, possiamo iniziare ad installare i pacchetti per l’ambiente di sviluppo per il trading algoritmico.
Clicchiamo sul bottone “Search” nell’angolo in alto a sinistra dello schermo e digitiamo “Terminal” nella casella in modo da individuare l’interfaccia per la linea di comandi.
Doppio click sull’icona terminal per avviare il Terminal:

Tutti i comandi successivi dovranno essere digitati in questo terminale.
La prima cosa da fare su qualsiasi nuovo ambiente Ubuntu Linux è fare l’update e l’upgrade dei pacchetti. Il primo ci informa se ci sono aggiornamenti disponibili per Ubuntu, mentre il secondo esegue effettivamente il processo di aggiornamento dei vecchi pacchetti con le versioni più recenti.
Eseguiamo i seguenti comandi (verrà richiesta la password):
sudo apt -y update
sudo apt -y upgrade
Da notare che il prefisso -y specifica ad Ubuntu che vogliamo rispondere ‘yes’ a tutte le domande yes/no del sistema. “sudo” è un comando degli ambienti Ubuntu/Debian Linux che permette di eseguire altri comandi con i privilegi di amministratore. Dato che stiamo installando dei pacchetti per tutto il sistema, abbiamo bisogno dell’accesso ‘root’ alla macchina e per questo dobbiamo usare il comando ‘sudo’.
Dopo che entrambi i comandi sono stati eseguiti e il sistema è stato aggiornato, è necessario installare Python, NumPy / SciPy, matplotlib, panda, scikit-learn e IPython. Inizieremo installando i pacchetti di sviluppo Python e gli strumenti necessari per compilare tutto il software:
sudo apt install python3-pip python-dev python3-dev build-essential liblapack-dev libblas-dev
Una volta installati i pacchetti necessari, possiamo procedere e installare NumPy tramite pip, il gestore di pacchetti Python.
Pip scaricherà un file zip del pacchetto e compilerà il codice sorgente per noi. Ricorda che ci vorrà un po ‘di tempo per compilare, probabilmente 10 minuti!
sudo pip install numpy
Terminata l’installazione di NumPy, è necessario verificare che tutto funzioni correttamente prima di procedere.
Osservando il terminale vediamo il nome utente seguito dal nome del computer. In questo caso è “algotrader@algobox”, seguito dal prompt. Nel prompt dobbiamo digitare python e quindi provare a importare NumPy. Verifichiamo che tutto funzioni calcolando la media aritmetica di una lista di valori:
algotradere@algobox:~$ python
Python 3.6.0 (default, Jan 12 2017, 03:20:26)
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> from numpy import mean
>>> mean([1,2,3])
2.0
>>> exit()
Ora che NumPy è stato installato con successo, vogliamo installare la libreria Python Scientific conosciuta come SciPy.
Questo pacchetto ha alcune dipendenze tra cui la libreria ATLAS e il compilatore GNU Fortran:
sudo apt install libatlas-base-dev gfortran
Ora siamo pronti per installare SciPy tramite il gestore. Ci vorrà molto tempo (circa 10 minuti, a seconda del computer), quindi potrebbe valere la pena andare a prendere un caffè:
sudo pip install scipy
Perfetto! SciPy è stato installato.
Proviamolo calcolando la deviazione standard di un elenco di numeri interi:
algotradere@algobox:~$ python
Python 3.6.0 (default, Jan 12 2017, 03:25:17)
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>> from scipy import std
>>> std([1,2,3])
0.81649658092772603
>>> exit()
Successivamente dobbiamo installare i pacchetti necessari al corretto funzionamento di matplotlib, la libreria di grafi di Python. Dato che matplotlib è un pacchetto Python, non possiamo usare pip per installare le librerie sottostanti per lavorare con PNG, JPEG e font freetype, quindi abbiamo bisogno di Ubuntu per installarli per noi:
sudo apt install libpng-dev libjpeg8-dev libfreetype6-dev
Ora possiamo installare matplotlib:
sudo apt install matplotlib
Passiamo ora ad installare le librerie per l’analisi dei dati e per l’apprendimento automatico, Pandas e Scikit-learn. Non abbiamo bisogno di ulteriori dipendenze in questa fase in quanto sono coperti da NumPy e SciPy:
sudo pip install -U scikit-learn
sudo pip install pandas
algotradere@algobox:~$ python
Python 3.6.0 (default, Jan 12 2017, 03:33:46)
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> iris
..
..
'petal width (cm)']}
>>>
Inoltre possiamo testare il funzionamento di Pandas:
>>> from pandas import DataFrame
>>> pd = DataFrame()
>>> pd
Empty DataFrame
Columns: []
Index: []
>>> exit()
sudo pip install ipython
Nonostante IPython è sufficientemente funzionale anche da solo, può essere reso ancora più potente aggiungendo la qtconsole, che fornisce la possibilità di visualizzare matplotlib in linea. Tuttavia, ci vuole un po ‘più di lavoro per farlo funzionare.
Per prima cosa, dobbiamo installare la libreria Qt. Per questo potrebbe essere necessario aggiornare nuovamente i pacchetti:
sudo apt update
Adesso possiamo installare Qt:
sudo apt-get install libqt4-core libqt4-gui libqt4-dev
La qtconsole ha alcuni pacchetti addizionali, nello specifico le librerie ZMQ e Pygments:
sudo apt-get install libzmq-dev
sudo pip install pyzmq
sudo pip install pygments
A questo punto siamo pronti ad avviare IPython con la qtconsole:
ipython qtconsole --pylab=inline
A questo punto siamo pronti ad avviare IPython con la qtconsole:
Quindi possiamo costruire un semplice grafico tramite i seguenti comandi (abbiamo incluso anche i numeri input/output di IPython che non devono essere digitati):
In [1]: x=np.array([1,2,3])
In [2]: plot(x)
Out[2]: []
Otteniamo il seguente grafico:

Conclusione
Qui si conclude la procedura di installazione. Ora abbiamo a portata di mano di un ambiente di sviluppo per il trading algoritmico estremamente robusto, efficiente e interattivo.
Negli articoli successivi descriviamo in dettaglio come IPython, matplotlib, panda e scikit-learn possano essere combinati per trovare ed effettuare il backtesting di nuove strategie di trading quantitative in modo diretto.