Il backtesting è probabilmente la parte più critica del processo di produzione di una Strategia di Trading Sistematico (STS), e si colloca tra lo sviluppo della strategia e la sua implementazione (trading dal vivo). Se una strategia è viziata, è auspicabile che un backtesting rigoroso metta in evidenza queste criticità, evitando che una strategia in perdita venga resa operativa.

Numerose funzionalità correlate si sovrappongono al backtesting, tra cui il trading simulato (o paper trading) e il trading dal vivo (o live trading). Il backtesting utilizza i dati storici per quantificare le prestazioni di una  STS. I simulatori di trading fanno un ulteriore passo avanti visualizzando l’attivazione dei trade e la performance dei prezzi per ogni barra o candela. Il trading simulato / live implementa un STS testandola in tempo reale: segnalando i trade, generando ordini, indirizzando ordini verso il broker, quindi mantenendo le posizioni man mano che gli ordini vengono eseguiti.

La maggior parte dei framework va oltre il backtesting ed includono alcune funzionalità di trading dal vivo. Questo è utile se si desidera eseguire l’implementazione dal framework di backtesting, che funziona anche collegato ad un broker e le fonti di dati preferite. Quantopian / Zipline fa un ulteriore passo avanti, fornendo una soluzione di sviluppo, backtesting e implementazione completamente integrata.

La comunità Python è ben fornita di questi strumenti, infatti ha a disposizione almeno sei framework di backtesting open source. Questi sono comunque in varie fasi di sviluppo e documentazione. Se vuoi lavorare con un team che costruisce un framework di backtesting open source, controlla i loro repository Github.

Prima di valutare i framework di backtesting, vale la pena definire i requisiti della tua STS.

Quali sono gli asset che vuoi tradare? La maggior parte dei framework supportano i dati del mercato azionario statunitense, mentre nel caso una strategia operi su derivati, ETF o altri strumenti, è necessario prevedere una specifica gestione se non è prevista dallo specifico framework. Il framework può gestire futures e opzioni a lunghezza finita e generare automaticamente operazioni di rollover? Per quanto riguarda i mercati illiquidi, quanto deve essere realistica un’ipotesi quando si eseguono ordini di grandi dimensioni?

Su quale frequenza dei dati è basata la tua STS? Un sistema di trading che richiede ogni tick o bid / ask ha un insieme molto diverso di problemi di gestione dei dati rispetto a un intervallo di 5 minuti o ogni ora. I grandi fondi hedge e i società HFT hanno investito in modo significativo nella costruzione di strutture di backtesting robuste e scalabili per gestire il volume e la frequenza dei dati. Alcune piattaforme forniscono un ricco set di dati ricco per varie le classi di attività come titoli S&P, con una risoluzione di un minuto.

Che tipo di ordine richiede la tua STS? Come minimo, gli ordini limite, gli ordini stop e gli OCO dovrebbero essere supportati dal framework.

Livello di assistenza/supporto e di documentazione. Le piattaforme in fase iniziale hanno una scarsa documentazione, in poche hanno un’assistenza dedicata che non sia i forum della community.

Le componenti di un Framework di Backtesting

Acquisizione dei dati e STS: i componenti di acquisizione dati utilizzano i file di definizione della STS e i relativi script per fornire i dati necessari per il test. Se il framework richiede che qualsiasi STS sia ricodificata prima del backtest, allora il framework dovrebbe supportare le funzioni per gli indicatori tecnici più popolari per accelerare i test della STS. Gli utenti determinano il periodo storico nel quale effettuare il backtesting in base a ciò che fornisce il framework o che cosa sono in grado di importare.

Il test delle performance applica la logica della STS alla finestra dei dati storici richiesti e calcola un’ampia gamma di metriche di rischio e rendimento, compresi il Shape Ratio, il Drawdown massimo e il Sortino Ratio. La maggior parte di tutti i framework supporta un numero decente di capacità di visualizzazione, tra cui le curve equity e le statistiche dettagliate.

L’ottimizzazione tende a richiedere la grande maggioranza delle risorse di calcolo durante l’analisi di una STS. Se la tua STS richiede un’ottimizzazione, concentrati su un framework che supporti l’elaborazione  distribuita / parallela e scalabile.

Nel contesto di strategie sviluppate utilizzando indicatori tecnici, gli sviluppatori di sistemi tentano di trovare un insieme ottimale di parametri per ciascun indicatore. Molto semplicemente, l’ottimizzazione potrebbe scoprire che una STS basata sul crossover di due medie mobile di 6 e 10 giorni ha registrato maggiori profitti sul test con i dati storici rispetto a qualsiasi altra combinazione di periodi compresi tra 1 e 20. Già con questo semplice esempio, 20 * 20 = 400 combinazioni di parametri devono essere calcolati e classificati.

In un contesto di portafoglio, l’ottimizzazione cerca di trovare la ponderazione ottimale di ogni asset nel portafoglio, inclusi strumenti shorted e leveraged. Su base periodica, il portafoglio viene ribilanciato, con conseguente acquisto e vendita degli strumenti che compongono il portafoglio, come richiesto per allinearsi con l’ottimizzazione effettuata.

