Il DAX30 è l’indice composto dai 30 titoli maggiormente capitalizzati quotati alla borsa di Francoforte, tra cui attualmente ci sono società finanziarie come Deutsche Bank, farmaceutiche come Bayer, automobilistiche come BMW e di servizi come E.ON o Deutsche Telekom.

Derivato di quest’indice, il future del DAX (simbolo FDAX) rappresenta senza dubbio uno dei prodotti finanziari europei più scambiati nelle piazze di tutto il mondo; in questo articolo ci concentreremo su questo simbolo per capire e sfruttare una sua caratteristica molto particolare: il BIAS notturno.

Vuoi un aiuto per migliorare il tuo approccio al trading? Clicca qui >>>

Dobbiamo fare una precisazione in merito alla sessione del FDAX: fino al 2018 gli orari di scambio del FDAX erano fissati dalle 8:00 alle 22:00 orario di Francoforte. A fine 2018, l’EUREX (Exchange di riferimento per i derivati europei) ha esteso questa finestra, includendo le primissime ore del giorno, per agevolare l’ingresso dei mercati asiatici. Da allora, la sessione inizia alla 1:10 per terminare alle 22:00. In questo articolo ci baseremo sulla “vecchia” sessione, che prevede quindi una pausa “notturna” di ben 10 ore tra le 22:00 e le 8:00 del mattino seguente.

Come scoprire il BIAS di uno strumento finanziario

Possiamo definire un BIAS come un comportamento ricorrente nel tempo; alcuni strumenti hanno mantenuto un BIAS costante dal 2008 ad oggi e tra questi possiamo annoverare il DAX.

Abbiamo accennato ad un BIAS “notturno” del FDAX. Cosa intendiamo dire?

Cerchiamo di capire meglio di cosa stiamo parlando, avvalendoci di un semplice tool che simuli l’acquisto del FDAX ad una certa ora e la sua vendita esattamente un’ora dopo e questo per tutte le ore del giorno dalle 8:00 alle 22:00.

Il tool consiste in un codice di poche righe, scritte in PowerLanguage, che applichiamo sul chart del FDAX con timeframe orario e dati a partire dal 2010:

input: mycounter(0);

var: mycount(0);

if isStartOfSession then mycount = 0;

mycount = mycount + 1;

if mycounter = mycount then buy next bar at market;

if marketposition = 1 then sell next bar at market;

La variabile mycount viene resettata con la funzione booleana isStartOfSession, la quale si avvera ad ogni avvio di sessione; ad ogni cambio barra, inoltre, mycount si incrementa di una unità da 1 fino a 14 (tante sono le barre orarie della sessione).

Facendo variare l’input mycounter da 1 a 14, possiamo conoscere il profit & loss che avremmo ottenuto acquistando un contratto ad una determinata ora e vendendolo un’ora dopo.

Facciamo qualche esempio:

  • imponendo mycounter uguale a 1, abbiamo il permesso di comprare al termine della prima barra: entriamo quindi a mercato alle 9:00, per chiudere la posizione alla barra successiva, ossia alle 10:00
  • imponendo mycounter uguale a 14, abbiamo il permesso di comprare al termine dell’ultima barra: entriamo quindi a mercato all’apertura della giornata successiva, ossia alle 8:00, e chiudiamo la posizione alla barra successiva, ossia alle 9:00.

Al variare di mycounter, otteniamo i risultati visibili in figura 1.

Figura 1 – Profit&Loss del trading system bias sul Dax nelle diverse fasce orarie

Ogni riga mostra il profitto o la perdita totale che si avrebbe avuto se, a partire dal 2010, avessimo comprato un contratto di FDAX ad una determinata ora e l’avessimo venduto un’ora dopo. Osserviamo che esiste un arco temporale della giornata in cui si ottengono quasi sempre profitti con entità significativa.

Questo intervallo (cerchiato in verde nella tabella) coincide con l’ingresso a mercato alle 17:00 e l’uscita alle 9:00 del mattino seguente; peraltro, notiamo come la maggior parte dei profitti sia concentrata proprio a cavallo del cambio di sessione (con ingresso alle 21:00 e uscita alle 9.00). Ecco scovato un BIAS e spiegato perché possa essere definito “notturno”!

Ora non ci resta che sfruttare questa caratteristica, creando una strategia di trading.

Una semplice strategia di trading per sfruttare il BIAS del DAX

Per impostare l’orario di ingresso alle 17:00 e quello di uscita alle 9:00 del giorno successivo, scriviamo le seguenti righe di codice:

input: MyEntryHour(1700), MyExitHour(900);

if time = MyEntryHour then buy next bar market;

if marketposition = 1 and time >= MyExitHour and date <> entrydate then sell next bar market;

Questo è un sistema davvero semplice che opera solo dal lato long, ma che dal 2010 produce metriche già buone come visibile in figura 2.

Figura 2 – Equity line e metriche del trading system bias sul Dax con ingresso alle 17:00 e uscita alle 9:00

Quella sopra è la curva dei profitti ottenuti operando ogni giorno, senza alcuna condizione aggiuntiva; è quindi normale che il numero dei trade coincida con il numero di giornate borsistiche dal 2010 ad oggi. La curva è certamente crescente e con una buona regolarità, anche se in un paio di periodi ha accusato una discesa evidente.

Il sistema non ha alcuno stop loss, ma dobbiamo considerare che, per l’intero periodo dalle 22:00 alle 8:00 seguenti, questo comando non avrebbe alcun effetto, poiché non potrebbe essere eseguito a mercato chiuso. Si può quindi pensare di lasciare la strategia senza uno stop loss, considerando la presenza di un’uscita temporale dei trade impostata alle 9:00.

Per testarne comunque l’efficacia, aggiungiamo queste 2 righe al sistema:

input: SL(0);

if SL > 0 then setstoploss(SL);

Successivamente lanciamo un’ottimizzazione del parametro SL da 2.000€ a 5.000€ a step 500€, ottenendo i risultati visibili in figura 3.

Figura 3 – Ottimizzazione stop loss del trading system bias sul Dax

Notiamo che uno stoploss di 3.000€ abbassa il Max DD del sistema, anche se riduce l’average trade di circa il 10%; decidiamo comunque di tenerlo per limitare la massima perdita della strategia, ottenendo questa nuova curva dei profitti e le metriche visibili in figura 4.

Figura 4 – Equity line e metriche del trading system bias sul Dax con ingresso alle 17:00, uscita alle 9:00 e aggiunta dello stop loss

La curva ci potrebbe soddisfare, ma lo strumento su cui stiamo lavorando richiede un average trade decisamente maggiore, per poter coprire i costi operativi e le commissioni. Inoltre, questa strategia resta a mercato durante il cambio sessione e durante il week end, per cui necessita di un average trade superiore.

Migliorare le metriche filtrando la strategia bias sul DAX

Dobbiamo quindi metter mano al codice aggiungendo qualche condizione che ne migliori le metriche. Ricordiamoci che, per ora, stiamo entrando a mercato tutti i giorni, a prescindere dall’andamento dei prezzi; potremmo allora verificare se sia conveniente operare solo se il prezzo delle 17:00 non sia diminuito eccessivamente rispetta a quello delle 8:00 dello stesso giorno.

Aggiungiamo queste ulteriori 2 righe al codice:

var: con1(true);

con1 = close >= opend(0) * 0.995;

Queste righe di fatto bloccherebbero l’ingresso se il prezzo delle 17:00 risultasse inferiore dello 0.5% al prezzo di apertura delle 8:00. La riga di apertura dell’ordine long diventa:

if time = MyEntryHour and con1 then buy next bar market;

Così facendo, otteniamo una nuova curva dei profitti e le metriche visibili in figura 5.

Figura 5 – Equity line e metriche del trading system bias sul Dax con ingresso alle 17:00, uscita alle 9:00, stop loss attivo e filtro aggiuntivo

Osserviamo che la curva è più regolare rispetto alla precedente, il Max DD si è ridotto di circa 10K€ e l’average trade ha fatto un balzo in avanti da 110€ a 170€, abbassando il numero dei trade di circa il 25%. La condizione che abbiamo aggiunto ha quindi dato un ottimo contributo e la integriamo nel sistema.

A questo punto possiamo anche verificare se convenga operare solo nel caso in cui la chiusura di ieri non sia avvenuta ad un livello troppo vicino ai massimi di giornata; possiamo infatti immaginare che, dopo una giornata di significativo rialzo, sia meglio non puntare su un ulteriore rialzo del mercato. Come sempre, il modo migliore per rispondere alle nostre domande è fare un test e analizzare i risultati.

Aggiungiamo quindi queste ulteriori 2 righe al codice:

var: con2(true);

con2 = (closed(1)-lowd(1)) < 0.75 * (highd(1)-lowd(1));

Dove:

  • closed(1)-lowd(1) indica la distanza della chiusura di ieri rispetto al minimo di ieri
  • highd(1)-lowd(1) indica il range della giornata di ieri

Queste due righe consentono l’ingresso a mercato, solo se tale distanza è inferiore al 75% del range. La riga di apertura dell’ordine diventa:

if time = MyEntryHour and con1 and con2 then buy next bar market;

Così facendo otteniamo una nuova curva dei profitti e le metriche visibili in figura 6.

Figura 6 – Equity line e metriche del trading system bias sul Dax con ingresso alle 17:00, uscita alle 9:00, stop loss attivo e 2 filtri aggiuntivi

Notiamo che la curva è molto simile alla precedente, il Max DD è rimasto inalterato, ma l’average trade è salito ulteriormente da 170€ a 207€, riducendo il numero dei trade di circa il 35%.

Dando un’occhiata al report annuale dei profitti (figura 7), constatiamo con piacere che non ci sia stato alcun anno in perdita dal 2010.

Figura 7 – Annual Period Analysis del trading system bias sul Dax con le varie modifiche

Anche questa seconda condizione ha dato un ottimo contributo e quindi la integriamo nel nostro sistema.

Conclusioni del trading system BIAS sul DAX

Abbiamo scoperto una caratteristica intrinseca del FDAX: il BIAS notturno; l’abbiamo sfruttata per creare una strategia profittevole con pochissime condizioni e abbiamo ottenuto una curva dei profitti crescente e molto regolare. Abbiamo inoltre ottenuto un buon average trade per questo strumento, che può essere ulteriormente migliorato aggiungendo altre condizioni che filtrino gli ingressi a mercato.

Ci possiamo ritenere quindi molto soddisfatti e lasciamo ai lettori il codice finale per ulteriori test sul FDAX: l’indice che cresce di notte!

Vuoi un aiuto per migliorare il tuo approccio al trading? Clicca qui >>>

input: MyEntryHour(1700), MyExitHour(900);

input: SL(3000);

var: con1(true), con2(true);

con1 = close >= opend(0) * 0.995;

con2 = (closed(1)-lowd(1)) <0.75 * (highd(1)-lowd(1));

if time = MyEntryHour and con1 and con2 then buy next bar market;

if marketposition = 1 and time >= MyExitHour and date <> entrydate then sell next bar market;

if SL > 0 then setstoploss(SL);

Alla prossima e buon trading!

Andrea Unger

 

Tag: , , , ,