In questo articolo si approfondisce il concetto di esecuzione automatica. In generale, questo è il processo che consente a una strategia di trading, tramite una piattaforma di trading elettronica, di generare segnali di esecuzione di un trade senza alcun intervento umano. La maggior parte dei sistemi discussi su DataTrading sono stati progettati per essere implementati come strategie con esecuzione automatizzata. L’articolo descrive i pacchetti software e linguaggi di programmazione che forniscono sia funzionalità di backtesting che di esecuzione automatizzata.
La prima considerazione è come testare una strategia. La mia opinione personale è che lo sviluppo personalizzato di un ambiente di backtesting all’interno di un linguaggio di programmazione di prima classe offre la massima flessibilità. Viceversa, con una piattaforma di backtesting sviluppata da un fornitore software si devono introdurre dei vincoli sulla modalità di esecuzione dei backtest. Nonostante ciò, la scelta dei linguaggi di programmazione disponibili è ampia e diversificata, e spesso può essere disorientante. Non è sempre noto, prima di inziare lo sviluppo, quale linguaggio possa essere il più adatto.
Quando si codifica una strategia con regole sistematiche, il trader quantitativo deve essere sicuro che i suoi risultati futuri rifletteranno le performance passate. Esistono generalmente due tipologie di sistemi per il backtesting che sono utilizzate per testare le strategie. In generale, tali sistemi sono classificati in backtesting di ricerca e backtesting event-driven (basato sugli eventi). In questo articolo consideriamo sistemi backtesters personalizzati per entrambe queste tipologie e per ognuno si evidenziano vantaggi e svantaggi.
Sistemi di Ricerca
La forma più semplice di un sistema di backtesting, il sistema di ricerca, è solitamente il primo ad essere utilizzato. Il sistema di ricerca viene utilizzato per verificare rapidamente se una strategia può avere buone prestazioni. Tali strumenti fanno spesso ipotesi non realistiche per i costi di transazione, i probabili prezzi di esecuzione, i vincoli di shorting, la gestione dei rischi e una miriade di altre questioni che sono state delineate negli articoli precedenti. I comuni strumenti per effettuare la ricerca comprendono MATLAB, R, Python ed Excel.
La fase di ricerca è utile perché i pacchetti software forniscono una capacità di trasporto vettoriale significativa, che porta ad una buona velocità di esecuzione e un’immediata implementazione (meno linee di codice). In questo modo è possibile testare più strategie, combinazioni e varianti in modo rapido e iterativo.
Sebbene tali strumenti siano spesso utilizzati sia per il backtesting che per l’esecuzione, tali ambienti di ricerca non sono generalmente adatti per strategie che si avvicinano al trading intraday a frequenze elevate (sotto il minuto). Tale limitazione è causata dalla mancanza, all’interno di questi ambienti, delle librerie necessarie per connettersi ai server dei fornitori di dati in tempo reale o della difficoltà ad interfacciarsi con le API dei broker in modo pulito. Nonostante queste carenze esecutive, gli ambienti di ricerca sono fortemente utilizzati all’interno dell’ambiente quantitativo professionale. Sono il “primo test” per tutte le idee di strategie prima di promuoverle ad un controllo più rigoroso all’interno di un ambiente di backtesting realistico.
Backtesting Event-Driven
Una volta che una strategia è stata ritenuta idonea nella fase di ricerca, deve essere testata in modo più realistico. Tale realismo tenta di simulare fedelmente la maggioranza (se non tutte) delle criticità descritte negli articoli precedenti. Lo scenario ideale è la possibilità di utilizzare lo stesso codice di generazione dei trade per il backtesting storico e l’esecuzione live. Questo può essere ottenuto utilizzando un backtester basato su eventi.
I sistemi basati su eventi sono ampiamente utilizzati nell’ingegneria del software, comunemente per la gestione dell’input GUI (graphicalical user interface) all’interno di sistemi operativi basati su interfacce grafiche. Questi sono ideali anche per il trading algoritmico. Tali sistemi sono spesso scritti in linguaggi ad alte prestazioni come C ++, C # e Java.
Si consideri uno scenario dove una strategia di trading automatizzata è collegata a un feed di mercato in tempo reale e ad un broker (questi due possono essere la stessa entità). In questo caso nuove informazioni sul mercato sono inviate costantemente verso il sistema, attivando e generando un nuovo segnale di trading e quindi un evento di esecuzione. Tale sistema è quindi in un ciclo continuo, rimanendo in attesa di ricevere eventi e gestirli in modo appropriato.
È possibile generare sotto componenti come un gestore di dati storici e un simulatore del broker, che possono imitare le loro controparti reali. Questo consente di effettuare il backtesting delle strategie in modo estremamente verosimile all’esecuzione live.
Lo svantaggio di tali sistemi è che sono molto più complicati da progettare e da implementare rispetto ad un sistema di ricerca. Quindi il “time to market” è più lungo. Sono più inclini a bug e richiedono una buona conoscenza di programmazione e, in una certa misura, della metodologia di sviluppo del software.
Latenza
In termini ingegneristici, la latenza è definita come l’intervallo di tempo tra una simulazione e una risposta. Nel trading quantitativo si riferisce generalmente al ritardo temporale tra la generazione di un segnale di esecuzione e la ricezione delle informazioni dell’eseguito da parte del broker che esegue l’esecuzione.
Raramente questo tipo di latenza è un problema nelle strategie intraday a bassa frequenza, dato che il movimento dei prezzi previsto durante il periodo di latenza non influirà in alcun modo sulla strategia. Lo stesso non vale per le strategie a frequenza più alta dove la latenza diventa estremamente importante. L’obiettivo finale di HFT è ridurre il più possibile la latenza al fine di ridurre lo slippage.
La riduzione della latenza comporta la riduzione al minimo della “distanza” tra il sistema di trading algoritmico e l’exchange definitivo su cui viene eseguito un ordine. Ciò può comportare la riduzione della distanza geografica tra i sistemi, riducendo così i tempi di trasmissione lungo i cablaggi di rete. Può anche implicare la riduzione dell’elaborazione effettuata nell’hardware di rete o la scelta di una intermediazione con un’infrastruttura più sofisticata. Molti broker competono sulla latenza per attirare i clienti.
La diminuzione della latenza diventa esponenzialmente più costosa in funzione della “distanza in Internet”, che è definita come la distanza di rete tra due server. Quindi per un trader ad alta frequenza deve essere raggiunto un compromesso tra i costi per ridurre la latenza e il guadagno derivato dalla riduzione dello slippage. Questi problemi saranno discussi in uno dei prossimi paragrafi.
Linguaggio di Programmazione
Alcune aspetti relativi alla scelta del linguaggio sono già stati descritti in precedenza. Ora si vogliono considerare i vantaggi e gli svantaggi dei singoli linguaggi di programmazione. Ho diviso i linguaggi in due categorie, i linguaggi alte prestazioni / difficoltà di sviluppo, e quelli a basse prestazioni / facili da sviluppare. Questi sono termini soggettivi e alcuni possono non condividere tale classificazione, a seconda del proprio background tecnico.
Uno degli aspetti più importanti della programmazione di un ambiente di backtesting personalizzato è la familiarità del programmatore abbia con gli strumenti utilizzati. Per coloro che sono nuovi nel mondo della programmazione, ciò che segue descrive le principali tecnologie utilizzate nel trading algoritmico.
C++, C# e Java
C++, C# e Java sono tutti esempi di linguaggi di programmazione orientati agli oggetti di uso generale. Ciò significa che possono essere utilizzati senza un corrispondente ambiente di sviluppo integrato (IDE), sono tutti multipiattaforma, hanno una vasta gamma di librerie per quasi tutte le attività immaginabili e consentono una rapida velocità di esecuzione se correttamente utilizzati.
Se si desidera la massima velocità di esecuzione, è probabile che C++ (o C) sia la scelta migliore. Offre la massima flessibilità per la gestione della memoria e l’ottimizzazione della velocità di esecuzione. Questa flessibilità ha un prezzo. C++ è difficile da imparare bene e può spesso portare all’introduzione di bug. Lo sviluppo può richiedere molto più tempo rispetto alle altre lingue. Nonostante queste carenze è molto usato nel settore finanziario.
C# e Java sono simili poiché entrambi richiedono che tutti i componenti siano oggetti con l’eccezione di tipi di dati primitivi come float e integer. Differiscono dal C++ perchè eseguendo una garbage collection automatica. La garbage collection aggiunge un carico aggiuntivo alle prestazioni ma permette uno sviluppo più rapido. Questi linguaggi rappresentano sia una buona scelta per lo sviluppo di un backtester in quanto hanno funzionalità GUI native, librerie di analisi numerica e velocità di esecuzione veloce.
Personalmente, utilizzo C++ per creare backtest event-driven che richiedono una velocità di esecuzione estremamente elevata, come per i sistemi HFT. Questo solo se ritengo che un sistema event-driven sviluppato con Python possa avere delle prestazioni negative, poiché Python è la mia prima scelta per un sistemi basati sugli eventi.
MATLAB, R e Python
MATLAB è un IDE commerciale per il calcolo numerico. Ha ottenuto ampia diffusione nei settori accademici, ingegneristici e finanziari. Ha molte librerie numeriche per il calcolo scientifico. Vanta una velocità di esecuzione rapida partendo dal presupposto che qualsiasi algoritmo in fase di sviluppo possa essere soggetto a vettorizzazione o parallelizzazione. Nonostante questi vantaggi il costo della sua lincenza lo rende poco attraente per i trader retail con un budget limitato. MATLAB viene talvolta utilizzato per l’esecuzione diretta verso un broker come Interactive Brokers.
R è un ambiente di scripting statistico dedicato. È gratuito, open source, multipiattaforma e contiene una vasta gamma di pacchetti statistici liberamente disponibili per eseguire analisi estremamente avanzate. R è molto usato nelle statistiche accademiche e nel settore quantitativo degli hedge fund. Nonostante sia possibile collegare R ad un broker non è adatto per tali funzionalità, quindi essere considerato come uno strumento di ricerca. Anche la velocità di esecuzione è carente, a meno che le operazioni non siano vettorializzate.
In questa sezione ho incluso anche Python, che si pone a metà tra MATLAB, R e i suddetti linguaggi di uso generale. È gratuito, open source e multipiattaforma. È un linguaggio interpretato in contrasto ai linguaggi compilati (come C++ e Java), il che lo rende nativamente più lento del C ++. Tuttavia, contiene una libreria per svolgere praticamente qualsiasi compito immaginabile, dal calcolo scientifico fino alla progettazione di server Web di basso livello. In particolare, contiene NumPy, SciPy, panda, matplotlib e scikit-learn, che forniscono un robusto ambiente di ricerca numerica che, quando vettorializzato, è paragonabile alla velocità di esecuzione di un linguaggio compilato.
Python possiede anche le librerie per la connessione al broker. Questo lo rende un “one-stop shop” per la creazione di un backtesting basato sugli eventi e un ambiente di esecuzione live senza dover utilizzare altri linguaggi più complessi. La velocità di esecuzione è più che sufficiente per i trader intraday che operano su timeframe ad un minuto o superiore. Python è molto semplice da imparare rispetto ai linguaggi di livello inferiore come il C ++. Per questi motivi facciamo ampio uso di Python all’interno degli articoli di Data Trading.
Ambienti di Sviluppo Integrati
Excel
Software Proprietari / Commerciali
Il mercato dei dei software di backtesting, di visualizzazione grafica dei dati storici e di “analisi tecnica” è estremamente competitivo. Le caratteristiche offerte da tali software includono la creazione di grafici dei prezzi in tempo reale, una vasta gamma di indicatori tecnici, linguaggi di backtesting personalizzati ed esecuzione automatizzata.
Alcuni fornitori offrono una soluzione all-in-one, come TradeStation. TradeStation è un broker online e produttore di un software di trading (anche noto come TradeStation) che fornisce l’esecuzione elettronica degli ordini su più classi di attività. Attualmente non sono a conoscenza di un’API diretta per l’esecuzione automatica. Invece gli ordini devono essere inseriti attraverso il software della GUI. Ciò è in contrasto con Interactive Brokers, che ha una interfaccia di trading più snella (Trader WorkStation), ma offre sia le API proprietarie in tempo reale per il mercato / l’esecuzione degli ordini sia un’interfaccia FIX.
Un’altra piattaforma estremamente popolare è MetaTrader, che viene utilizzata nel trading sul forex per la creazione di “Expert Advisors”. Si tratta di script personalizzati scritti in un linguaggio proprietario che possono essere utilizzati per il trading automatico. Non ho avuto molta esperienza con TradeStation o MetaTrader, quindi non passerò troppo tempo a discutere delle loro caratteristiche.
Tali strumenti sono utili se non ci si sente a proprio agio con la programmazzione e non si desidera considerare troppi fattori e dettagli. Tuttavia, con tali sistemi si sacrifica molta flessibilità e spesso si è vincolati a un’unico broker.
Strumenti Open-Source e Web-Based
I due più popolari web-based sistemi di backtesting sono Quantopian e QuantConnect. Il primo fa uso di Python (e ZipLine, vedi sotto) mentre il secondo utilizza C#. Entrambi forniscono una vasta gamma di dati storici. Quantopian attualmente non supporta più il live trading, mentre QuantConnect supporta il live trading con alcuni dei maggiori broker internazionali (tra cui Interactive Brokers).
Algo-Trader è una società con sede in Svizzera che offre un sistema proprietario sia una licenza open-source che una licenza commerciale. Dalle informazioni disponibili sempra che sia un prodotto robusto e hanno molti clienti istituzionali. Il sistema consente il backtesting completo dello storico e l’elaborazione di eventi complessi e si collega con Interactive Brokers. L’edizione Enterprise offre sostanzialmente più funzionalità ad alte prestazioni.
Marketcetera fornisce un sistema di backtesting che può collegarsi a molti altri linguaggi, come Python e R, al fine di sfruttare il codice che potresti aver già scritto. Lo ‘Strategy Studio’ fornisce la possibilità di scrivere il codice di backtesting e algoritmi di esecuzione ottimizzati e successivamente la transizione da un backtest storico a un paper trading o al trading dal vivo.
ZipLine è la libreria Python che alimenta il servizio Quantopian menzionato sopra. È un ambiente backtest completamente event-driven ed attualmente supporta titoli azionari statunitensi. Non ho fatto ampio uso di ZipLine, ma conosco altri che ritengono che sia un buon strumento. Ci sono ancora molte aree da migliorare, ma il team lavora costantemente al progetto e viene mantenuto molto attivamente.
Ci sono anche alcuni progetti ospitati su Github / Google Code che potresti voler esaminare. Non ho passato molto tempo a studiarli. Tali progetti includono OpenQuant, TradeLink e PyAlgoTrade.
Software di Backtesting Istituzionali
I sistemi di backtesting di livello istituzionale come Deltix e QuantHouse non sono spesso utilizzati dai trader algoritmici retail. Le licenze software sono generalmente ben al di sopra del budget per l’infrastruttura. Detto questo, tali software sono ampiamente utilizzati da fondi d’investimento, società di trading proprietarie, uffici di consulenza finaziaria e simili.
I vantaggi di tali sistemi sono chiari. Forniscono una soluzione all-in-one per la raccolta dei dati, lo sviluppo della strategia, il backtesting storico e l’esecuzione dal vivo su singoli strumenti o portafogli, fino ad altissime frequenze. Tali piattaforme hanno avuto numerosi test e un sacco di “usi sul campo”, sono quindi considerati molto robusti.
I sistemi sono event-driven e gli ambienti di backtesting possono spesso simulare gli trading reale con un alto grado di precisione. I sistemi supportano inoltre algoritmi di esecuzione ottimizzati, che tentano di minimizzare i costi di transazione. Ciò è particolarmente utile per gli operatori con una ampia base di capitale.
Devo ammettere che non ho avuto molta esperienza di Deltix o QuantHouse. Detto questo, il budget da solo li mette fuori dalla portata della maggior parte dei trader al dettaglio, quindi non mi dilungherò su questi sistemi.
Collocazione
Home Desktop
VPS
Il livello successivo consiste nell’utilizzare un server virtuale privato (VPS). Un VPS è un server remoto, spesso commercializzato come servizio “cloud”. Sono molto più economici di un corrispondente server dedicato, dal momento che un VPS è in realtà una partizione di un server molto più grande. Possiedono un ambiente di sistema operativo virtuale isolato disponibile esclusivamente per ogni singolo utente. Il carico della CPU è condiviso tra più VPS e una parte dei sistemi RAM viene allocata al VPS. Tutto ciò viene realizzato attraverso un processo noto come virtualizzazione.
I principali provider VPS includono Amazon EC2 e Rackspace Cloud. Entrambi forniscono sistemi entry-level con poca RAM e utilizzo base della CPU fino a soluzioni business con server multi core e RAM ad altissime prestazioni. Per la maggior parte dei trader algoritmici retail, i sistemi entry level sono sufficienti per le strategie infragiornaliere o interday a bassa frequenza e per i database di dati storici più piccoli.
I vantaggi di un sistema VPS sono la disponibilità 24 ore su 24, capacità di monitoraggio più robuste, semplici “plug-in” per servizi aggiuntivi, come archiviazione di file, la gestione dei database e un’architettura flessibile. Uno svantaggio principale è il costo. Con la crescita del sistema, l’hardware dedicato diventa più economico per unità di prestazioni. Questo approccio si presuppone una collocazione lontana da un exchange.
Rispetto ad un sistema desktop domestico, scegliere un VPS non sempre la latenza usufruisce di miglioramenti. La posizione geografica del tuo desktop casalingo potrebbe essere più vicina a un particolare exchange finanziario rispetto ai data center del provider cloud. Ciò viene mitigato scegliendo un’azienda che fornisce servizi VPS specificamente concepiti per il trading algoritmico che si trovano vicino agli exchange. Questi probabilmente costano più di un provider VPS generico come Amazon o Rackspace.
Internamente all'Exchange
Per ottenere la minore latenza possibile è necessario prevedere l’uso di server dedicati direttamente nel data center di scambio. Questa è un’opzione proibitivamente costosa per quasi tutti i trader algoritmici, a meno che non siano molto ben capitalizzati. È quasi esclusivo dominio dei fondi quantitativi professionali. Come ho detto sopra un’opzione più realistica è quella di acquistare un sistema VPS da un fornitore che si trova vicino ad un exchange.
Come si può vedere, ci sono molte opzioni per il backtesting, l’esecuzione automatizzata e l’hosting di una strategia. Determinare la soluzione più idonea dipende dal budget, dalla capacità di programmazione, dal grado di personalizzazione richiesto, dalla disponibilità degli asset e se il trading è effettuato su base retail o professionale.