Script ou estratégia dá resultados diferentes depois de atualizar a página (repintura)

Os dados históricos não incluem registros de movimentos de preço intra-barra; somente abertura, máxima, mínima e fechamento (OHLC). Isso leva a que um script às vezes funcione de maneira diferente em dados históricos e em tempo real, onde apenas o preço de abertura é conhecido e o preço normalmente se move muitas vezes antes que os valores máximos, mínimos e próximos do final da barra em tempo real sejam definidos após o fechamento da barra.

Se adicionarmos um script a um gráfico, aguardar até que ele calcule várias barras em tempo real e recarregar a página, às vezes veremos os gráficos de um script mudarem um pouco. Esse comportamento é um dos poucos tipos diferentes de comportamentos comumente referidos como repintura de indicadores. É o tipo de repintura que estamos preocupados aqui e ao qual nos referiremos ao usar a repintura. Isso se deve ao fato de que, quando certos recursos são usados em scripts, eles calculam de maneira diferente nas barras históricas e em tempo real.

Outros tipos de comportamento, chamados de repintar correta ou incorretamente, incluem plotagem com um deslocamento negativo em barras passadas e o uso de informações futuras indisponíveis, recebidas por meio de chamadas incompreendidas para a função de segurança, que podem introduzir dados não disponíveis em tempo real nos cálculos de script.

Nem todos os indicadores estão sujeitos ao tipo de repintura que discutimos aqui. Na maioria dos casos, depende se determinadas funções ou construções de linguagem são ou não usadas no código. Observe que esse efeito de repintura não é um bug; é o resultado das diferenças inerentes entre barras históricas e informações de barras em tempo real no TradingView.

Podemos ver repintura nos seguintes casos:

1. Estratégias usando calc_on_every_tick = true. Uma estratégia com o parâmetro calc_on_every_tick = false também pode ser passível de repintar, mas em menor grau.

2. Usando a segurança para solicitar dados de uma resolução superior à resolução do símbolo principal do gráfico:

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

Este estudo calculará de maneira diferente os dados históricos e em tempo real, independentemente do valor do parâmetro lookahead (consulte noções básicas sobre lookahead).

3. Usando a segurança para solicitar dados de uma resolução menor que a resolução do símbolo principal do gráfico (mais informações aqui):

// Add this study on 5 minute chart
//@version=3
study("My Script")
c = security(tickerid, "1", close, lookahead=false)
plot(close)
plot(c, color=red)

Se lookahead = false, a repintura ocorrerá. Quando lookahead = true, a repintura é menos provável. Ainda pode acontecer quando as atualizações de 1 e 5 minutos se superam.

4. Todos os scripts que os cálculos, dependendo de um ponto de partida. Os dados intradiários são alinhados ao início da semana, mês ou ano, dependendo da resolução. Devido a isso, os resultados produzidos por esses scripts podem diferir de tempos em tempos. Estes são casos em que os scripts dependerão de um ponto de partida:

  • quando eles usam funções valuewhen, barssince ou ema (devido a peculiaridades em seu algoritmo)
  • qualquer estratégia de backtesting (independentemente de como o parâmetro calc_on_every_tick está definido)

Existe uma dependência entre a resolução e o alinhamento de um ponto de partida:

  • 1 – 14 minutos – se alinha ao início de uma semana
  • 15–29 minutos – se alinha ao início de um mês
  • a partir de 30 minutos ou mais – se alinha ao início de um ano

As seguintes limitações dos comprimentos do histórico são levadas em consideração ao processar os dados:

  • 40000 barras históricas para todos os planos Ultimate
  • 30000 barras históricas para todos os planos Elite
  • 25000 barras históricas para todos os planos Expert
  • 20000 barras históricas para todos os planos Premium
  • 10000 barras históricas para todos os planos Pro e Pro+ 
  • 5000 barras históricas para todos os outros planos

5. Alterações nos dados históricos, por exemplo, devido a uma divisão.

6. A presença das seguintes variáveis no script geralmente leva à repintura: