Lo script cambia risultato se aggiorno la pagina (repainting)

I dati storici non includono i movimenti di prezzo intraday, ma solo i valori di apertura, chiusura, massimo e minimo (OHLC). Ciò può portare uno script a funzionare in modo diverso a seconda che i dati siano storici o in tempo reale, poiché in quest'ultimo caso si conosce solo il prezzo di apertura ed il prezzo si muove su vari livelli prima di stabilire effettivamente i valori di massimo, minimo e chiusura definitivi.

Se aggiungiamo uno script al grafico, aspettiamo che faccia i suoi calcoli sui dati in tempo reale e poi aggiorniamo la pagina, potrebbe accadere che il risultato dello script appaia leggermente diverso. Questo comportamento è solo uno dei tanti che sono compresi in un fenomeno tipico chiamato, in inglese, indicator repainting. Quando noi però ci riferiamo al repainting, intendiamo solo questo particolare comportamento, il quale scaturisce dall'uso di diverse funzionalità utilizzate nella costruzione degli script per cui i dati storici e quelli in tempo reale vengono calcolati in maniera differente.

Solitamente vengono inclusi in questa categoria, non sempre correttamente, comportamenti quali plot di funzioni con offset negativo di barre passate e/o l'utilizzo di informazioni future ricevute tramite chiamate errate della funzione request.security, che possono portare ad includere dei dati non disponibili in tempo reale all'interno del calcolo di uno script.

Non tutti gli indicatori subiscono lo stesso tipo di repainting discusso qui. In molte circostanze dipende dal tipo di funzioni o di costrutti logici adoperati all'interno del codice. Ti preghiamo dunque di non considerare un bug questo comportamento: è semplicemente il risultato di differenze insite nell'erogazione dei dati in tempo reale e/o storici su TradingView.

Possiamo assistere al repainting nei seguenti casi:

1. In strategie che usano calc_on_every_tick=true. Può succedere anche se è impostato su false, ma più sporadicamente.

2. Quando si utilizza la funzione request.security per richiedere dati da un timeframe più alto di quello del grafico su cui ci troviamo:

// Add this indicator on 1 minute chart
//@version=5
indicator("My Script")
c = request.security(syminfo.tickerid, "5", close)
plot(close)
plot(c, color=color.red)

Questo script calcolerà in modo differente i dati storici o in tempo reale, indipendentemente dal valore del parametro lookahead (consulta l'argomento lookahead nel manuale).

3. Quando si utilizza la funzione request.security per richiedere dati da un timeframe più basso di quello applicato al grafico principale (più informazioni qua):

// Add this indicator to a 5 minute chart
//@version=5
indicator("My Script")
c = request.security(syminfo.tickerid, "1", close, lookahead=barmerge.lookahead_off)
plot(close)
plot(c, color=color.red)

Se lookahead=false, si verificherà il repainting. Se è uguale a true, è meno probabile, ma può comunque verificarsi se gli aggiornamenti a 1 e 5 minuti si superano a vicenda.

4. Tutti gli script con calcoli che dipendono da un punto di partenza. I dati intraday vengono allineati con l'inizio della settimana, del mese o dell'anno a seconda del timeframe. Questo genera dei risultati che possono differire di tanto in tanto.

Per intenderci, ecco i casi in cui gli script dipendono da un punto di partenza:

  • quando si utilizzano le funzioni valuewhen, barssince o ema (a causa delle peculiarità del loro algoritmo)
  • qualsiasi strategia di backtesting (indipendentemente da come viene definito il parametro calc_on_every_tick)

C'è una correlazione tra il timeframe ed il punto di partenza:

  • 1–14 minuti — si allinea con l'inizio della settimana
  • 15–29 minuti — si allinea con l'inizio del mese
  • dai 30 minuti in su — si allinea con l'inizio dell'anno

Quando vengono elaborati i dati, sono considerate le seguenti limitazioni sul periodo storico:

  • 40000 barre storiche per i piani Ultimate
  • 30000 barre storiche per i piani Elite
  • 25000 barre storiche per i piani Expert
  • 20000 barre storiche per i piani Premium
  • 10000 barre storiche per i piani Pro e Pro+
  • 5000 barre storiche per gli altri pian
5. Quando ci sono variazioni dei dati storici, ad esempio a seguito di un frazionamento .

6. La presenza delle seguenti variabili nello script porta solitamente al verificarsi del repainting: