Il Daily Factor: un filtro per fare trading con la volatilità
La price action si basa sul concetto di definire l’operatività in funzione della configurazione assunta dai prezzi battuti dal mercato. Anche alla Unger Academy® si usano i pattern di prezzo all’interno dei sistemi di trading, ma mai come punto di partenza: si insegna invece quando e come utilizzarli. Vengono impiegati come filtri, applicati a motori base e impostati su un tipo di operatività specifica.
Oggi parliamo di un pattern – il Daily Factor – che ci consente di lavorare sulla volatilità del mercato. Vedremo il perché, cercando di capire quale impatto abbia su alcuni strumenti.
Vuoi un aiuto per migliorare il tuo approccio al trading? Clicca qui >>>
Cos’è il Daily Factor?
Per capire cosa sia il “Daily Factor” (DF) scopriamo come rappresentare i prezzi con una “candela giapponese” e cosa siano il “Body” e il “Range” della candela stessa.
Quella raffigurata in figura 1 è una rappresentazione a candela dei prezzi battuti dal mercato in una sessione: possiamo distinguere i prezzi di apertura e chiusura, così come il livello minimo e massimo toccati durante la giornata.
In una candela giornaliera dei prezzi, il Body misura la distanza tra il prezzo di apertura e quello di chiusura del mercato, mentre il Range misura la distanza tra il prezzo minimo e quello massimo toccati durante la sessione. In questo articolo faremo sempre riferimento ad un DF con timeframe daily.
Il DF calcola il rapporto tra il Body e il Range:
Il DF misura quanto i prezzi del giorno prima si sono spostati dall’apertura alla chiusura, rispetto alla loro escursione massima; potrà quindi assumere valori compresi tra 0 e 1 (o tra 0 e 100% se espresso in percentuale).
Questo pattern è dipendente dalla volatilità e non ci fornisce informazioni sulla direzione del mercato: un DF molto basso indica che i prezzi si sono mossi poco rispetto alla loro massima escursione; viceversa, un DF molto alto indica che i prezzi si sono mossi in modo deciso segnando una giornata decisamente rialzista o ribassista.
Volendo calcolare il DF usando PowerLanguage, scriveremo:
Var: DF(0);
if (highS(1) – lowS(1)) <> 0 then begin
DF = absvalue(openS(1) – closeS(1)) / (highS(1) – lowS(1));
end;
Nel codice con openS(1), highS(1), lowS(1) e closeS(1) calcoliamo rispettivamente i prezzi di apertura, massimo, minimo e di chiusura della sessione precedente.
Una volta ottenuto il valore del DF (DF), potremo confrontarlo con una soglia da noi impostata (DF_level) e verificare se sia maggiore o minore di quel valore; anche DF_level, di conseguenza, potrà variare tra 0 e 1.
Quanto incidono i diversi livelli di DF?
Per rispondere a questa domanda dobbiamo avvalerci del parametro DF_level e dell’aggiunta di un semplice codice che calcoli la percentuale delle occorrenze su vari mercati dal 2010 ai giorni nostri.
input: DF_level(0);
var: contaDF(0), contasession(0), dateInDateTimeFormat(0), datereadable(“”);
dateInDateTimeFormat = ELDateToDateTime(date);
datereadable = FormatDate(“dd-MM-yyyy”, dateInDateTimeFormat);
if DF < DF_level then contaDF = contaDF+1;
contasession=contasession+1;
print(File(“C:\test.txt”),datereadable,” “,DF_level,” “,contaDF,” “,contasession);
Con questo codice andiamo a contare tutte le volte in cui il mercato ha prodotto un DF < DF_level e le rapportiamo al numero totale di sessioni; calcoliamo quindi tali occorrenze (in percentuale) per diversi mercati e per diversi DF_level.
Dai risultati mostrati sopra, notiamo che un DF_level = 0.1 porti ad avere un basso numero di occorrenze in tutti i mercati analizzati; stiamo contando tutte quelle giornate in cui il body è stato inferiore al 10% del range ed è naturale che tale numero sia molto basso trattandosi di un caso limite.
D’altra parte vediamo che un DF_level = 0.9 restituisce un numero molto alto di occorrenze; stiamo infatti cercando tutte quelle sessioni in cui il body è stato inferiore al 90% del range, evento che accade quasi sempre.
In figura 4 è possibile vedere l’analisi dei casi intermedi (25%, 50%, 75%).
Dai tre casi mostrati sopra, capiamo come, al crescere del valore DF_level, si ha un numero crescente di casi in cui DF < DF_level.
Inoltre, possiamo notare che un DF_level = 0.5 porti ad avere un numero di occorrenze di circa il 50% – 60% nei mercati analizzati. Se usiamo quest’ultima condizione come filtro operativo per abilitare gli ingressi a mercato (operare solo se ieri il DF è stato inferiore al 50%), sarà normale che il numero dei trade del sistema si ridurrà del 40% – 50%.
Un semplice sistema di test da applicare a diversi mercati
Valutiamo ora l’effetto che può avere il DF se inserito in una semplice strategia di trading che, secondo una logica trend following, apre una posizione long se i prezzi superano il massimo livello raggiunto nelle ultime n barre oppure, al contrario, apre una posizione short se i prezzi scendono sotto il livello minimo toccato nelle ultime n barre.
Creiamo un basket che contenga future del CME come indici azionari, bond, metalli ed energetici e plottiamo ogni strumento con un timeframe a 30 minuti a partire dal 2010.
In particolare, utilizzeremo il seguente codice applicato ai future @CL, @RB, @HO, @GC, @ES, @US:
input: DF_level(1), length(40), SL(0);
var: DF(0);
if (highS(1) – lowS(1)) <> 0 then begin
DF = absvalue(openS(1) – closeS(1)) / (highS(1) – lowS(1));
end;
if DF < DF_level then buy next bar at (highest(high, length)) stop;
if DF < DF_level then sellshort next bar at (lowest(low, length)) stop;
if SL > 0 then setstoploss(SL);
Vuoi un aiuto per migliorare il tuo approccio al trading? Clicca qui >>>
Tale codice lancia ordini a rottura dei livelli minimi e massimi di un canale formato dalle ultime 40 barre. Non abbiamo ancora introdotto alcun DF (impostando DF_level = 1) e non abbiamo introdotto alcuno stop loss: lo abbiamo fatto per avere, in questa prima fase, il minor numero possibile di condizioni e per vedere come rispondono i singoli sottostanti.
Dai risultati mostrati in figura 5 possiamo dire che il comparto energetico – rappresentato da @CL, @RB e @HO – abbia certamente fornito una risposta positiva.
D’altra parte possiamo invece notare che @ES e @US non abbiano mostrato risultati degni di nota.
I risultati: come cambiano le metriche di un sistema con o senza l’utilizzo del filtro DF?
Da quanto mostrato finora si desume che gli strumenti energetici si prestano bene ad essere sviluppati con una logica trend following; tra questi, il @CL sembra essere il più debole, avendo fornito il minor NetProfit e il minor Average trade. Proviamo allora a concentrarci proprio su questo strumento, per vedere se l’applicazione del filtro DF possa in qualche modo apportare un beneficio al sistema.
In figura 6 è visibile l’ottimizzazione del parametro DF_level che facciamo variare da 0 a 100% a step di 5% ciascuno.
Nel riquadro blu troviamo le metriche già viste in assenza di DF, in quello verde invece vediamo un range di valori di DF_level che permettono:
- un aumento del NetProfit, che passa da 167K$ fino a 248K$;
- un notevole aumento dell’Average trade, che passa da 60$ fino a 222$;
- un aumento del Max DD che passa da circa 40K$ a oltre 100K$.
Questi risultati ci permettono di trarre qualche prima conclusione:
- il DF ha avuto un deciso impatto sul sistema spostandone decisamente le metriche.
- Scegliendo un valore di DF_level all’interno del range indicato in verde, otteniamo un beneficio dalla parte dei profitti, ma aumentiamo anche il rischio, alzando il Max Drawdown del sistema; ciò probabilmente è dovuto al minor numero di trade che porta anche le operazioni in perdita a durare più a lungo.
- Se restassimo in una zona “intermedia”, ossia attorno al valore DF_level = 0.7, potremmo mitigare il Max Drawdown, pur migliorando le metriche del sistema iniziale in assenza di DF.
Non abbiamo ancora introdotto nella strategia alcuno stop loss, lasciando di fatto i trade liberi di raggiungere anche perdite considerevoli senza nessuna possibilità di uscita; applicando invece uno stoploss, potremo limitare la perdita massima di ciascun trade al valore impostato, riducendo di conseguenza il Max Drawdown raggiunto dall’intero sistema.
Proviamo allora ad inserire uno stop loss monetario: decidiamo di impostare DF_level = 0.35 (che massimizza i profitti e mostra risultati stabili nel suo intorno) e di lanciare un’ottimizzazione dello stoploss in un range da 0$ a 3.000$, a step 200$.
Dalla tabella mostrata sopra capiamo che inserire uno stop loss tra 2.000$ e 3.000$ ci consente di mantenere alti il Net Profit e l’Average trade del sistema, riducendo sensibilmente il Max Drawdown.
Uno stop loss di 2.400$ ci appare quindi un buon compromesso per mantenere Net Profit e Average trade alti e per riportare il Max Drawdown a valori simili a quelli del sistema iniziale (senza DF e senza stop loss).
Dopo l’introduzione dello stop loss, proviamo infine confrontare il sistema appena ottenuto con quello senza l’applicazione del DF; come sempre, cerchiamo la risposta confrontando le principali metriche dei due sistemi:
Visti questi numeri, possiamo certamente dire di non aver più dubbi sull’efficacia del DF applicato al nostro sistema sul @CL: mantenendo il Max Drawdown ad un livello simile, l’introduzione del DF ha innalzato il Net Profit del 43% e l’Average trade è più che triplicato, raggiungendo un valore ottimo per questo strumento.
Efficacia del DF nel comparto dei future energetici
Essendo abbastanza correlati tra loro, ci aspetteremmo che altri future energetici, quali il @RB e il @HO, abbiano una risposta simile al DF, beneficiando anch’essi del suo contributo.
Lasciando inalterato il codice e lo stop loss a 2.400$ per il @RB, quello che segue è il report di ottimizzazione del DF: l’area attorno al valore DF_level = 0.35 mostra che l’Average trade è passato da 159$ (in assenza di DF) a oltre 266$ riducendo pure il Max Drawdown del sistema.
Ripetendo la prova sul @HO (sempre con uno stoploss di 2.400$), quello che segue è il report di ottimizzazione del DF: anche in questo caso, l’area attorno al valore DF_level = 0.35 porta l’Average trade da 113$ (in assenza di DF) a oltre 210$, lasciando il Max DD quasi inalterato.
Conclusioni finali e ulteriori utilizzi del DF
Abbiamo mostrato come, nel caso dei principali future energetici, permettere l’ingresso a mercato solo a seguito della presenza di un DF abbia avuto un deciso impatto sulle metriche del sistema, innalzando sensibilmente sia l’Average trade che il Net Profit, e riducendo il Max Drawdown.
In particolare, le metriche miglioravano maggiormente quando il DF era inferiore ad un livello attorno al 40%; questo corrisponde ad attendere una forte compressione di volatilità del mercato avvenuta il giorno precedente, prima di entrare in posizione alla rottura di livelli significativi del nostro strumento.
Volendo proseguire lo studio, potremmo riprendere quei sottostanti che avevamo tralasciato all’inizio, perché non avevano fornito una buona risposta alla strategia originale in assenza di DF:
Potremmo quindi verificare, sempre in assenza di stoploss, come cambierebbero le metriche applicando un DF < DF_level con DF_level = 0.35:
Possiamo notare che strumenti azionari (@ES) e obbligazionari (@US) non sembrano affatto beneficiare dell’introduzione del DF impostato a questo livello; d’altro canto, però, i metalli (qui rappresentati dal @GC) mostrano Average trade crescenti, se pur innalzando il Max Drawdown. Per questi ultimi, si potrà abbassare la perdita massima aggiungendo uno stop loss e si potrà procedere con il loro sviluppo, partendo dai risultati ottenuti con questo pattern davvero potente.
Vuoi un aiuto per migliorare il tuo approccio al trading? Clicca qui >>>
Alla prossima e buon trading!
Andrea Unger