In questo articolo approfondiamo il Repainting degli Indicatori con Tradingview, un argomento molto specifico di Tradingview che può causare molta confusione.
In alcuni casi gli script, gli indicatori e le strategie possono cambiare il risultato quando aggiorniamo la pagina. Questo comportamento è chiamato Repaiting. E’ opportuno capire questo fenomeno altrimenti può causare confusione, aspettative irrealistiche e la convinzione che ci siano bug nello script o nello stesso linguaggio pine script. Per un argomento così importante, è sorprendente come la documentazione nel wiki di Tradingview sia scarsa e poco comprensibile.
Ad oggi, se digitiamo “Tradingview repainting” su google, il primo risultato che viene visualizzato è un collegamento al wiki di Tradingview. Si tratta di una pagina dedicata all’argomento. Sfortunatamente, contiene solo poche (preoccupanti) righe!
Pine Script è un linguaggio di programmazione progettato per lo sviluppo di indicatori personalizzati su TradingView. Questo è un linguaggio di programmazione basato su vettori, progettato specificamente per risolvere problemi nel campo dell’analisi tecnica (vedi: Introduzione). Nonostante le vaste capacità del linguaggio di programmazione Pine Script, il potenziale non si è ancora realizzato a causa di un errore nel terminale di esecuzione. Questo errore distorce e cancella gli indicatori tracciati nel grafico e quindi alcuni trade non sono conteggiati durante il processo di backtesting. Questo è indicato come Indicator Repainting.
Oh! Un errore nel terminale di esecuzione che distorce e cancella gli indicatori e quindi alcuni trade non sono conteggiati durante il processo di backtest!! Non solo è un modo complesso di affermare il problema, ma se è la prima cosa che leggiamo sull’argomento possiamo anche decidere di non fare più un backtest con Tradingview. Dopotutto, chi si fiderebbe di un sistema che esclude alcuni trade? Va contro tutto quello che stiamo cercando di ottenere.
Non c’è da aver paura. Per quanto sia mal formulato, non è del tutto negativo. Innanzitutto, descriviamo in modo semplice quello che è tradizionalmente noto come Repainting Indicator. Quindi esaminiamo come il repainting degli indicatori con Tradingview può influire sui risultati. Infine, vediamo se dobbiamo preoccuparci di questo fenomeno.
Repainting degli Indicatori con Tradingview
Nella sua forma più semplice, il repainting degli Indicatori con Tradingview avviene per tutti gli indicatori che sono calcolati basandosi sul prezzo di chiusura di una candela. Durante il trading dal vivo o i foward test, il valore di chiusura della barra corrente cambia costantemente dal momento in cui la barra si apre fino al momento in cui si chiude. Il prezzo di chiusura finale non è noto fino a che la barra non sia completa. Questo significa che l’indicatore viene costantemente “ricalcolato” durante la barra. E’ facile vedere come gli indicatori variano costantemente con ogni nuovo tick ricevuto. Se posizioniamo un RSI sul grafico è facile verificare come si muove ad ogni nuovo dato ricevuto. Poiché l’indicatore si muove prima che la candela si chiuda, può causare falsi segnali.
Al contrario, nel backtesting, riceviamo dati di apertura, massimo, minimo e chiusura tutti allo stesso tempo, quindi non abbiamo visione di tutto il rumore che è accaduto durante la formazione della candela. Con i dati OHLC non vediamo quante volte il prezzo è rimbalzato tra il massimo e il minimo. Inoltre, non vediamo quante volte un indicatore ha emesso un falso segnale, quindi nel backtest abbiamo solo segnali confermati. Per questo motivo nel backtest dobbiamo aspettare fino all’apertura della barra successiva per trasmettere un ordine.
Come può influire il repainting?
In generale, in un ambiente di backtest puro il repainting non ha conseguenze perchè usiamo solamente dati OHLC storici. Potrebbe iniziare a influenzare i risultati quando iniziamo a fare foward test o a lavorare con più timeframe.
Forwad Test
Quando la strategia passa a un ambiente di foward test, dobbiamo essere consapevoli di alcuni aspetti. Prima di tutto, in pinescript, c’è una differenza fondamentale tra le logiche di funzionamento “out of the box” delle strategie e degli indicatori. Una strategia aspetta sempre la chiusura di una barra prima di eseguire qualsiasi calcolo, anche durante i foward test. Questo garantisce che i risultati del forward test si comportino in modo simile ai risultati del backtest.
Il grafico sottostante mostra la differenza tra una strategia e un indicatore. I dati dei prezzi sono stati nascosti mentre sono visibili due serie di medie mobili con gli stessi valori. Una serie di MM proviene da una strategia, l’altra da un indicatore. Possiamo vedere che le serie dell’indicatore si estendono e si aggiornano con i dati in tempo reale. Potrebbe essere necessario strizzare gli occhi per vedere la differenza! Le MA di strategia sono un po’ più spesse e di colore più scuro.
Detto questo, tradingview dispone di un parametro da attivare se vogliamo il repainting di una strategia. Questo parametro è il box “re-calculate on every tick” presente nelle proprietà delle strategie. Si può configurlo anche tramite Pine script. La strategia si aggiornerà allo stesso modo di un indicatore. Le entrate e le uscite saranno effettuate ad ogni nuovo tick acquisito.
Questa logica causa sicuramente un numero maggiore di trade all’interno di una barra, tali trade non sono conteggiati durante un backtest. Diamo un’occhiata ai seguenti esempi (clicca sulle immagini per ingrandirle):
Questo semplice esempio mostra come i trade possano scomparire. Inoltre mostra come entrare al tick (senza aspettare la chiusra della candela) può essere pericoloso. Nella prima immagine abbiamo un segnale di crossover della media mobile che si verifica prima della chiusura della barra e quindi apriamo una posizione short.
Tuttavia, quando guardiamo lo stesso grafico dopo che barra si è chiusa possiamo vedere che il crossover non è stato confermato. Il prezzo è tornato indietro e al prezzo di chiusura le medie mobili non si sono più incrociate. Se eseguiamo lo stesso script con un backtest sui dati storici, questo trade non sarebbe mai avvenuto. Questo fenomeno causa la scomparsa dei trade che gli utenti possono vedere in real-time o nei foward test. Soprattutto quando si aggiorna la pagina dove si ricalcola tutto e ora la barra è un dato storico.
Come accennato nell’articolo “per un backtest realistico con Tradingview”, quando si prende posizione prima che una barra sia chiusa, non stiamo operando sulla price action nel timeframe che stiamo analizzando. Ci sono momenti in cui potremmo farlo, ma in generale non è consigliabile perchè i risultati del backtest non saranno indicativi dei risultati del foward test.
Timeframe multipli
Ci sono due potenziali problemi che possono influenzare il repainting quando iniziamo a utilizzare i dati con timeframe superiore a quello delle nostre strategie.
- Uso accidentale di dati futuri (lookahead bias).
- Campionamento dei dati del timeframe superiore prima che la candela del timeframe superiore si sia chiusa.
Entrambi questi problemi possono causare il repainting. Questo articolo si concentra sui problemi che possono derivare dall’uso accidentale di dati futuri. Nell’articolo “Foward Test di una Strategia e correzione del Repainting con Tradingview” descriviamo i problemi di campionamento. L’argomento è troppo vasto per essere descritto in questo articolo e merita un specifico articolo di approfondimento.
Tradingview aveva un problema nella versione 2 di pine script pine: quando si lavorava su due timeframe, si riceveva i dati storico OHLC completi per il timeframe superiore insieme alla prima barra del timefrime inferiore . Se questo ti sconvolge, pensaci in questo modo. Immaginiamo di lavorare su fasce orarie e giornaliere. La nostra giornata immaginaria è finita ed si è chiusa come:
- Open 10, High 20, Low 5, Close 15.
Successivamente decidiamo di eseguire un backtest con i dati intraday di questa giornata con timeframe giornaliero e orario. Alla prima barra (dopo un’ora dall’inizio della giornata) riceviamo la prima candela oraria e la candela completa della giornata. Questo si ripete ad ogni ora, cioè continuiamo a ricevere la stessa candela giornaliera (con gli stessi dati) per ogni candela oraria 1a alla 24a ora:
- Barra 1: dati orari: open 10, high 11, low 9, close 9.5
- Barra 1: dati giornalieri: open 10, high 20, low 5, close 15.
- Barra 2: dati orari: open 9,5, high 10, low 7, close 8,5
- Barra 2: dati giornalieri: open 10, high 20, low 5, close 15.
- ….e così via per 24 candele
Questo sarebbe fantastico solo se vogliamo apparire come un mago del mercato. Abbiamo già il massimo della giornata, prima della fine della giornata! Abbiamo i dati futuri. Con questi dati potremmo semplicemente impostare un take-profit al prezzo massimo della giornata e avere una percentuale di vittorie del 100%. Ovviamente, questo è un grave difetto dal punto di vista del backtest dato che in realtà non conosciamo il massimo della giornata prima della chiusura del mercato.
A questo punto, possiamo notare che questo “difetto” non è in realtà un problema di per sé. Ci sono casi nell’uso degli indicatori dove è utile conoscere questi valori. Dobbiamo ricordare che lo sviluppo degli indicatori è un aspetto altrettanto importante in pine script.
Nuovo parametro lookahead
Detto questo, nella versione 3 di pine script il problema è stato risolto. La versione 3 prevede un parametro da impostare quando si richiedono dati. Il parametro è chiamato lookahead
. Come suggerisce il nome, permette di guardare avanti e ricevere i dati per l’intero periodo anche se non si è ancora chiuso nel timeframe inferiore. Da notare che questo parametro è disattivato di default. Se stiamo lavorando su una strategia, attivarlo sarebbe una follia.
Diamo un’occhiata a un esempio.
L’esempio mostra una strategia che entra in una posizione long o short al massimo della giornata. Se usiamo i dati in tempo reale una posizione viene creata ogni volta che si raggiunge un nuovo massimo o minimo. Se abbiamo attivato il lookahead e aggiorniamo la pagina, l’indicatore viene ridisegnato e le posizioni aperte scompaiono. Ancora più importante, i risultati non sono realistici. I risultati del backtest sono errati per i motivi descritti in precedenza.
Conclusione
Tradingview e Pine script sono relativamente nuove e ancora in fase di sviluppo. Pertanto, dobbiamo aspettarci di trovare qualche bug qua o là. Tuttavia, a mio parere, il repainting degli indicatori con Tradingview è stato opportunamente corretto nella versione 3 di pine-script e non dovrebbe rappresentare un problema dal punto di vista del backtest. Detto questo, mi piacerebbe sentire opinioni alternative su questo argomento o esempi che potrebbero farmi cambiare idea. Se hai un punto di vista opposto, fammelo sapere e possiamo avere una sana discussione.
Codice completo
In questo articolo approfondiamo il repainting degli indicatori con Tradingview per il trading algoritmico. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/TradingView