Nel primo articolo sul backtesting di una strategia sono stati introdotti i bias statistici e comportamentali che influenzano le prestazioni del backtest. Inoltre sono stati descritti i principali linguaggi di programmazione usati per il backtesting, tra cui Excel, MATLAB, Python, R e C ++. In questo articolo si vuole descrivere come incorporare i costi di transazione ed alcune vincoli che devono essere introdotti quando si crea un motore di backtest, come i tipi di ordine e la frequenza dei dati.
Costi di Transazione
Uno degli errori più diffusi dei principianti quando si implementano modelli di trading è di trascurare (o grossolanamente sottostimare) gli effetti dei costi di transazione su una strategia. Inoltre spesso si presume che i costi di transazione comprendano solo le commissioni dei broker. Esistono in realtà molti altri modi in cui i costi possono essere accumulati in un modello di trading. I tre principali tipi di costi che devono essere considerati includono quanto segue
Commissioni
La forma più diretta di costi di transazione causati dall’esecuzione di una strategia di trading algoritmico sono le commissioni. Tutte le strategie richiedono una qualche forma di accesso a un mercato, direttamente o attraverso un intermediario (“il broker”). Questi servizi comportano un costo incrementale con ogni operazione, nota come commissione.
Generalmente i broker forniscono molti servizi, quindi le commissioni di intermediazione sono spesso piccole per un trade base. Inoltre i broker addebitano altri tipi di commissioni, che tengono conto dei costi sostenuti per gestire e liquidare le posizioni. Oltre a questo ci sono le imposte dei governi regionali o nazionali. Ad esempio, è prevista l’imposta di bollo per le transazioni in titoli azionari. Poiché le commissioni, le tasse e le imposte sono generalmente fisse, è relativamente semplice da implementare queste logiche in un motore di backtest (vedi il codice sotto).
Slippage/Latency
Lo slippage è la differenza di prezzo raggiunta tra il momento in cui un sistema di trading decide di effettuare una operazione e il momento in cui una operazione viene effettivamente eseguita nel mercato. E’ una componente considerevole dei costi di transazione e può fare la differenza tra una strategia molto redditizia e una che fa perdere denaro. Lo slippage è funzione della volatilità delle attività sottostanti, della latenza tra il sistema di trading e l’exchange e del tipo di strategia in corso.
Uno strumento con maggiore volatilità ha più probabilità che si verifichi dei movimenti e quindi i prezzi tra il segnale ed l’esecuzione possono essere diversi. La latenza è definita come la differenza di tempo tra la generazione del segnale e il punto di esecuzione. Le strategie di frequenza più elevata sono più sensibili ai problemi di latenza e anche solo migliorare le performance di pochi millisecondi può fare la differenza in termini di redditività.
Anche il tipo di strategia è importante. Le strategie di momentum sono più influenzate dallo slippage perché stanno cercando di acquistare strumenti che si stanno già muovendo nella direzione prevista. Mentre per le strategie di mean-reverting risento poco dello slippage, poiché queste strategie stanno operando in direzione opposta al mercato.
Market Impact/Liquidity
L’impatto sul mercato è il costo sostenuto dai trader a causa delle dinamiche domanda / offerta dell’exchange (e del strumento) con il quale si sta operando. Un ordine importante su un asset relativamente illiquido potrebbe sostanzialmente spostare il mercato dato che l’exchange avrà bisogno di accedere a una grande percentuale della quantità disponibile per quel specifico asset.
Per contrastare questo, le grandi operazioni sono suddivise in “blocchi” più piccoli e vengono negoziate periodicamente, appena entra nuova liquidità nel mercato. Al contrario, per gli strumenti altamente liquidi come il contratto futures E-Mini sull’indice di S&P500, è improbabile che le operazioni a basso volume provochi l’esecuzione di un solo blocco di questi grandi ordini.
Inoltre le attività illiquide sono caratterizzate da uno spread più ampio, che è la differenza tra gli attuali prezzi bid e ask presenti nell’order-book. Questo spread è un costo di transazione aggiuntivo, presente per ogni trade. Lo spread è una componente molto importante del costo totale della transazione.
Modelli di Costi di Transazione
Al fine di modellare con successo i costi di cui sopra all’interno di un sistema di backtesting, sono stati introdotti modelli di transazioni con vari gradi di complessità. Si va dalla semplice modellazione flat a un’approssimazione quadratica non lineare. Di seguito illustreremo i vantaggi e gli svantaggi di ciascun modello.
Modelli Flat / a costo di transazione fisso
I costi di transazione flat sono la forma più semplice di modellazione dei costi di transazione. Si assume un costo fisso associato ad ogni operazione. Pertanto rappresentano al meglio il concetto di fees e commissioni di intermediazione. Non sono molto accurati per la modellazione di comportamenti più complessi come lo slippage o l’impatto sul mercato. In realtà, non considerano affatto la volatilità degli asset o la loro liquidità. Il loro principale vantaggio è che sono computazionalmente semplici da implementare. Tuttavia, è probabile che i costi di transazione siano significativamente inferiori o superiori a seconda della strategia utilizzata. Quindi nella pratica sono raramente usati.
Modelli di costo Lineare / Lineare a tratti / Quadratica
I modelli più evoluti iniziano con una struttura lineare, passando per modelli lineari a tratti fino a raggiungere una formulazione quadratica. Questi approcci si collocano lungo un continuum in cui l’accuratezza cresce proporzionalmente alla complessità computazionale richiesta.
Poiché fenomeni come slippage e impatto sul mercato sono per loro natura non lineari, le funzioni quadratiche risultano le più efficaci nel descrivere tali dinamiche. Sebbene siano più complesse da implementare e richiedano maggior tempo di calcolo rispetto ai modelli lineari o flat, sono anche quelle più diffuse nelle applicazioni professionali.
Dati storici e modelli personalizzati
I trader algoritmici più esperti cercano di migliorare ulteriormente l’accuratezza dei modelli di transazione basandosi sui dati storici reali delle operazioni effettuate in produzione. Questi dati vengono utilizzati come input per affinare le stime dei costi, adottando approcci avanzati per modellare volatilità, slippage e impatto sul mercato.
Quando una strategia gestisce elevati volumi in brevi intervalli di tempo, una stima realistica dei costi di transazione può incidere significativamente sulla redditività complessiva. Per questo motivo, investire nella modellazione accurata di questi costi rappresenta una leva strategica fondamentale per migliorare la bottom line della strategia.
Criticità nell’implementazione del backtesting di una strategia
Nonostante i costi di transazione sono un aspetto molto importante per l’implementazione di un backtesting efficiente, ci sono molti altri problemi che possono influenzare le prestazioni della strategia.
Tipi di Ordini
Una delle decisioni fondamentali per un trader algoritmico riguarda la scelta di quando e come utilizzare i diversi tipi di ordini messi a disposizione dall’exchange o dal broker. Questa scelta, sebbene ricada principalmente nell’ambito del sistema di esecuzione, può influenzare in modo significativo anche le prestazioni della strategia in fase di backtesting.
Esistono due categorie principali di ordini eseguibili: ordini a mercato e ordini limite.
Ordini a Mercato
Un ordine a mercato viene eseguito immediatamente, al miglior prezzo disponibile nel book. Questo tipo di ordine non tiene conto del prezzo, ma solo della rapidità di esecuzione. Di conseguenza, operazioni di grandi dimensioni eseguite con ordini a mercato vengono spesso “spalmate” su diversi livelli di prezzo, in quanto attraversano una sequenza di piccoli ordini limite presenti nel book.
Gli ordini a mercato sono considerati ordini aggressivi, poiché vengono eseguiti quasi con certezza. Tuttavia, comportano un costo potenzialmente variabile e sconosciuto, dovuto allo slippage e all’impatto sul mercato.
Ordini Limite
Gli ordini limite consentono alla strategia di specificare il prezzo massimo (per un acquisto) o minimo (per una vendita) al quale l’ordine può essere eseguito. Ciò significa che il prezzo di esecuzione è garantito, ma l’ordine potrebbe non essere eseguito, o esserlo solo parzialmente, qualora il mercato non raggiunga quel prezzo.
Questi ordini sono considerati ordini passivi, in quanto forniscono liquidità al mercato. L’insieme degli ordini limite attivi su un exchange costituisce il limit order book, una coda di ordini di acquisto e vendita suddivisi per prezzo e quantità.
Implicazioni nel Backtesting di un strategia
Quando si esegue un backtest, è fondamentale modellare correttamente gli effetti derivanti dall’utilizzo di ordini a mercato o limite. In particolare, per strategie ad alta frequenza, i backtest possono risultare fortemente ottimistici se non si tiene conto in modo accurato dell’impatto sul mercato e della struttura reale del limit order book.
Una simulazione realistica dell’esecuzione è essenziale per ottenere stime attendibili sulla redditività e sul rischio della strategia nel trading reale.
Peculiarità dei dati OHLC
Esistono criticità specifiche legate all’utilizzo di dati giornalieri nel formato Open-High-Low-Close (OHLC) durante il backtesting di strategie, in particolare quando si lavora con titoli azionari. È importante sottolineare che questo formato è ampiamente utilizzato dalla maggior parte dei trader algoritmici retail.
I dataset economici gratuiti o accessibili a basso costo, oltre a essere soggetti al bias di sopravvivenza (discusso nella Parte I), sono spesso costruiti aggregando i prezzi da più exchange. Questo comporta che i valori estremi — open, high, low, close — possano risultare distorti a causa di movimenti marginali, spesso generati da ordini di piccola entità effettuati su mercati regionali meno liquidi.
Inoltre, questi dati compositi sono più suscettibili agli errori di tick, che possono non essere stati correttamente filtrati o corretti.
Implicazioni per le Strategie di Trading
Se la tua strategia fa un uso intensivo di uno qualsiasi dei punti OHLC, c’è un rischio concreto che i risultati del backtest non riflettano accuratamente la realtà operativa. Questo perché gli ordini, nel trading live, possono essere eseguiti su exchange diversi in base al broker utilizzato e al livello di accesso alla liquidità disponibile per l’asset considerato.
Come Mitigare il Problema
L’unico modo realmente efficace per ridurre l’impatto di questi problemi consiste nel:
- Utilizzare dati a frequenza più elevata (intra-day, tick o minuto).
- Oppure procurarsi dati direttamente da un singolo exchange, evitando feed compositi che mescolano prezzi da più fonti.
Conclusioni
Nelle prossime lezioni vedremo come misurare correttamente le performance del backtesting di una strategia, e presenteremo un esempio pratico di algoritmo di backtesting che tiene conto di molti degli effetti sopra descritti.