Il dimensionamento delle posizioni è un ulteriore utilizzo dell’ottimizzazione, che aiuta gli sviluppatori di sistemi a simulare e analizzare l’impatto della leva e il dimensionamento dinamico della posizione su una STS e sulle prestazioni del portafoglio.

Cinque Framework di Backtesting implementati in Python

Le funzionalità standard di  piattaforme per il backtesting, scritti in Python ed open source devono includere:

  • Logica Event-Driven
  • Licenze molto flessibili e non restrittive
  • Una buona raccolta di indicatori tecnici predefiniti
  • Calcolo della metrica delle prestazioni standard / capacità di visualizzazione / reporting

PyAlgoTrade

PyAlgoTrade è un framework di backtesting maturo, completamente documentato, con funzionalità di paper trading e live. Il supporto dati include Yahoo! Finance, Google Finance, NinjaTrader e qualsiasi tipo di serie temporali basate su CSV come Quandl. I tipi di ordine supportati includono Market, Limit, Stop e StopLimit.

PyAlgoTrade supporta il trading di Bitcoin tramite Bitstamp e la gestione degli eventi di Twitter in tempo reale.

Pagina del progetto: github.com/gbeced/pyalgotrade
Licenza: Apache 2.0

 

bt – Backtesting for Python

bt mira a favorire la creazione di blocchi di strategie facilmente testabili, riutilizzabili e flessibili per facilitare il rapido sviluppo di complesse strategie di trading”.

Il framework è particolarmente adatto alla verifica di STS basate sul portafoglio, perchè include algoritmi dedicati all’analisi degli asset e al ribilanciamento del portafoglio. La modifica di una strategia da eseguire su diverse frequenze temporali o ponderazioni delle risorse alternative comporta un minimo di modifica del codice. bt è costruito sulla base di ffn – una libreria di funzioni finanziarie per Python.

Pagina del progetto: pmorissette.github.io/bt
Licenza: MIT

 

Backtrader

Questa piattaforma è eccezionalmente ben documentata, con un blog di presentazione e una comunità on-line attiva per la pubblicazione di domande e richieste di funzionalità. Backtrader supporta una serie di formati di dati, inclusi file CSV, DataFrame di Pandas  e feed di dati in tempo reale da tre broker. Questi feed di dati sono accessibili simultaneamente e possono anche rappresentare diversi intervalli temporali. I Broker supportati includono Oanda per il trading FX e il trading di classi multi-asset tramite Interactive Brokers e Visual Chart.

Pagina del progetto: www.backtrader.com
Github: github.com/mementum/backtrader
Licenza: GPL v3.0

 

pysystemtrade

Lo sviluppatore di pysystemtrade Rob Carver ha un ottimo post che discute perché ha deciso di creare un altro framework di backtesting di Python e gli argomenti a favore e contro lo sviluppo del framework. Il framework di backtesting per pysystemtrade è discusso nel libro di Rob, “Systematic Trading”.

pysystemtrade elenca una serie di funzionalità di roadmap, tra cui un back tester completo che include tecniche di ottimizzazione e calibrazione e scambi di futures completamente automatizzati con Interactive Brokers. I contributori open source sono i benvenuti.

Pagina del progetto: github.com/robcarver17/pysystemtrade
Licenza: GPL v3.0

 

Zipline

Zipline è un simulatore di trading algoritmico con funzionalità di paper trading e live trading. Accessibile tramite l’interfaccia IPython Notebook basata su browser, Zipline fornisce una facile alternativa agli strumenti da riga di comando. Supportato e sviluppato da Quantopian, Zipline può essere utilizzato come framework di backtesting autonomo o come parte di un ambiente di sviluppo, test e distribuzione completo di STS per Quantopian / Zipline. Zipline fornisce 10 anni di dati storici sulle azioni statunitensi a risoluzione minima e una serie di opzioni per l’importazione dei dati.

Pagina del progetto: zipline.io
Github: github.com/quantopian/zipline
Licenza: Apache 2.0

 

Conclusioni

È la natura umana concentrarsi sulla ricompensa dello sviluppo di un STS (si spera proficuo), quindi operare il prima possibile sul mercato reale (perché siamo fiduciosi), senza spendere sufficientemente tempo e risorse per testare a fondo la strategia. Ma il backtesting non è solo un deterrente che ci impedisce di implementare strategie imperfette e di perdere capitale con il trading, ma fornisce anche una serie di strumenti diagnostici che possono informarci sul processo di sviluppo di una STS. Ad esempio, testare un’indentica STS su due intervalli di tempo diversi, comprendere il massimo drawdown di una strategia nel contesto delle correlazioni di asset e creare portafogli più intelligenti effettuando il backtest delle allocazioni di asset in più aree geografiche.

Nei post futuri, mi dedicherò a descrivere dettagliatamente le caratteristiche e le funzionalità di alcuni di questi framework e l’uso di varie tecniche di campionamento come bootstrap e jackknife per il backtesting di modelli di trading predittivo

Recommended Posts