In questa introduzione al trading quantitativo avanzato spieghiamo come abbiamo creato DataTrader, un framework open-source in Python per strategie di swing-trading o intraday. Abbiamo aggiornato DataTrader partendo dagli strumenti TQTradingSystem e TQForex, già descritti nei corsi di trading automatico.
Puntiamo a costruire un sistema per il trading quantitativo su più asset, timeframe e strategie. Vogliamo integrare Interactive Brokers come principale connessione. È il momento giusto per rinnovare tutta la nostra infrastruttura di trading.
Introduzione al Trading Quantitativo Avanzato
Per questi motivi abbiamo scelto di scrivere una serie di tutorial per progettare un’infrastruttura completa con portafoglio, gestione ordini, ricerca e backtest. Offriamo anche opzioni per il deploy su server remoti e per l’esecuzione algoritmica. Costruiamo un sistema multi-asset, ma iniziamo da una singola asset class per semplificare la configurazione.
Cominciamo con azioni o ETF USA scambiati su Interactive Brokers a frequenza giornaliera, poiché rappresentano la richiesta più comune tra i nostri utenti.
Con questa serie di articoli vogliamo creare una nuova infrastruttura personale di trading, parte integrante del progetto TradingQuant. Vediamo come garantirne robustezza, efficienza e affidabilità. Documentiamo il processo in modo completo, così da permettere la replica esatta dei risultati ottenuti.
In questo modo confrontiamo le performance delle strategie implementate con lo stesso framework, offrendo la possibilità di replicare completamente i risultati se utilizziamo:
- a) gli stessi identici dati storici elaborati
- b) un insieme identico di seed casuali a qualsiasi modello stocastico utilizzato all’interno del codice.
Spieghiamo come garantire il rispetto di questi due criteri fondamentali durante tutto il processo!
Come fatto in precedenza, rendiamo disponibile il software su GitHub con licenza open source in stile MIT, completo di script e file di configurazione. Così potete progettare il vostro sistema seguendo il nostro modello, oppure iniziare subito a sviluppare strategie con una libreria che gestisce il lavoro più complesso per voi.
Considerazioni sul Design del Sistema
L’obiettivo finale di questo progetto è costruire un portafoglio e un sistema di gestione degli ordini completamente open source, ma di livello professionale, pronto per la produzione, con livelli di gestione del rischio tra le posizioni, i portafogli e l’infrastruttura nel suo insieme.
Sarà automatizzato end-to-end, il che significa che è necessario un intervento umano minimo affinché il sistema possa operare una volta impostato “live”. È impossibile eliminare completamente l’intervento umano, soprattutto quando si tratta di input di qualità dei dati (ad esempio in caso di tick errati), ma è certamente possibile prevedere che il sistema funzioni in modo automatizzato per la maggior parte del tempo.
Considerazioni sul Trading Algoritmico
Come introduzione al trading quantitativo avanzato, progettiamo un sistema che replica l’infrastruttura di un software commerciale o di un piccolo fondo quantistico.
Creiamo un’architettura simile a quella impiegata da un team quantistico all’interno di un trading desk. Strutturiamo il sistema in modo modulare e configurabile.
Includiamo i principali componenti: archivio dati, generatore di segnali, gestione portafoglio e ordini, livello di rischio e interfaccia verso i broker.
Questi moduli spesso si sovrappongono e si integrano. Tuttavia, elenchiamo i componenti “istituzionali” su cui vogliamo costruire l’intero sistema:
- Integrazione con il fornitore di dati: definiamo il primo componente chiave. Comunichiamo con uno o più provider tramite API, come Quandl, DTN IQFeed e Interactive Brokers.
- Importazione e pulizia dei dati: filtriamo e puliamo i dati tra download e archiviazione. Memorizziamo solo i dati che superano controlli. Contrassegniamo quelli “cattivi” e notifichiamo eventuali errori.
- Memorizzazione dei dati sui prezzi: creiamo un database intraday. Archivia i simboli e i prezzi ottenuti dai broker o dai fornitori di dati.
- Memorizzazione dei dati di trading: archiviamo ordini, operazioni e stati del portafoglio. Utilizziamo strumenti di serializzazione come la libreria pickle di Python.
- Archiviazione dei dati di configurazione: salviamo le informazioni di configurazione in un database. Manteniamo la storicità, utilizzando formato tabellare o serializzato (es. pickle).
- Ambiente di ricerca / backtesting: colleghiamo l’ambiente di backtest al database dei prezzi. Simuliamo realisticamente l’esecuzione degli ordini e generiamo test credibili.
- Generazione dei segnali: applichiamo tecniche di machine learning, serie temporali e statistica bayesiana. Generiamo segnali e raccomandazioni operative per il gestore di portafoglio.
- Portfolio / Order Management: il nostro “cuore” riceve i segnali. L’OMS li interpreta come raccomandazioni operative e comunica con il modulo di rischio per finalizzare l’ordine.
- Gestione del rischio: il gestore del rischio agisce su leva, margini, settori e volumi medi. Inseriamo anche una “copertura ombrello” per esposizione settoriale o di mercato.
- Interfaccia al broker: scriviamo codice per collegarci alle API del broker (es. Interactive Brokers). Implementiamo ordini market, limit, stop e altri tipi di ordine.
- Esecuzione algoritmica: integriamo algoritmi per eseguire gli ordini automaticamente. Riduciamo l’impatto sul mercato durante l’esecuzione dei trade.
- Performance e P&L: analizziamo la performance per rispondere alla domanda “Quanto abbiamo guadagnato?”. Spieghiamo come calcolare correttamente il PnL in un sistema professionale.
Considerazioni sullo Sviluppo del Software
L’obiettivo del nostro sistema, a differenza della maggior parte dei sistemi di algotrading “retail”, consiste nel curare aspetti spesso trascurati: alta disponibilità, ridondanza, monitoraggio, rendicontazione, contabilità, qualità dei dati e gestione del rischio nel sistema. In questo modo costruiamo un’infrastruttura con un alto livello di affidabilità nell’automazione, così possiamo concentrarci sull’ottimizzazione della generazione dei segnali e della gestione del portafoglio.
Questi concetti, che derivano in gran parte dall’ingegneria del software professionale, rappresentano la base del nostro progetto:
- Pianificazione automatizzata delle attività: adottiamo un software robusto per gestire cron job e attività pianificate, così assicuriamo l’esecuzione regolare delle attività previste.
- Alta disponibilità: garantiamo un’elevata disponibilità attraverso la ridondanza, implementando più istanze di database e server per le applicazioni fondamentali.
- Backup e ripristino: eseguiamo il backup di tutti i nostri dati tramite sistemi cloud affidabili (come Amazon RDS) per consentire il ripristino immediato in caso di errore.
- Monitoraggio: monitoriamo costantemente il sistema, osservando l’uso di CPU, RAM, disco e rete, per mantenere la salute del nostro sistema di trading.
- Registrazione: registriamo ogni evento possibile in un sistema di logging per individuare rapidamente i guasti e procedere con il debug in modo diretto.
- Reporting: calcoliamo in tempo reale le performance, le confrontiamo con i benchmark e valutiamo dinamicamente il rischio dei nostri sistemi di trading.
- Sistemi di controllo della versione: gestiamo codice, script e configurazioni con un controllo versione, come GitHub, evitando il copia-incolla manuale.
- Sviluppo Test-Driven: adottiamo un approccio TDD, come per TQForex, scrivendo i test unitari prima di sviluppare il codice.
- Distribuzione continua: integriamo integrazione continua e distribuzione continua per distribuire il codice, minimizzando bug e massimizzando l’affidabilità. Approfondiremo questo tema nei prossimi articoli.
- Distribuzione remota: distribuiamo l’infrastruttura completamente nel cloud o su server remoti, così non dipendiamo dall’hardware locale per il nostro trading system.
Conclusione
Come introduzione al trading quantitativo avanzato, il primo passo è descrivere lo stack del software e gli strumenti da utilizzare per costruire il sistema di trading. Questo include l’hosting provider, il controllo della versione e i sistemi di distribuzione continua, gli strumenti di monitoraggio. Inoltre prevede meccanismi di archiviazione dei dati (inclusi backup e ripristino), nonché la fondamentale scelta del broker e le prestazione dell’interfaccia API che mette a disposizione.
Nel prossimo articolo descriviamo tutti i fornitori che sono all’altezza delle prestazione previste dal sistema, oltre a una ragionevole stima dei costi. Inoltre descriviamo in modo dettagliato le effettive implementazioni di questa infrastruttura.
Il codice completo presentato in questo articolo, basato sul framework di trading quantitativo event-driven DataTrader, è disponibile nel seguente repository GitHub: https://github.com/tradingquant-it/DataTrader.”