Novos recursos do Pine Script®: backtests realistas em gráficos Heikin Ashi, funções internas para acessar informações sobre símbolos e muito mais

Jun 30, 2023

À medida que continuamos a adicionar as melhorias solicitadas por você à nossa linguagem de programação, pode ser um desafio se manter atualizado. Esta postagem apresenta as novidades mais relevantes, para que você não perca nada.

Backtests mais realistas em gráficos Heikin Ashi

Os backtests executados nos gráficos Heikin Ashi normalmente produziam resultados não confiáveis porque o emulador da corretora sempre executa as ordens usando os preços do gráfico, que, no caso dos gráficos HA, eles são sintéticos. Um novo recurso chamado “Preencher ordens usando OHLC padrão” ameniza esse problema. Quando é usado, as estratégias executadas nos gráficos HA preencherão as ordens com os preços reais do mercado, o que simula melhor o comportamento da sua estratégia em tempo real.

Os usuários da estratégia podem ativar o recurso na aba “Propriedades” das estratégias. O recurso está desativado por padrão.

Observe que isso só altera o comportamento das estratégias executadas em gráficos HA. Em outros tipos de gráfico sintético, como o Renko, o backtesting continuará a executar ordens com os preços do gráfico sintético, independentemente da configuração do recurso.

Novo parâmetro de exibição para as funções input.*()

Um novo parâmetro de exibição oferece mais controle sobre a exibição dos valores de entrada ao lado do nome de um script. Quatro argumentos podem ser usados: display.status_linedisplay.data_windowdisplay.alldisplay.none.

São permitidas combinações dos argumentos usando sinais de mais ou menos e, independentemente do argumento usado, os valores de entrada sempre continuarão sendo exibidos na aba “Inputs” das configurações do script.

O novo parâmetro permite ocultar os valores de entrada da linha de status quando eles normalmente apareceriam lá, ou exibir os valores de entradas que normalmente estariam ocultas, ou seja, entradas booleanas, de cor ou de data. Usando o novo parâmetro, você também pode mostrar os inputs ao lado do nome do script na janela de dados. A exibição padrão dos inputs permanece inalterada quando o parâmetro não é usado.

//@version=5

indicator("RSI")

rsiLengthInput = input.int(14, minval=1, title="RSI Length", display=display.data_window+display.status_line)

rsiSourceInput = input.source(close, "Source", display=display.data_window)

rsi = ta.rsi(rsiSourceInput, rsiLengthInput)

plot(rsi, "RSI")

Novos built-ins para acessar informações do instrumento
Adicionamos três built-ins ao namespace syminfo: syminfo.sectorsyminfo.industry, e syminfo.country. Eles retornam strings que fornecem a você mais informações sobre o símbolo atual. As informações sobre o país são fornecidas no formato ISO 3166-1 alfa-2.

Desativação de alertas para ordens executadas em estratégias
Agora você pode desativar as notificações de ordens individuais em estratégias usando disable_alert = true nas funções usadas para criar essas ordens. Por exemplo:

//@version=5
strategy("My strategy", overlay=true)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
    strategy.entry("Long", strategy.long, alert_message = "Go Long!")
    strategy.exit("Exit", "Long", profit = 300, loss = 100, disable_alert = true)

Isso é útil para filtrar ordens específicas quando você estiver usando a função alert() para gerar mensagens personalizadas para notificações ou webhooks durante a execução da estratégia.

Mudança no cálculo do drawdown e run-up máximos em estratégias
O cálculo do drawdown máximo e do run-up máximo foi otimizado para levar em conta o capital potencial que poderia ter sido obtido em uma negociação. Anteriormente, apenas os valores de capital nos pontos de entrada e saída eram considerados, o que poderia resultar em valores máximos de drawdown e run-up que não correspondiam a seus valores potenciais máximos. Os novos métodos são explicados nos artigos da Central de Ajuda sobre drawdown máximo e run-up máximo.

Suporte para o modificador varip em tipos definidos pelo usuário
O modificador varip, que permite que as variáveis retenham valores entre cada execução do script na mesma barra, agora pode ser aplicado a campos de tipos definidos pelo usuário. Observe que os campos não definidos usando varip serão revertidos em cada barra, portanto, os valores atribuídos a eles durante várias execuções na mesma barra não serão preservados, mesmo que o objeto que os contém tenha sido criado com varip.

Por exemplo:

//@version=5
indicator("`varip` field")

type TypeWithVaripField
    varip int varipCounter = 0
    int counter = 0

varip TypeWithVaripField myCounter = TypeWithVaripField.new(0)
// This field preserves values between script executions.
myCounter.varipCounter := myCounter.varipCounter + 1
// This field does not because it wasn't declared using `varip`.
myCounter.counter := myCounter.counter + 1

plot(myCounter.varipCounter, "myCounter.varipCounter")
plot(myCounter.counter, "myCounter.counter")

Currency conversion rate request

Introduzimos uma nova função request.currency_rate() que permite que você recupere a taxa de conversão de uma moeda para outra. Essa função requer dois parâmetros: from e to, sendo cada um deles um código de string de três letras de acordo com a ISO 4217.

Veja um exemplo de como usá-la para converter o preço de um instrumento em libras esterlinas (GBP):

//@version=5
indicator("Close in British Pounds")
rate = request.currency_rate(syminfo.currency, "GBP")
plot(close * rate)

Novas funções no namespace do array
Foram adicionadas quatro novas funções para arrays:

  • array.first() — retorna o primeiro elemento do array.
  • array.last() — retorna o último elemento do array.
  • array.every() — retorna true se todos os elementos do array forem true; caso contrário, retorna false.
  • array.every() — retorna verdadeiro se pelo menos um elemento do array for verdadeiro; caso contrário, retorna falso.

Para se manter atualizado sobre os novos recursos do Pine Script®, fique de olho nas notas de Lançamento do Manual do Usuário. A conta do PineCoders também transmite atualizações a partir da sua Squawk Box no Telegram, de sua conta no Twitter e do chat público Pine Script® Q&A no TradingView.

Acreditamos que esses recursos tão solicitados sejam muito úteis e, por favor, continue nos enviando seus comentários e sugestões para que possamos tornar a plataforma ainda melhor. Criamos o TradingView para você e estamos sempre prontos para ouvir suas opiniões.

Equipe TradingView

Look first Then leap

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