Strategy Tester – Backtest Trading System

Strategy Tester è l’applicazione che ti consente di eseguire backtest di trading system sviluppati con il linguaggio di programmazione Overbasic.

Un backtest consiste nell’applicare il trading system ad uno o più strumenti (serie storiche) ed ottenere un report dettagliato sui risultati prodotti: elenco dei segnali generati, andamento del capitale, profitti/perdite, commissioni, operazioni vincenti/perdenti consecutive, drawdown, run-up, ecc. Questo report può essere esportato in un file di testo (.txt, .csv) utilizzabile con Excel o altri fogli di calcolo.

Per eseguire un backtest devi:

  1. Accedere a Strategy Tester
  2. Creare una Strategia
  3. Avviare il Backtest
  4. Consultare il Report prodotto

Accedi a Strategy Tester #

Puoi accedere a Strategy Tester in uno dei seguenti modi:

  • dalla finestra principale di Overcharts > menu Tools > Strategy Tester
  • dalla finestra del workspace > menu Tools > Strategy Tester

Crea una Strategia #

Per eseguire il backtest di uno (o più) trading system è necessario creare una strategia. Una strategia mette in relazione uno (o più) trading system con gli strumenti (serie storiche) dove eseguire il test, definendo tutti i parametri di test e in particolare: il range e la risoluzione dei dati, l’account di simulazione, i costi delle operazioni, slippage, ecc.

Per creare una strategia:

  • finestra principale di Strategy-Tester > menu File > Nuova Strategia
  • oppure finestra principale di Strategy-Tester > premi il bottone Nuova Strategia nella toolbar in alto
  • oppure finestra principale di Strategy-Tester > Tab Home > premi il bottone Nuova nella toolbar a sinistra

Dopo aver definito il nome della strategia si aprirà in automatico la finestra di configurazione:

Aggiungi i trading system da testare #

Puoi aggiungere uno (o più) trading system alla strategia, in uno dei seguenti modi:

  • dalla finestra di configurazione della strategia > premi il link Aggiungi Trading System
  • oppure dalla finestra di configurazione della strategia > bottone Trading System > Aggiungi Trading System

Puoi aggiungere più trading system ad una singola strategia. In questo caso, il report conterrà i risultati dei test di tutti i trading system.

I test sono SEMPRE indipendenti l’uno dall’altro. In altre parole, se una strategia contiene 2 trading system, il test del trading-system-1 NON influirà in alcun modo nel test del trading-system-2.

Aggiungi gli strumenti ai trading system #

Aggiungi, per ogni trading system, gli strumenti (serie storiche) dove eseguire il test.

Puoi aggiungere uno (o più) strumenti ad un trading system, in uno dei seguenti modi:

  • premi il link Aggiungi Strumenti affianco al trading system
  • oppure seleziona il trading system > bottone Strumenti > Aggiungi Strumenti

Definisci le Proprietà #

Definisci le proprietà generali e quelle specifiche per ogni trading-system / strumento.

Le proprietà NON corrette vengono marcate con un’apposita icona rossa e nella sezione in basso viene descritto dettagliatamente l’errore:

Proprietà Generali

Dati #

Tipo Caricamento: specifica la modalità di caricamento dei dati storici:

  • Ultimi x Giorni: carica gli ultimi x giorni.
  • Ultimi x Mesi: carica gli ultimi x mesi. Es. Se x=1 e oggi è il 15 giugno, saranno caricati i dati a partire dal 16 maggio.
  • Ultimi x Anni: carica gli ultimi x anni. Es. Se x=1 e oggi è il 15 giugno, saranno caricati i dati a partire dal 16 giugno dell’anno precedente.
  • Intervallo date: carica l’intervallo date specificato.
  • Giorni Precedenti la data specificata: (sconsigliato) carica x giorni precedenti una data specificata. Da usare solo se davvero necessario.
  • n Giorni a partire dalla data specificata: (sconsigliato) carica x giorni a partire da una data specificata. Da usare solo se davvero necessario.
  • Ultime x Barre: (sconsigliato) carica le ultime x barre.
  • Barre precedenti la data/ora specificata: (sconsigliato) carica x barre precedenti una data/ora specificata. Da usare solo se davvero necessario.
  • n Barre a partire dalla data/ora specificata: (sconsigliato) carica x barre a partire da una data/ora specificata. Da usare solo se davvero necessario.

Percentuale Walk Forward: defisce (in percentuale) la porzione di serie storica da utilizzare nel test Walk Forward. Lo scopo principale di un test Walk Forward è quello di determinare se la buona performance di un trading system ottimizzato è il risultato illusorio dell’overfitting, oppure è il risultato di un modello di trading robusto in grado di prevedere la dinamica dei prezzi del mercato e quindi di essere profittevole sui dati di mercato non noti, successivi all’ottimizzazione.
Definendo opportunamente la proprietà Percentuale Walk Forward nella configurazione della strategia, puoi dividere la serie storica utilizzata nel test in due parti. Verranno eseguiti quindi 2 test, uno sulla prima parte della serie storica e l’altro (Walk Forward) sulla parte restante ottenedo due report distinti. Potrai confrontare i risultati ottenuti nelle due parti della serie storica simulando di fatto una prima ottimizzazione del trading system e la sua successiva applicazione nel mercato “reale”.

Risoluzione #

La risoluzione è generalmente l’intervallo di tempo rappresentato da ogni barra del grafico. Diciamo ‘generalmente‘ perché in realtà le risoluzioni Tick, Contratti, Punti, non rappresentano un intervallo di tempo preciso, ma un ammontare di tick, contratti (volume), punti (range). In questi particolari tipi di risoluzione ogni barra contiene un numero specifico di tick, contratti, punti e può durare un tempo indefinito (fino a che la barra non raggiunge l’ammontare specificato non viene chiusa).

Tipo Risoluzione + Unità di Risoluzione: specificano la risoluzione del grafico. Per esempio, se il tipo risoluzione è Minuti e l’unità di risoluzione è uguale a 5, ogni barra del grafico rappresenta 5 minuti.

Risoluzioni disponibili:

  • Tick: l’unità di risoluzione rappresenta il numero di tick (trade) contenuto in ogni singola barra. La barra viene chiusa al raggiungimento dell’ammontare di tick specificato.
  • Contratti (Volume Bar): l’unità di risoluzione rappresenta la quantità di volume contenuta in ogni singola barra. La barra viene chiusa al raggiungimento dell’ammontare di volume specificato. Il volume può essere espresso in numero di contratti/azioni oppure in denaro dipendentemente dal data-feed.
  • Punti (Range Bar): l’unità di risoluzione rappresenta il range di prezzo (in punti) di ogni singola barra (1 Punto = Tick-size = Minimo-Movimento-di-Prezzo dello strumento). La barra viene chiusa al raggiungimento del range di prezzo specificato.
  • Secondi: ogni barra rappresenta x secondi
  • Minuti: ogni barra rappresenta x minuti
  • Ore: ogni barra rappresenta x ore
  • Sessioni: ogni barra rappresenta x sessioni di trading
  • Giorni: ogni barra rappresenta x giorni
  • Settimane: ogni barra rappresenta x settimane
  • Mesi: ogni barra rappresenta x mesi
  • Trimestri: ogni barra rappresenta x trimestri
  • Anni: ogni barra rappresenta x anni

Costruisci utilizzando il time frame…: (da usare SOLO in casi particolari) rappresenta il time frame che verrà utilizzato per costruire il grafico. Il valore di default di questa proprietà è Automatico e ti consigliamo di NON cambiarlo a meno di particolari esigenze. Ad esempio, puoi cambiarlo se desideri creare un grafico con risoluzione ‘Giornaliera‘ o ‘Settimanale‘ utilizzando il time frame a 1-Minuto anziché il time frame a 1-Giorno. Devi sapere che nel time frame a 1-giorno fornito dai vari data-feed, di solito il valore di apertura (Open) e di chiusura (Close) del giorno NON corrispondono al primo e ultimo prezzo battuto durante la sessione di trading, ma sono ricavati da aste e/o da medie degli ultimi x trade (settlement). Per questo motivo, la barra di un grafico a risoluzione giornaliera o settimanale costruito usando il time frame a 1-giorno può essere diversa dalla stessa barra costruita usando il time frame a 1-minuto (compreso il volume totale della barra).

Tipo Prezzo: tipo prezzo da utilizzare per la costruzione del grafico (Trade, Bid, Ask). A meno di particolari esigenze, nel 99% dei casi userai sempre e solo Trade.

Costi & Capitalizzazione #

Account di Simulazione: specifica quale account di simulazione utilizzare nel test.

Slippage: lo slippage è un modo veloce per quantificare l’eventuale costo aggiuntivo causato da diversi eventi che possono verificarsi durante l’esecuzione di un ordine ‘a Mercato’ (non ha effetto sugli ordini con limite di prezzo, se non diversamente specificato). Può essere definito a livello di trade (ordine di acquisto o vendita), oppure a livello di azione/contratto. Se il valore specificato è inferiore al minimo movimento di prezzo delle strumento (tick-size), lo slippage reale può essere maggiore di quello definito nella proprietà.

Tipi di slippage disponibili:

  • Fisso per Trade: lo slippage specificato viene applicato a livello di Trade.
  • Fisso per Azione/Contratto: lo slippage specificato viene applicato per ogni azione/contratto.
  • Percentuale: utilizzando il metodo di calcolo percentuale, lo slippage viene determinato dinamicamente secondo una percentuale dell’intervallo tra il prezzo ottimale e il prezzo peggiore di esecuzione. Il prezzo ottimale rappresenta il prezzo ‘a mercato’ nel momento in cui viene generato il segnale. Il prezzo peggiore corrisponde al prezzo massimo della barra nel caso di un segnale di acquisto oppure al prezzo minimo della barra nel caso di un segnale di vendita.

Opzioni Generali di Trading #

Se capitale non sufficiente..: Se il capitale disponibile non è sufficiente per eseguire tutta la quantità del trade, è possibile annullare il segnale oppure ricalcolare la quantità in base al capitale disponibile. Se dopo il ricalcolo la quantità risulterà uguale a zero, il segnale verrà annullato. Nel caso di segnali di stop and reverse, il segnale non viene annullato completamente, ma viene eseguita solo la parte necessaria per uscire dalla posizione corrente.

Prezzo di esecuzione di un ordine limite: definisce la modalità in cui viene determinato il prezzo di esecuzione di un ordine limite. Questa proprietà ha effetto SOLO durante il backtest. Possibili valori:

  • Oltrepassato di x tick: l’ordine viene considerato eseguito solo quando il prezzo corrente oltrepassa di x tick il prezzo limite dell’ordine (1 tick rappresenta il minimo movimento di prezzo specificato nella configurazione dello strumento).
  • Raggiunto: l’ordine viene considerato eseguito quando il prezzo corrente raggiunge il prezzo limite dell’ordine.

Quantità del trade (se non specificata dal trading system): Specifica come calcolare la quantità del trade (singola operazione di acquisto o vendita), nel caso in cui la quantità non sia stata definita dal trading system. Possibili valori:

  • Quantità Fissa: viene utilizzata la quantità fissa definita.
  • Usa tutto il capitale disponibile: la quantità viene determinata in base al capitale disponibile al momento della generazione del segnale.
  • Usa questo capitale: la quantità viene determinata in base al capitale definito.
  • Usa una percentuale del capitale disponibile: la quantità viene determinata in base ad una percentuale del capitale disponibile al momento della generazione del segnale.

BackTesting – Opzioni di trading #

Generazione Ordine all’interno della barra: Se abilitata, il trading system sarà in grado di eseguire più trade nella stessa barra.

Bar Magnifier: (abilitata SOLO se è attiva la generazione ordine all’interno della barra) Definisce la risoluzione dati da utilizzare durante il test nel caso in cui sia attiva la generazione ordine all’interno della barra. La risoluzione del Bar-Magnifier DEVE essere inferiore e compatibile con la risoluzione specificata nella sezione Risoluzione. Per esempio, se la risoluzione principale è 1-Giorno, quella del Bar-Magnifier dovrà essere 1-Ora, 1-Minuto o qualsiasi altra risoluzione compatibile ed inferiore a 1-Giorno. In questo modo, la barra a 1-Giorno sarà suddivisa in tante piccole barre permettendo la generazione di più ordini durante la giornata.

Option & Proprietà del Trading system #

Selezionando il trading system nella sezione a sinistra, puoi definire il valore delle Proprietà e delle Option pubbliche del trading system (definite nel codice sorgente).

Mentre il valore delle Proprietà è fisso per tutta la durata del test, quello delle Option varia.

Una Option è a tutti gli effetti una proprietà numerica con un range di validità ben definito. La procedura di backtest testerà automaticamente tutti i valori che le Option possono assumere (dal valore minimo al valore massimo aggiungendo ad ogni nuovo test il valore di incremento), allo scopo di produrre per ogni combinazione di Option un test completo del trading system. Nel report potrai confrontare il risultato prodotto dalle varie combinazioni di Option ed individuare i valori che producono i migliori risultati.

Personalizza le proprietà a livello di Strumento #

Per ogni strumento puoi personalizzare le Proprietà Generali definite e le Option & Proprietà del trading system.

Per personalizzare le Proprietà Generali di configurazione:

  1. Seleziona lo strumento nella sezione di sinistra.
  2. Seleziona la Tab Configurazione a destra.
  3. Seleziona il check-box Personalizza Proprietà (posizionato sopra la griglia delle proprietà).
  4. Modifica le proprietà secondo le tue esigenze.

Per personalizzare le Option & Proprietà del trading system:

  1. Seleziona lo strumento nella sezione di sinistra.
  2. Seleziona la Tab Option & Proprietà del trading system a destra.
  3. Per personalizzare le Option, seleziona Personalizzate nella proprietà Option (da codice sorgente).
  4. Per personalizzare le Proprietà, seleziona Personalizzate nella proprietà Proprietà (da codice sorgente).
  5. Modifica le Option / Proprietà secondo le tue esigenze.

Salva la Strategia #

Per salvare la strategia:

  • premi il bottone Salva nella toolbar in alto
  • oppure da menu FILE > seleziona Salva la Strategia

Modifica una Strategia #

Puoi modificare in ogni momento una strategia esistente.

Accedi alla strategia in uno dei seguenti modi:

  • nella Tab HOME > treeview a sinistra > doppio click sul nome della strategia
  • oppure nella Tab HOME > treeview a sinistra > click destro sulla strategia > Modifica
  • oppure nella Tab Home > seleziona la strategia nel treeview a sinistra > premi il bottone Modifica nella toolbar sopra al treeview

Quindi modifica la strategia secondo le tue esigenze e premi Salva.

Avvia un Backtest #

Per avviare il backtest di una strategia:

  • nella Tab HOME > treeview a sinistra > click destro sulla strategia > Nuovo test ‘Individuale’
  • oppure nella Tab HOME > seleziona la strategia nel treeview a sinistra > premi il bottone NUOVO TEST nella toolbar sopra la sezione report > Nuovo Test ‘Individuale’

Si aprirà la finestra di lancio nuovo test.

Fase 1: Controllo configurazione #

La procedura di avvio backtest controllerà la configurazione della strategia. In presenza di errori nella configurazione, non sarà possibile proseguire con il test. Dovrai correggere tutti gli errori riscontrati modificando opportunamente la strategia.

Se il controllo è superato, premi AVANTI per proseguire con la Fase 2.

Fase 2: Definizione parametri di lancio #

Definisci i seguenti parametri di lancio:

Nome del Test: nome del test/report.

Cash o Punti: specifica il tipo di test. In un test di tipo ‘Cash‘ il capitale disponibile e il margine richiesto influiscono sulla determinazione della quantità dei trade. In un test di tipo ‘Punti‘ il capitale disponibile NON viene considerato. Il guadagno/perdita è espresso in punti assoluti (non in valuta). Ad esempio, se lo strumento viene acquistato a 100 e venduto a 120, i punti di guadagno assoluti saranno 20 per ogni singola quantità.

Numero di combinazioni da memorizzare: definisce il numero massimo di risultati da memorizzare. Un risultato è un test completo eseguito utilizzando una determinata combinazione di Option.

Criteri di ordinamento: la procedura di test eseguirà tanti test quante sono le combinazioni di Option. Il numero di combinazioni possono essere moltissime. I criteri di ordinamento indicano alla procedura di test come selezionare le migliori x combinazioni. Puoi definire fino a 10 criteri di ordinamento.

Premi AVANTI per proseguire con la Fase 3.

Fase 3: Avvio del Test #

Il test viene avviato. Chiudi pure la finestra di lancio premendo il bottone FINE.

Puoi controllare lo stato di avanzamento del test, metterlo in pausa o arrestarlo completamente dalla Tab HOME della finestra principale di Strategy Tester:

Attendi il completamento del test, quindi accedi al relativo report dalla lista report:

I report sono SOLO locali. NON vengono sincronizzati tra le tue postazioni Overcharts.