junho 25, 2019

Conheça o Pine Script v4!

Conheça a nova versão da linguagem de programação do Pine Script v4! Inclui alguns novos recursos. Melhoramos a estrutura da linguagem e corrigimos vários problemas. No entanto, a característica mais importante e esperada é o suporte aos objetos de desenho.

Vamos mencionar brevemente os novos recursos neste post do blog. Leia a documentação e o manual de referência se quiser aprender os detalhes (observe que você pode ir diretamente para a seção de descrição dos objetos de desenho).

Etiqueta para Objeto de Desenho

A função label.new permite desenhar rótulos no gráfico, incluindo aqueles que contêm texto arbitrário. Aqui está um exemplo de um script que desenha um rótulo contendo o último fechamento da barra:

//@version=4
study("Last Bar Price", overlay=true)

l = label.new(bar_index, na, 'last price is '+tostring(close), 
  color=close >= open ? color.green : color.red, 
  textcolor=color.white,
  style=label.style_labeldown, yloc=yloc.abovebar)

label.delete(l[1])

Você pode editar e excluir o objeto de rótulo depois de criá-lo usando a família de funções label.*. Aqui está um exemplo de um script mais complexo usando etiqueta — Pontos Pivot Topo/Fundo.

Objetos de Linha

A função line.new permite desenhar linhas no gráfico. Aqui está um exemplo de um script simples que desenha uma linha que conecta a altura da barra atual e a baixa de uma 10ª barra histórica:

//@version=4
study("Line", overlay=true)
l = line.new(bar_index, high, bar_index[10], low[10], width = 4)
line.delete(l[1])

Os objetos de linha podem ser editados e excluídos usando as funções apropriadas da família line.*. Aqui está um exemplo de um script mais complexo usando objetos de linha — Zig Zag.

Observe que atualmente podemos exibir um total de aproximadamente 50 a 55 desenhos de um único tipo (etiqueta ou linha) por script no gráfico. Essa é uma limitação planejada projetada para evitar o uso excessivo do servidor.

Os novos tipos de dados de linha e rótulo melhoram muito os recursos do Pine Script, permitindo que você implemente uma lógica complexa por trás de indicadores populares em scripts de usuário. Exemplos podem ser encontrados na documentação.

Séries em Sequência (String)

Agora, suportamos variáveis de um tipo de dados de sequência. Aqui está um exemplo do uso de strings de série em etiquetas:

//@version=4
study("Series string", overlay = true)
draw_label(title) =>
    label.new(bar_index, high, text=title)
t = close >= open ? "green" : "red"
draw_label(t)

Palavra-Chave Var

Uma variável que é declarada da maneira usual é reinicializada em cada cálculo do script. Isso exigia que os scripts propagassem explicitamente o valor anterior da variável. A palavra-chave var declara uma variável e inicializa apenas uma vez. Isso permite que o valor da variável seja salvo automaticamente entre barras a partir do momento da inicialização ou da última atribuição. Aqui está um exemplo de um script que conta o número de barras verdes no gráfico:

//@version=4
study("My Script")
var s = 0.0
if close >= open
    s := s + 1
plot(s)

Cada vez que a condição de close >= opené atendida, o valor da variável s aumentará em um. O valor de inicialização pode ser qualquer expressão aritmética.

A sintaxe para declarar variáveis com a palavra-chave var evita o uso do seguinte código: s: = nz (s[1], s). Declarar variáveis com o modificador var pode ser muito útil ao trabalhar com desenhos.

Renomear Constantes, Variáveis e Funções Internas

No Pine Script v4, as seguintes constantes internas, variáveis e funções foram renomeadas:

  1. As constantes de cor (por exemplo, vermelho) foram mudados para a color.* Namespace (por exemplo, color.red).
  2. A função de cor foi renomeada para color.new.
  3. Constantes para tipos de inputs (por exemplo, integer) foram mudados para o namespace de input.* (Por exemplo, input.integer).
  4. As constantes de estilo de plotagem (por exemplo, estilo de histograma) foram mudados para o namespace plot.style_* (por exemplo, plot.style_histogram).
  5. As constantes de estilo para a função hline (por exemplo, o estilo pontilhado) foram mudados para o namespace hline.style_* (por exemplo, hline.style_dotted).
  6. As constantes de dias da semana (por exemplo, domingo) foram mudados para o dayofweek.* namespace (por exemplo, dayofweek.sunday).
  7. As variáveis do período de tempo do gráfico atual (por exemplo, período, isintraday) foram mudadas para o período de timeframe.* namespace (por exemplo, timeframe.period, timeframe.isintraday).
  8. A variável de intervalo foi renomeada para timeframe.multiplier.
  9. As variáveis ticker e tickerid são renomeadas para syminfo.ticker e syminfo.tickerid, respectivamente.
  10. A variável n que contém o valor do índice de barras foi renomeada para bar_index.

A razão por trás da renomeação de todos os itens acima foi estruturar as ferramentas de linguagem padrão e facilitar o trabalho com código. Novos nomes são agrupados de acordo com atribuições sob prefixos comuns. Por exemplo, você verá uma lista com todas as constantes de cores disponíveis se digitar “color” no editor e pressionar Ctrl + Espaço.

Declaração Explícita de Tipo de Variável

No Pine Script v4, não é mais possível criar variáveis com um tipo de dados desconhecido no momento de sua declaração (consulte valor na). Isso foi feito para evitar uma série de problemas que surgem quando o tipo de variável é alterado após sua inicialização com o valor na. De agora em diante, você precisa especificar explicitamente seu tipo usando palavras-chave ou funções de tipo (por exemplo, float) ao declarar variáveis com o valor nd:

//@version=4
study("NA", overlay=true)
float a = na
a := if close >= open
    high
else
    low
plot(a)

Experimente o novo Pine Script v4! Alguns usuários já testaram novos recursos e escreveram vários scripts impressionantes usando desenhos.

Por exemplo, Ricardo Santos escreveu uma série de scripts que você pode ver abaixo:

Joris Duyck escreveu o Script Trendlines, ilustrando as possibilidades do desenho de linha.

Esperamos que esses exemplos inspirem você! Você pode fazer perguntas, discutir problemas e compartilhar feedback em nosso bate-papo. Queremos agradecer a todos os membros da comunidade Pinescripters, que participaram do teste beta e nos ajudaram muito! Você também pode fazer perguntas relacionadas ao código em nossa Página do Stack Overflow.