Ambiente di sviluppo per il Trading Algoritmico con Ubuntu/Linux e Python

In questo articolo voglio discutere sulle attività necessarie al fine di impostare un ambiente di sviluppo robusto, efficiente ed interattivo per il testing di strategie di trading algoritmico, utilizzando la distribuzione Linux molto conosciuta, come Ubuntu Desktop e il linguaggio di programmazione Python. Utilizzeremo questo ambiente per quasi tutti i successivi articoli sul trading algoritmico.

Per creare questo ambiente di sviluppo installeremo 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 adeguato database di Securities Master) ci permetteranno 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 si può mantiene il sistema ottimizzato e performante. IPython / matplotlib (e la qtconsole descritta di seguito) consentono la 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 ho scritto un tutorial in modo che gli utenti Windows o Mac OSX che non vogliono o non siano in grado di installare direttamente Ubuntu Linux possano comunque utilizzarlo 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. Ciò consente la sperimentazione di Ubuntu e degli strumenti Python prima di eseguire l’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 Ubuntu Desktop (32-bit o 64-bit)

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, dobbiamo procurarci l’ultima versione del software VirtualBox di Oracle. Clicca 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):

Pagina di download di Orcacle VirtualBox

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

Doppio click sull'icona "pacchetto" per installare Oracle VirtualBox

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:

VirtualBox senza l'immagine ISO di Ubuntu

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

Impostanzione di un nuovo ambiente virtuale

Scegli la quantità di RAM che desideri allocare al sistema virtuale. Personamente ho 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 allocerà tutta la memoria disponibile per l’hardware utilizzato):

Scegliere la quantità di memoria da allocare per il sistema virtuale

Creare 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:

Scegliere il tipo di disco rigido da utilizzare per l'immagine ISO

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

Schermata riassuntiva dopo la creazione di un sistema virtuale

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.

Vai alla sezione Impostazioni, fai clic sulla scheda “Archiviazione” e aggiungi un disco. A questo punto è necessario selezionare il file ISO dell’immagine del sistema Ubuntu, memorizzato direttamente nei tuoi download (o ovunque tu abbia scaricato Ubuntu). Selezionalo e quindi salva le impostazioni:

Selezionare l'ISO di Ubuntu Desktop per il primo avvio

 

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”:

Clicca su "Install Ubuntu" per avviare l'installazione

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

Installa i specifici drivers per 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 stai 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). Continua con l’installazione e ti verrà presentata una schermata che ti chiederà la tua posizione e, successivamente, il layout della tua tastiera:

Seleziona la tua zona geografica

Inserisci le tue credenziali ed assicurati di ricordare la password scelta perchè ne avrai bisogno ogni volta che accedi al sistema e per installare nuovi software e pacchetti:

Inserisci il tuo Username e Password (questa sarà la password utilizzata dall'amministratore)

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, puoi andare sul menu e forzare l’arresto. Al riavvio verrà visualizzata la schermata di login di Ubuntu:

Schermata di login di Ubuntu Desktop

Effettua il login con il tuo username e password (che hai inserito in precedenza) e entra nel tuo nuovo ambiente Ubuntu:

L'interfaccia Unity di Ubuntu Desktop dopo il login

Ora che abbiamo installato Ubuntu Desktop, possiamo iniziare ad installare i pacchetti per l’ambiente di ricerca e sviluppo del trading algoritmico.

Installare su i pacchetti Python per il Trading Algoritmo

Clicca sul bottone “Search” nell’angolo in alto a sinistra dello schermo e digita “Terminal” nella casella in modo da individuare l’interfaccia per la linea di comandi.

Doppio click sull’icona terminal per avviare il Terminal:

Il Terminal a linea di comando di Ubuntu Desktop

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.

Esegui i seguenti comandi (ti verrà richiesta la password):

sudo apt -y update 
sudo apt -y upgrade

Da notare che il prefisso -y specifica ad Ubuntu che tu vuoi 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 amministatrore. Dato che staimo 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.

Se osservi il terminale vedrai il tuo nome utente seguito dal nome del tuo computer. Nel mio caso è “[email protected]”, seguito dal prompt. Nel prompt digitare python e quindi provare a importare NumPy. Verificheremo che funziona calcolando la media aritmetica di una lista di valori:

[email protected]:~$ 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:

[email protected]:~$ 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
Per effettuare il test di Scikit-learn si può procedere come segue:
[email protected]:~$ 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()
Infine, vogliamo installare IPython. Si tratta di un interprete Python interattivo che offre un flusso di lavoro molto più snello, rispetto all’uso della console Python standard. Nei tutorial successivi illustrerò la piena utilità di Jupiter per lo sviluppo del trading algoritmico:
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 update

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 (ho incluso anche i numeri input/output di IPython che non hai bisogno di digitare):

In [1]: x=np.array([1,2,3])

In [2]: plot(x)
Out[2]: []
Che produce il seguente grafico:
un grafico prodotto con IPython e Qtconsole

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 descriverò 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.

I 5 migliori Libri di introduzione al Trading Algoritmico

Il trading algoritmico viene solitamente percepito dai principianti come una materia complicata con cui confrontarsi. Copre una vasta gamma di discipline, con alcuni aspetti che richiedono un grado significativo di maturità matematica e statistica. Di conseguenza, può essere estremamente scoraggiante per chi non è esperto in questi settori. In realtà, i concetti generali sono chiari da comprendere, mentre i dettagli possono essere appresi in modo iterativo e continuo.

 

Il vantaggio del trading algoritmico consiste nella possibilità testare le proprie capacità e conoscenze senza utilizzare denaro reale, dato che molti broker forniscono simulatori di mercato (demo) altamente realistici. Nonostante ci siano alcuni aspetti a cui fare attenzione, tali sistemi forniscono un ambiente per favorire una maggiore comprensione e verifica delle strategie, senza alcun rischio di capitale.

 

Una domanda comune è “Come posso iniziare con l’analisi quantitativa e il trading algoritmico?”. Ho già scritto una guida per principianti al trading quantitativo, ma un articolo non può sperare di coprire tutta la diversità di questa materia. Così ho deciso di scrivere questo articolo per raccomandare i miei libri preferiti relativi al trading quantitativo entry-level.

Il primo compito è ottenere una solida visione del soggetto. Ho trovato che sia molto più facile evitare pesanti dimostrazioni matematiche fino a quando le basi del tradingi algoritmico non siano state trattate e comprese. I migliori libri che ho trovato utili per tale scopo sono i seguenti:

  • Quantitative Trading di Ernest Chan – Questo è uno dei miei libri di finanza preferiti. Dr. Chan fornisce una grande panoramica del processo di creazione di un sistema di tradingi quantitativo “retail”, utilizzando MatLab o Excel. Rende il soggetto molto accessibile e dà l’impressione che “chiunque possa farlo”. Sebbene ci siano molti dettagli che vengono saltati (principalmente per brevità), il libro è un’ottima introduzione al funzionamento del trading algoritmico. Discute di generazione di alfa (“il modello di trading”), gestione del rischio, sistemi di esecuzione automatizzati e determinate strategie (in particolare il momentum e la reversione media). Questo libro è il punto di partenza.
  • Inside the Black Box di Rishi K. Narang – In questo libro il dottor Narang spiega in dettaglio come funziona un hedge fund quantitativo professionale. È destinato a un investitore esperto che sta valutando se investire in una “scatola nera” del genere. Nonostante l’apparente irrilevanza per un trader al dettaglio, il libro contiene in realtà una grande quantità di informazioni su come dovrebbe essere realizzato un “corretto” sistema di trading quantitativo. Ad esempio, vengono illustrati l’importanza dei costi di transazione e la gestione del rischio, con idee su dove cercare ulteriori informazioni. Molti algotrader al dettaglio dovrebbero analizzare le informazioni riportate in questo libero e approfondire come i ‘professionisti’ effettuano il loro trading.
  • Algorithmic Trading & DMA di Barry Johnson – La frase “trading algoritmico”, nel settore finanziario, si riferisce di solito agli algoritmi di esecuzione utilizzati da banche e broker per eseguire transazioni efficienti. Sto usando questo termine per includere non solo gli aspetti di esecuzione del trading, ma anche quelli di trading quantitativo o sistematico. Questo libro riguarda principalmente il primo, scritto da Barry Johnson, che è uno sviluppatore di software quantitativo presso una banca d’investimento. Questo significa che non è di alcuna utilità per il trader retail? Affatto. Possedere una comprensione più profonda di come funzionano gli exchange e della “microstruttura del mercato” può aiutare enormemente la redditività delle strategie di vendita al dettaglio. Nonostante sia un tomo pesante, vale la pena studiarlo.

 

Una volta che i concetti di base sono stati assimilati, è necessario iniziare a sviluppare una strategia di trading. Questo è solitamente noto come il componente del modello alfa di un sistema di trading. Le strategie sono semplici da trovare in questi giorni, tuttavia il vero valore viene nel determinare i propri parametri di trading tramite ricerche approfondite e backtesting. I seguenti libri illustrano alcuni tipi di sistemi di trading e di esecuzione, e come implementarli:

  • Algorithmic Trading di Ernest Chan – Questo è il secondo libro di Dr. Chan. Nel primo libro sono state introdotte le strategie di momentum, di  mean reversion e ad alcune strategie ad alta frequenza. Questo libro tratta in modo approfondito tali strategie e fornisce importanti dettagli di implementazione, anche se con maggiore complessità matematica rispetto (ad esempio filtri di Kalman, stazionarietà / cointegrazione, CADF ecc.). Le strategie, ancora una volta, fanno ampio uso di MatLab ma il codice può essere facilmente modificato in C ++, Python / panda o R, per chi ha esperienza con questi linguaggi di programmazione. Fornisce inoltre aggiornamenti sugli ultimi comportamenti del mercato, in quanto il primo libro è stato scritto qualche anno fa.
  • Trading and Exchanges di Larry Harris – Questo libro si concentra sulla microstruttura del mercato, che personalmente ritengo sia un’area essenziale da apprendere, anche nelle fasi iniziali del trading quantistico. La microstruttura del mercato è la “scienza” di come i partecipanti al mercato interagiscono e le dinamiche che si verificano nel book degli ordini. È strettamente correlato al modo in cui funzionano gli exchanges e a ciò che accade effettivamente quando viene effettuata una transazione. Questo libro parla meno delle strategie di trading in quanto tali, ma di altri aspetti di cui è necessario essere a conoscenza quando si progettano i sistemi di esecuzione. Molti professionisti nel settore della finanza quantistica considerano questo libro eccellente e anche io lo consiglio vivamente.

 

A questo punto, come trader al dettaglio, sarai in grado di iniziare ad approfondire le singole componenti di un sistema di trading, come il meccanismo di esecuzione (e la sua profonda relazione con i costi di transazione), la gestione del rischio e del portafoglio. Suggerirò alcuni libri per questi argomenti negli articoli successivi.

 

I Trader Algoritmici hanno Possibilità di Avere Successo a Livello Retail?

Tipicamente, un trader algoritmico principiante che opera a livello “retail” si interroga su come poter avere successo nel trading, dovendo competere con i grandi fondi quantistici istituzionali. In questo articolo vorrei sostenere che, a causa della natura del contesto normativo dove operano – come ad esempio, la struttura organizzativa e la necessità di mantenere le relazioni con gli investitori, i fondi soffrono di alcuni svantaggi che non riguardano i trader algoritmici al dettaglio.

 

I limiti di capitale e i vincoli normativi imposti ai fondi di investimento causano determinati e prevedibili comportamenti, che possono essere sfruttati da un operatore al dettaglio. “I grandi soldi” muovono i mercati, e come tale si possono inventare molte strategie per trarre vantaggio da tali movimenti. In futuro scriverò articoli su alcune di queste strategie. In questa fase vorrei evidenziare i vantaggi di cui gode un  trader algoritmico rispetto ai grandi fondi di investimento.

 

Vantaggi del Trading

Ci sono molti modi in cui un algo trader “retail” può competere con un fondo durante il processo di trading, ma ci sono anche alcuni svantaggi:

  • Capacità – Un operatore al dettaglio ha una maggiore libertà di operatività nei mercati più piccoli. Possono generare ritorni significativi in questi spazi, dove i fondi istituzionali non possono.
  • “Cavalcare” il trade – I fondi subiscono il “trasferimento di tecnologia”, dato che il turnover del personale può essere elevato. Gli accordi di non divulgazione e gli accordi di non competizione possono mitigare il problema, ma portano comunque molti fondi quantistici ad “inseguire lo stesso trade”. Il sentimento capriccioso degli investitori e la “prossima cosa calda” amplificano il problema. I trader al dettaglio non sono costretti a seguire le stesse strategie e quindi possono essere indipendenti dall’operatività dei fondi più grandi.
  • Impatto sul mercato – Quando si opera in mercati altamente liquidi e non-OTC, il basso capitale di conti “retail” riducono sostanzialmente l’impatto sul mercato.
  • Leverage – Un trader al dettaglio, a seconda della sua configurazione legale, è vincolato dalle normative sul margine / leva finanziaria. I fondi di investimento privati non soffrono dello stesso svantaggio, sebbene siano ugualmente soggetti a tale vincolo in una prospettiva di gestione del rischio.
  • Liquidità – Avere accesso a una brokerage prioritario è fuori dalla portata del trader algoritmico al dettaglio. Devono “arrangiarsi” con un intermediario al dettaglio come Interactive Brokers. Quindi, vi è un accesso ridotto alla liquidità in alcuni strumenti. Anche l’instradamento degli ordini “retail” è meno efficiente ed è una causa delle diffirenza delle prestazioni della strategia tra backtesting e live-trading.
  • Flusso di notizie dei clienti – Potenzialmente, il più importante svantaggio del trader al dettaglio è la mancanza di accesso al flusso di notizie prioritario tra un intermediario o istituto di credito e i loro clienti. I trader retail devono fare uso di fonti non tradizionali come gruppi di meetup, blog, forum e riviste finanziarie ad accesso pubblico.

 

Gestione del rischio

I trader algoritmici al dettaglio adottano spesso un approccio alla gestione del rischio diverso rispetto ai fondi quantitativi più grandi. Spesso è vantaggioso essere “piccoli e agili” nel contesto del rischio.

Fondamentalmente, non vi è alcun budget di gestione del rischio imposto al trader oltre a quello che decide di rischiare in completa autonomia, né esiste un reparto di compliance o risk management che imponga il controllo. Ciò consente al trader al dettaglio di implementare metodologie di modellazione del rischio personalizzate o preferite, senza la necessità di seguire “standard di settore” (un requisito implicito per gli investitori).

Tuttavia, l’argomento alternativo è che questa flessibilità può portare i trader al dettaglio a diventare “sciatti” con la gestione del rischio. Le politiche di gestione del rischio possono essere integrate nel processo di backtest e di esecuzione, senza ulteriori considerazioni date dall’analisi del portafoglio del rischio nel suo insieme. Sebbene il “pensiero profondo” possa essere applicato al modello alfa (strategia), la gestione del rischio potrebbe non raggiungere un simili livello di attenzione.

 

Relazioni con gli investitori

Gli investitori esterni sono la differenza fondamentale tra i trader al dettaglio e i grandi fondi. Ciò comporta una serie di problematiche e processi di gestioni per i fondi di investimento – problemi di cui i trader al dettaglio non devono preoccuparsi di:

  • Struttura retributiva – Nell’ambiente del trading “retail”, il trader è interessato solo al rendimento assoluto. Non ci sono limiti di budget da rispettare e nessuna regola di gestione del capitale da seguire. I trader al dettaglio sono anche in grado di seguire curve di equity più volatili poiché non ci sono investitori esterni che monitorano le prestazioni delle operazioni e che potrebbero riscattare il loro capitale dal fondo.
  • Regolamentazione e rendicontazione – Oltre alla tassazione, il trader al dettaglio ha pochissimi obblighi normativi in ​​materia di segnalazione. Inoltre, non è necessario fornire report sulle prestazioni mensili o “vestire” un portfolio prima che venga inviata una newsletter del cliente. Questo è un grande risparmio di tempo.
  • Confronto con benchmark – I fondi non devono confrontarsi solo con i loro pari, ma anche con “benchmark di settore”. Per un fondo azionario americano long-only, gli investitori vorranno vedere, ad esempio, rendimenti superiori all’S&P500. I trader al dettaglio non subisco la stessa pressione durante il confronto delle loro strategie con un benchmark.
  • Commissioni sulle performance – Lo svantaggio di gestire il proprio portafoglio come un operatore al dettaglio è la mancanza di ricevere le commissioni di gestione e di rendimento che i fondi di investimento applicano ai loro clienti.

 

Tecnologia

Un’area in cui il trader al dettaglio ha un vantaggio significativo è la scelta dello stack tecnologico per il suo sistema di trading. Il trader non solo può scegliere i “migliori strumenti di lavoro” che preferisce, ma non ha problemi di integrazione dei sistemi legacy o sulle politiche IT a livello di azienda. Inoltre i principali e più recenti  linguaggi di programmazione, come Python o R, hanno ha disposizione pacchetti per costruire un sistema end-to-end di backtesting, esecuzione, gestione del rischio e portfolio management con un numero di linee di codice molto inferiore (LOC) che potrebbe essere necessario in un linguaggio più dettagliato come C ++ .

 

Tuttavia, questa flessibilità ha un prezzo. Si deve costruire lo stack o esternalizzarlo (in tutto o in parte) ai fornitori software . Questo è costoso in termini di tempo, capitale o entrambi. Inoltre, un trader deve eseguire il debug di tutti gli aspetti del sistema di trading – un processo lungo e potenzialmente scrupoloso. Tutte le macchine di ricerca e tutti i server co-localizzati devono essere pagati direttamente dai profitti del trading poiché non ci sono commissioni di gestione per coprire le spese.

 

In conclusione, si può vedere che i trader al dettaglio hanno vantaggi comparativi significativi rispetto ai fondi più grandi. Potenzialmente, ci sono molti modi in cui questi vantaggi possono essere sfruttati. Gli articoli successivi discuteranno alcune strategie che fanno uso di queste differenze.

 

Guida introduttiva al trading algoritmico e quantitativo

In questo articolo ho intenzione di introdurre alcuni dei concetti base di un sistema di trading quantitativo.

Il trading quantitativo è un’area estremamente complessa della finanza quantistica. Può richiedere molto tempo per acquisire le conoscenze necessarie per costruire le proprie strategie di trading. Non solo, ma richiede una vasta esperienza di programmazione, almeno in un linguaggio come MATLAB, R o Python. Tuttavia, con l’aumentare della frequenza di trading, gli aspetti tecnologici diventano molto più rilevanti. Quindi avere familiarità con C / C ++ sarà di fondamentale importanza. Un sistema di trading quantitativo è costituito da quattro componenti principali:

  • Identificazione della strategia – Trovare una strategia, sfruttare un vantaggio e decidere la frequenza del trading; 
  • Backtesting della strategia – Acquisizione dei dati, analisi delle prestazioni della strategia e rimozione dei bias;
  • Sistema di esecuzione – Collegamento a una società di intermediazione o broker, automatizzando il trade e riducendo al minimo i costi di transazione;
  • Gestione del rischio – Assegnazione ottimale del capitale, “dimensionamento del trade” / criterio di Kelly e psicologia di trading;

Inizieremo dando un’occhiata a come identificare una strategia di trading.

 

Identificazione della Strategia

Tutti i processi del trading quantitativo iniziano con un periodo di ricerca. Questo processo di ricerca comprende la ricerca di una strategia, verificare se la strategia si inserisce in un portafoglio di altre strategie che sono già in esecuzione, ottenere tutti i dati necessari per testare la strategia e cercare di ottimizzare la strategia per avere rendimenti più elevati e / o un rischio inferiore. Sarà necessario tenere conto del proprio profilo patrimoniale nel caso si gestisce la strategia come operatore “al dettaglio” e considerare come i costi di transazione influiranno sulla strategia.

 

Contrariamente alla credenza popolare, in realtà è abbastanza semplice trovare strategie redditizie attraverso varie fonti pubbliche. Gli accademici pubblicano regolarmente risultati delle loro simulazioni di trading (anche se per lo più al lordo dei costi di transazione). I blog di finanza quantitativa discuto in dettaglio le strategie. Le riviste specializzate delineano alcune delle strategie utilizzate dai fondi.

 

Potreste chiedervi perché gli individui e le aziende sono desiderosi di condividere le loro strategie redditizie, specialmente quando sanno che la pubblicazione può impedire alla strategia di funzionare nel lungo termine. La ragione sta nel fatto che spesso non condividono i parametri esatti e i metodi usati per ottimizzare la strategia. Queste ottimizzazioni sono la chiave per trasformare una strategia relativamente mediocre in una molto redditizia. In effetti, uno dei modi migliori per creare le strategie uniche è trovare metodi simili e quindi eseguire una procedura di ottimizzazione.

Ecco una piccola lista di siti per iniziare a cercare nuove idee:

 

Molte delle strategie che troverete rientreranno nelle categorie di mean-reversion e trend-following / momentum. Una strategia di “mean reverting” tenta di sfruttare il principio della media a lungo termine su una “serie di prezzi” (come lo spread tra due asset correlati) e quindi le deviazioni a breve termine tendono a tornare verso la media. Una strategia di momentum tenta invece di sfruttare la psicologia degli investitori e dei grandi fondi strutturati, cercando di “cavalcare” il momentum del mercato, che può acquisire un impulso in una direzione e seguire il trend fino a quando non si inverte.

 

Un altro aspetto estremamente importante del trading quantitativo è la frequenza di trading. Il trading a bassa frequenza (LFT) si riferisce generalmente a qualsiasi strategia che tiene aperte posizioni per più di un giorno di negoziazione. Corrispondentemente, il trading ad alta frequenza (HFT) si riferisce generalmente a una strategia apre e chiude operazioni all’interno di un giorno. Il trading ad altissima frequenza (UHFT) si riferisce a strategie che effettuano operazioni nell’ordine di secondi e addirittura millisecondi. Per un professionista retail l’HFT e l’UHFT sono possibili e redditizi solamente tramite una conoscenza dettagliata dello “stack tecnologico” del trading e delle dinamiche dell’order book.

 

Una volta identificata una strategia o una serie di strategie, è necessario testare la redditività tramite i dati storici. Questo è il dominio del backtesting.

 

Backtesting della Strategia

L’obiettivo del backtesting consiste nel verificare che la strategia identificata tramite il processo appena descritto è proficua se applicata a dati sia storici che a dati “out-of-sample”. Questo stabilisce l’aspettativa di come la strategia si comporterà nel “mondo reale”. Tuttavia, per vari motivi, il backtesting NON è una garanzia di successo. È forse l’area più delicata sottile del trading quantitativo poiché comporta numerosi bias, che devono essere attentamente considerati e il più possibile eliminati. Discuteremo i tipi comuni di bias, tra cui bias previsionali, bias di sopravvivenza e bias di ottimizzazione (noto anche come bias “data-snooping”). Altre aree importanti nel backtesting comprendono la disponibilità e la pulizia dei dati storici, il factoring in  costi di transazione realistici e l’adozione su una solida piattaforma di backtesting. Discuteremo ulteriormente dei costi di transazione nella seguente sezione Sistemi di esecuzione.

 

Dopo aver identificato una strategia, è necessario ottenere i dati storici attraverso i quali effettuare i test e ottimizzare la strategia. Esiste un numero significativo di fornitori di dati per qualsiasi mercato desiderate operare. Generalmente i costi si adattano alla qualità, alla profondità e alla tempestività dei dati. Il tradizionale punto di partenza per i trader algoritmici principianti (almeno a livello retail) è utilizzare il set di dati gratuito di Yahoo Finance. Non mi dilungherò troppo sui fornitori qui, piuttosto mi piacerebbe concentrarmi sulle caratteristiche generali che deve assolutamente avere un set di dati storici.

 

Le caratteristiche principali dei set di dati storici includono accuratezza / pulizia, bias di sopravvivenza e aggiustamento delle azioni aziendali come dividendi e scissioni di azioni:

  • L’Accuratezza riguarda la qualità complessiva dei dati, indipendentemente dal fatto che contenga errori. Gli errori a volte possono essere facili da identificare, ad esempio con un filtro spike, che individuerà gli “spike” non corretti nei dati delle serie temporali e li correggeranno. Altre volte possono essere molto difficili da individuare. Spesso è necessario avere due o più provider e quindi controllare tutti i dati dell’uno con i dati del’altro.
  • Il Bias di sopravvivenza è spesso una “caratteristica” dei set di dati gratuiti o poco costosi. Un set di dati con bias di sopravvivenza non contiene gli asset che non vengono più scambiati. Nel caso dei titoli azionari, significa che non contiene le azioni delistate o in bancarotta. Questo pregiudizio significa che qualsiasi strategia di trading azionario testata su un set di dati di questo tipo avrà probabilmente prestazioni migliori rispetto al “mondo reale” in quanto i “vincitori” storici sono già stati preselezionati.
  • Le Azioni societarie comprendono le attività “logistiche” svolte dall’azienda che di solito causano un cambiamento del prezzo grezzo con andamento pari a una funzione a gradini. Tali attività non dovrebbero essere incluse nel calcolo della variazione del prezzo. Gli aggiustamenti per dividendi e le scissioni di azioni sono i principali colpevoli. È necessario eseguire un processo noto come back adjustment per ciascuna di queste azioni. Bisogna stare molto attenti a non confondere una divisione azionaria con un vero aggiustamento dei ritorni!

 

Per eseguire una procedura di backtest è necessario utilizzare una piattaforma software. Si può scegliere tra software dedicati, come Tradestation o Multicharts, una piattaforma numerica come Excel o MATLAB, o un’implementazione completamente personalizzata in un linguaggio di programmazione come Python o C ++. Non mi dilungherò troppo su Tradestation (o simili), Excel o MATLAB, poiché credo nella creazione di uno stack completo di tecnologie interne (per i motivi illustrati di seguito). Uno dei vantaggi di utilizzare uno stack interno consiste nell’elevata integrazione tra il software di backtesting e il sistema di esecuzione, e quindi avere la possibilità di implementare strategie statistiche estremamente avanzate. In particolare per le strategie HFT è essenziale utilizzare un’implementazione personalizzata.

 

Quando si esegue il backtest di un sistema, si deve essere in grado di quantificare le performance della strategia. Le metriche “standard del settore” per le strategie quantitative sono il massimo drawdown e il Sharpe Ratio. Il massimo drawdown rappresenta la perdita più elevata, cioè la discesa più elevata da “picco-a-valle” nella curva dell’equity in un particolare periodo di tempo (solitamente annuale). Questo numero è spesso rappresentato con notazione percentuale. Le strategie LFT tenderanno ad avere drawdown maggiori rispetto alle strategie HFT, a causa di una serie di fattori statistici. Un backtest storico mostrerà il massimo drawdown nel passato, che è un buon indicatore per le future prestazioni della strategia. La seconda misura è il Sharpe Ratio, che è definito euristicamente come la media dei rendimenti divisa per la deviazione standard di tali rendimenti. Qui, i rendimenti si riferiscono al ritorno della strategia al di sopra di un benchmark predeterminato, come l’S&P500 o un Treasury Bill trimestrale. Si noti che il rendimento annualizzato non è una misura solitamente utilizzata, in quanto non tiene conto della volatilità della strategia (diversamente dal Sharpe Ratio).

 

Una volta che una strategia è stata testata e ritenuta priva di bias (nella misura in cui ciò è possibile!), con un buon Sharpe e drawdown minimizzato, è tempo di costruire un sistema di esecuzione.

 

Sistema di Esecuzione

Un sistema di esecuzione è il mezzo con cui le azioni (comprare / vendere) generate dalla strategia sono inviate ed eseguite dal broker. Indipendemente dal fatto che la generazione del trade possa essere parzialmente o completamente automatizzata, il meccanismo di esecuzione può essere manuale, semi-manuale (cioè “one-click”) o completamente automatizzata. Per le strategie LFT, le tecniche manuali e semi-manuali sono le più comuni. Per le strategie HFT è necessario creare un meccanismo di esecuzione completamente automatizzato, che sarà spesso strettamente associato al generatore dei trade (a causa dell’interdipendenza tra strategia e tecnologia). 

Le principali caratteristiche di un sistema di esecuzione sono:

  • l’interfaccia con il broker;
  • la minimizzazione dei costi di transazione (compresa la commissione, lo slippage e lo spread);
  • la divergenza delle prestazioni del sistema live dalle prestazioni backtested;

 

Esistono molti modi per interfacciarsi con una società di intermediazione. Si va dal chiamare il broker tramite telefono fino ad un’interfaccia API (Application Programming Interface) ad alte prestazioni completamente automatizzata. Idealmente, l’obiettivo è automatizzare il più possibile l’esecuzione dei tuoi trade. Questo libera il tuo tempo per concentrarti su ulteriori ricerche e ti consente di eseguire più strategie simultaneamente o anche strategie con frequenza più elevata (in effetti, HFT è essenzialmente impossibile senza l’esecuzione automatica). I più comuni software di backtest descritti sopra, come MATLAB, Excel e Tradestation, sono validi per strategie a bassa frequenza, e quindi sono più semplici. Tuttavia sarà necessario sviluppare un sistema di esecuzione interno, scritto in un linguaggio ad alte prestazioni come il C ++, se si vuol operare in HFT. Come aneddoto, in un’azienda dove ho collaborato, si prevedeva un “ciclo di trading” di 10 minuti in cui si doveva scaricare i nuovi dati di mercato ogni 10 minuti e quindi eseguire operazioni basate su tali informazioni nello stesso arco di tempo. Per far questo ho sviluppato uno script Python ottimizzato. Per qualsiasi cosa si avvicini ai dati di frequenza al secondo, o di tick, credo che sarebbe più opportuno utilizzare C / C++.

 

Nei grandi fondi, l’algotrader non si occupa di ottimizzare l’esecuzione dei trade. Tuttavia, nelle piccole società o nelle i negozi più piccoli o nelle aziende di HFT, gli algotrader sono anche gli esecutori quindi è spesso auspicabile uno skillet molto più ampio. 

Le tue capacità di programmazione saranno altrettanto importanti, se non di più, delle tue statistiche e dei tuoi talenti di econometria!

 

Un altro importante problema che ricade nell’ambito del sistema di esecuzione è quello della minimizzazione dei costi di transazione. Ci sono generalmente tre componenti per i costi di transazione: le commissioni (o imposte), che sono le commissioni addebitate dall’intermediario, dall’exchange e dalla SEC (o un ente governativo simile); slippage, che è la differenza tra il prezzo a cui volevi comprare un asset rispetto al prezzo al quale il trade viene effettivamente eseguito; lo spread, che è la differenza tra il prezzo bid/ask del titolo oggetto del trade. Si noti che lo spread NON è costante e dipende dalla liquidità corrente (vale a dire la disponibilità di ordini di acquisto / vendita) sul mercato.

I costi di transazione possono fare la differenza tra una strategia estremamente redditizia con un buon Sharpe Ratio e una strategia estremamente non redditizia con un Sharpe Ratio terribile. Può essere molto difficile prevedere correttamente i costi di transazione tramite un backtest. A seconda della frequenza della strategia, sarà necessario accedere ai dati storici, che devono includere i dati di tick per i prezzi bid/ask. Per questi motivi i grandi fondi di investimento dedicano intere squadre di quants solamente ai processi di ottimizzazione dell’esecuzione. Si consideri, ad esempio, il caso in cui un fondo voglia chiudere una notevole quantitaà di posizioni (le ragioni per farlo sono molte e varie!). “Scaricando” così tante azioni sul mercato, esse deprimeranno rapidamente il prezzo e potrebbero non ottenere un’esecuzione ottimale. Quindi, nonostate gli algoritmi prevedano la gestione di ordini “drip feed” per uscire o entrare sui mercati, i grandi fondi corrono il rischio di slippage. Oltre a ciò, esistono strategie che “cacciano” queste situazioni e possono sfruttare queste inefficienze. Questo è il dominio dell’ fund structure arbitrage.

 

Infine il principale problema dei sistemi di esecuzione riguarda la divergenza delle prestazioni della strategia dalle prestazioni backtested. Questo può accadere per una serie di motivi. Abbiamo già discusso in precedenza del bias di previsione e l’ottimizzazione, prendendo in considerazione i test retrospettivi. Tuttavia, alcune strategie non permettono di testare facilmente questi bias prima della attiviazione della strategia nel mercato reale. Questo si verifica prevalentemente nel HFT. Inoltre potrebbero esserci dei bug nel sistema di esecuzione o nella stessa strategia di trading che non viene rilevato nella fase di backtesting ma si presenta nel live-trading. Il mercato potrebbe essere stato soggetto ad un cambio di regime dopo lo sviluppo della tua strategia. Nuovi contesti normativi, variazione del sentiment degli investitori e fenomeni macroeconomici possono portare a divergenze nel modo in cui il mercato si comportato fino a quel momento e quindi influenzare la redditività della tua strategia.

 

Gestione del Rischio

L’ultimo componente di un sistema di trading quantitativo è il processo di gestione del rischio. Il “Risk Management” include tutti i bias discussi in precedenza. Include il rischio della tecnologia, come la possibilità di malfunzionamenti nei server che ospitano il nostro sistema o nei server dell’exchange. Comprende il rischio di intermediazione, come ad esempio la bancarotta di un broker (non è uno scenario così improbabile, come è accaduto con MF Global!). Sinteticamente il “Rischio” comprende quasi tutto ciò che potrebbe interferire con l’implementazione dei nostri trading system, e sono molte le cause di queste interferenze. Moltissimi libri sono dedicati alla gestione del rischio per le strategie quantitative, quindi non rimando alla letteratura disponibile se si vuole approfondire questa tematica.

 

La gestione del rischio comprende anche ciò che è noto come allocazione ottimale del capitale, che è una branca della Gestione del Portafoglio. Quest’ultima descrive il modo in cui il capitale viene assegnato a un insieme di strategie diverse e ai singoli trade all’interno di tali strategie. È un’area complessa e si basa su una matematica non banale. L’approccio standard con cui viene gestito il capitale e il levarege delle strategie è il criterio di Kelly. Dato che questo è un articolo introduttivo, non mi dilungherò sulle formule che lo compongono. Il criterio di Kelly fa alcune ipotesi sulla natura statistica dei rendimenti, che non sono del tutto validi per i mercati finanziari, quindi gli algotrader sono spesso prudenti quando si tratta dell’implementazione di questo criterio.

 

Un altro componente chiave della gestione del rischio è la gestione emotiva e psicologica. Ci sono molti bias cognitivi che possono insinuarsi nel trading. Anche se questo è meno problematico con il trading algoritmico se il sistema viene lasciato lavorare senza interruzioni una volta che è stato avviato! Un bias comune è quello dell’avversione alla perdita, in cui una posizione perdente non viene chiusa a causa del dolore provocato dal dover realizzare una perdita. Allo stesso modo, i profitti possono essere presi troppo presto nel timore di perdere un profitto già guadagnato. Un altro bias comune è noto come recency bias. Questo si manifesta quando i trader mettono troppa enfasi sugli eventi recenti e trascurano la visione a lungo termine. Poi, naturalmente, ci sono i classici bias emotivi: come la paura e l’avidità. Questi possono spesso portare a un leverage eccessivo o troppo ridotto, che può causare un blow-up (cioè la liquidazione di tutte le posizione e, addirittura, la chiusura del conto) o una notevole riduzione dei profitti.

 

Conclusione

Come si può ben intuire, il trading algoritmico e quantitativo è un settore estremamente complesso, anche se molto interessante, della finanza quantitativa. In questo articolo ho solamente sfiorato la superficie dell’argomento, e sta già diventando piuttosto lungo! Sono stati scritti interi libri e documenti su questioni a cui ho dedicato solamente una o due frasi. Per questo motivo, prima di andare live con sistemi di trading quantitativo, è necessario prevedere un significativo periodo di studio. Per lo meno avrai bisogno di un ampio background in statistica ed econometria, con molta esperienza nella programmazione, attraverso un linguaggio di programmazione come MATLAB, Python o R.

Per strategie più sofisticate per approcci HFT è inoltre necessario un set di competenze in aspetti come la modifica del kernel Linux, conoscenza avanzata del C / C ++, programmazione assembler e ottimizzazione della latenza della rete.

 

Se sei interessato a provare a creare le tue strategie di trading algoritmiche, il mio primo suggerimento è sicuramente quello di diventare un bravo programmatore. Inoltre dovrai implementare, il più possibile personalmente (o almeno conoscere ogni singolo aspetto funzionale e tecnico) il processo di acquisizione dati, le strategie di backtester e il sistema di esecuzione.

Dato che stai facendo trading con il tuo capitale, non dormiresti meglio la notte sapendo che hai completamente testato il tuo sistema e sei consapevole delle sue insidie e dei possibili problemi? L’esternalizzazione a un fornitore, se potenzialmente permette di risparmiare tempo nel breve termine, potrebbe essere estremamente costoso nel lungo termine.