Ferramentas do usuário

Ferramentas do site


tradingview:backtesting:estrategias

Estratégias

Introdução

  • Um estratégia - strategy() - é um script do Pine que pode enviar, modificar e cancelar ordens de compra e venda.
    • Estratégias permitem a realização de backtesting - emular uma estratégia de trade em dados históricos.
    • Estratégias permitem a realização de forwardtesting - emular uma estratégia de trade em barras de tempo real.
  • Uma estratégia escrita em Pine tem disponível a maioria da funcionalidades de um estudo escrito em Pine.
  • Podem plotar valores também.

Um exemplo simples

//@version=4
strategy("teste")
 
if bar_index < 100
    strategy.entry("compra", strategy.long, 10, when=strategy.position_size <= 0)
    strategy.entry("venda", strategy.short, 10 when=strategy.position_size > 0)
 
plot(strategy.equity)
  • Assim esse script é compilado e aplicado ao gráfico - você poderá ver marcações de ordens preenchidas e como o saldo foi se alterando durante o backtest (curva equity).
  • Este exemplo simples, compra e vende em todas as barras.
    • A anotação strategy(“teste”) define o nosso script como uma estratégia.
    • A função strategy.entry() é um comando de envio de ordens tanto de compra como de venda.
    • A função plot(strategy.equity) plota a curva equity.

Aplicando uma estratégia ao gráfico

  • Para testar sua estratégia será necessário aplicá-la ao gráfico. Lembrando de configurar o gráfico para o ativo e resolução desejados.
  • Ao aplicar estratégias a gráficos não-padrão (Heikin Ashi / Renko / etc) - é muito importante entender que os resultados podem não refletir as condições reais do mercado. Ordens nesses gráficos serão executadas preços sintéticos usados nesses gráficos - o que frequentemente não refletem os preços reais do mercado - e por consequência levando a resultados irreais.
  • IMPORTANTE: Por isso é recomendado executar backtest apenas em gráficos temporais padrão.

Backtest vs Forwardtest

  • Estratégias são calculadas em todas as barras históricas disponíveis do gráfico (backtesting) e então automaticamente passam a ser calculados em barras de tempo real (forwardtesting).
  • Por padrão, durante ambas, barras históricas e barras de tempo real, o script é calculado no fechamento da barra.
  • No forwardtesting, você tem a opção de configurar o cálculo do script em cada variação de tick da barra de tempo real. Para habilitar você precisa configurar “Recalcular em Cada Tick” (Recalculate On Every Tick) nas propriedades da estratégia ou através do script na anotação strategy:
    • strategy(…, calc_on_every_tick=true)
  • Você pode configurar a estratégia para realizar um cálculo adicional após a ordem ser preenchida. Para isso você precisa configurar “Recalcular Após Preenchimento da Ordem” (Recalculate After Order filled) nas propridades da estratégia ou através do script na anotação strategy:
    • strategy(…, calc_on_order_fills=true)

Emulador de Corretora (Broker)

  • TradingView emula o comportamento de uma corretora quando executa estratégias. Ao contrário do mercado real, o emulador apenas preenche ordens nos preços do gráfico e por isso uma ordem pode apenas ser preenchida no tick seguinte no forwardtesting e na próxima barra no backtesting - após o cálculo da estratégia.
  • O emulador segue a seguinte lógica para preencher ordens:
  1. Se a máxima da barra está mais perto da abertura da barra do que a mínima desta barra:
    • O emulador interpreta que o preço atingiu a máxima antes de formar a mínima e depois fechar.
      • open → high → low → close
  2. Se a mínima da barra está mais perto da abertura da barra do que a máxima desta barra:
    • O emulador interpreta que o preço atingiu a mínima antes de formar a máxima e depois fechar.
      • open → low → high → close
  3. O emulador interpreta que não existem gaps dentro de barras - ou seja - a amplitude total da barra é considerada como preço disponível de execução.
  4. Mesmo que “Recalcular em Cada Tick” Recalculate On Every Tick esteja habilitado nas propriedades da estratégia ou através da anotação strategy - o emulado ainda assim seguirá a lógica acima.

//@version=4
strategy("SAW", overlay=true, pyramiding=100, calc_on_order_fills=true)
strategy.entry("LE", strategy.long)
  • Este código é calculado uma vez barra no seu fechamento, mas um cálculo adicional é executado toda vez que uma ordem é preenchida. Por isso é possível notar 4 ordens sendo preenchidas em cada barra: 2 ordens na abertura, 1 ordem na máxima e 1 ordem na mínima. Isto ocorre em backtesting. Em barras de tempo real ordens serão executadas a cada novo tick.
  • É possível simular também uma fila de ordens. Esta configuração é chamada “Verificar Preço para Ordens Limite” (Verify Price For Limit Orders) e pode ser configurado nas propriedades da estratégia ou através do script na anotação strategy:
    • strategy(…, backtest_fill_limits_assumption=X)
    • O valor especificado é o mínimo movimento de preço em número de pontos/pips - valor padrão é 0.
    • Uma ordem limite é preenchida caso o preço atual seja melhor que o número especificado de pontos/pips:
      • Maior para ordens de venda.
      • Menor para ordens de compra.
    • O preço de execução irá ser o preço limite, exemplo:
      • backtest_fill_limits_assumption = 1 . O menor movimento de preço é 0.25 .
      • Uma ordem limite de compra é colocada no preço 12.50 .
      • O preço atual é 12.50 .
      • A ordem não será preenchida no preço atual porque backtest_fill_limits_assumption = 1.
        • Para preencher a ordem o preço deve ser 0.25 * 1 mais baixo, por tanto, a ordem fica em uma “fila”.
      • Supondo que no próximo tick o preço esteja 12.00. O preço é 2 pontos mais baixo, significando que a condição backtest_fill_limits_assumption = 1 é satisfeita - e portanto a ordem pode ser executada.
      • A ordem é executada a 12.50 (preço original) mesmo que o preço não esteja mais disponível.


tradingview/backtesting/estrategias.txt · Última modificação: 05/04/2023 08:25 por 127.0.0.1