Backtest com mais precisão com a Lupa de Barra

May 30, 2022

Os usuários de contas Premium podem agora obter preenchimentos de ordens mais realistas em suas estratégias, usando a opção Lupa de Barra. Esta ferramenta utiliza a inspeção intrabarra para obter uma granularidade mais detalhada na movimentação de preços dentro de uma barra, permitindo preenchimentos de ordens mais precisos. Quando selecionado, o modo Lupa de Barra substitui as suposições que o emulador da corretora precisa fazer no movimento de preços por apenas valores OHLC para barras históricas.

O intervalo de tempo intrabarras usado com a Lupa de Barras se ajusta dinamicamente com o intervalo de tempo do gráfico. Esta tabela lista o intervalo de tempo intrabarras utilizado para intervalos de tempo progressivamente mais altos do gráfico:

Tempos Gráficos, T Intervalo de tempo intrabarra usado
1S < T < 30S 1S
30S <= T < 5 5S
5 <= T < 30 15S
30 <= T < 60 1
60 <= T < 240 5
240 <= T < D 15
D <= T < W 60
W <= T < 2W 120
T >= 2W D

Tabela 1. Intervalos de tempo intrabarras utilizados

Aqui está um exemplo de uma estratégia que usa uma ordem stop sem usar a opção Lupa de Barra:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = false)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

O emulador da corretora coloca uma ordem stop na barra #10381 e preenche uma ordem com um preço de 157,0 na barra seguinte, assim que a condição stop = 157,0 é atendida. O emulador da corretora estima que dentro da própria barra, o preço vai de “close” para “low”, depois para “high” (acionando a entrada), depois para “close”. Após algumas barras (11 dias para o intervalo de tempo atual), a condição para sair da posição com o preço de stop = 156,0 é acionada:

Quando a lupa de barras é ativada (parâmetro use_bar_magnifier = true), os preços de saída e entrada permanecem inalterados; entretanto, a saída da posição ocorre dentro da mesma barra na qual a entrada aconteceu:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = true)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

Se verificarmos o gráfico no menor intervalo de tempo para o mesmo símbolo (um gráfico de 60 minutos, de acordo com a tabela de intervalo de tempo intrabarras) e encontrarmos o intervalo de tempo correspondente à barra 10382, podemos ver que no intervalo de tempo em horas, após atingir 157,0 e acionar a entrada, o preço desce abaixo de 156,0, satisfazendo a condição de stop = 156,0:

Com a Lupa de Barras ligada, o emulador da corretora tem acesso a mudanças de preço a partir de intervalos de tempo mais baixos durante o backtesting, tornando seu comportamento mais similar ao que aconteceria durante o forward testing da estratégia para o mesmo período de tempo.

Aqui está um exemplo de uma estratégia que utiliza tempos mais baixos para conseguir preenchimentos mais precisos em ordens limite e stop:

//@version=5
strategy(
 title                  =   "Magnifier On",
 overlay                =   true, 
 calc_on_order_fills    =   true,
 calc_on_every_tick     =   true,
 precision              =   3, 
 default_qty_type       =   strategy.cash, 
 currency               =   currency.USD, 
 default_qty_value      =   1000, 
 initial_capital        =   1000,
 use_bar_magnifier      =   true)

trailPoints = input.int(150, "Trail Points (in ticks)")
trailOffset = input.int(100, "Trail Offset (in ticks)")
stopSize    = input.int(300, "Stop Offset (in ticks)")

longCondition = bar_index % 25 == 0 and not (strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index)

if (longCondition)
    strategy.entry("Long", strategy.long)

strategy.exit("Exit", loss = stopSize, trail_points = trailPoints, trail_offset = trailOffset)

Com a opção de lupa de barra ativada, os resultados da estratégia estão mais próximos do que seriam em tempo real. Os lucros para nossa estratégia de teste são 50% piores quando ela está ligada, o que é desencorajador para a própria estratégia, mas mostra como poderia ser importante utilizar dados de menor intervalo de tempo para obter os dados mais precisos do backtesting:

A opção da lupa de barras pode ser alterada selecionando a entrada correspondente na janela “Configurações/Propriedades” da estratégia:

Após desligar a opção, a estratégia é recalculada com a lógica antiga, mostrando informações menos precisas sobre o comportamento da estratégia:

Para ficar sempre por dentro das últimas novidades do Pine, fique de olho nas Notas de Lançamento do Manual do Usuário. A conta do PineCoders também divulga atualizações a partir de seu canal Squawk Box Telegram, da conta do Twitter e do chat público “Pine Script™ Q&A” no TradingView.

Esperamos que você ache estas melhorias úteis. Por favor, continue nos enviando seu feedback. Nós construímos o TradingView para nossos usuários e adoramos escutar vocês.

Look first Then leap

TradingView is built for you, so make sure you're getting the most of our awesome features
Launch Chart