Novidades no Pine: overloads, novas funções de string, e muito mais!

Dec 23, 2021

A equipe do Pine tem trabalhado muito para continuar aperfeiçoando o Pine desde o lançamento da v5. Vamos rever algumas das funções há muito esperadas que eles acrescentaram durante os últimos dois meses.
Sobrecarga de funções

Sobrecarga de funções (overloads function) são variações de uma função que podem ser definidas em uma biblioteca ou incluídas em um script. As sobrecargas compartilham o mesmo nome da função original, mas usam quantidades diferentes de parâmetros, ou parâmetros de tipos diferentes. Elas são especialmente úteis em bibliotecas, onde os tipos de parâmetros são obrigatórios.

Neste indicador, definimos uma sobrecarga da função mult () que aceita três argumentos:

//@version=5
indicator("Function overload")

// Two parameters
mult(x1, x2) =>
    x1 * x2

// Three parameters
mult(x1, x2, x3) =>
    x1 * x2 * x3

plot(mult(7, 4))
plot(mult(7, 4, 2))

Aqui, definimos sobrecargas que operam de forma diferente, dependendo do tipo de argumentos utilizados. Quando as sobrecargas têm a mesma quantidade de parâmetros que a função original, os parâmetros devem ser definidos usando tipos diferentes e explícitos:

FOR…IN

Iterar sobre um array com a estrutura for requer evitar a entrada de loop se a matriz estiver vazia e se proteger contra um índice de array fora dos limites.

A nova estrutura for…in torna sua vida mais fácil ao iterar sobre todos os elementos de um array para você. A sintaxe é simples: para array_element em array_id irá iterar sobre os elementos de array_id a partir do índice zero, atribuindo o valor do elemento do array à variável array_element em cada iteração. Nenhuma iteração ou erro ocorrerá se o array estiver vazio, e os elementos do array podem ser adicionados ou removidos nas iterações do loop.

No script abaixo, usamos for…in para encontrar o número mais alto no array a1:

//@version=5
indicator("For...in cycle")
var int[] a1 = array.from(1, 3, 6, 3, 8, 0, -9, 5)

highest(array) =>
    var int highestNum = na
    for element in array
        if na(highestNum) or element > highestNum
            highestNum := element
    highestNum

plot(highest(a1))

NOVAS FUNÇÕES DE EDIÇÃO DE STRINGS

Estas novas funções fornecem mais formas de tratar strings, e introduzem expressões regulares ao Pine. Note que, ao contrário das funções de strings definidas pelo usuário usando arrays, elas podem retornar valores de forma “simples”, que podem ser usados para criar argumentos de símbolos para request.security(), por exemplo.

str.contains(source, str)

Determina se o string da fonte contém o substring do str. Por exemplo, podemos determinar se o gráfico atual é um gráfico de futuros contínuo procurando o substring “!” na variável syminfo.tickerid embutida:

var isContinuous = str.contains(syminfo.tickerid, "!")  
plot(isContinuous ? 1 : 0)

str.pos(source, str)

Retorna a posição do str no string da fonte.

str.substring(source, begin_pos, end_pos)

Extrai um substring do string de origem. Neste exemplo, usamos str.substring() e str.pos() para ir buscar o substring “AAPL” do string de entrada s:

s = input.string("Time to sell some NASDAQ:AAPL") 
pos = str.pos(s, ":")  // Get the position of the ":" character
tkr = str.substring(s, pos + 1) // "AAPL"

str.replace(source, target, replacement, occurrence)

Ao contrário da função str.replace_all() existente, str.replace() permite a substituição seletiva de um substring correspondente por uma string de substituição. Neste exemplo, estamos substituindo o prefixo “FTX” por “BINANCE” para o primeiro símbolo no spread string:

var source = "FTX:BTCUSD / FTX:BTCEUR"
// Replace the first occurrence of "FTX" with the "BINANCE" replacement string
var newSource = str.replace(source, "FTX",  "BINANCE", 0)

str.lower(source) e str.upper(source)

Converte todas as letras do string de origem para minúsculas ou maiúsculas:

str.startswith(source, str) e str.endswith(source, str)

Determina se o string de origem começa ou termina com o substring do str.

str.match(source, regex)

Extrai o substring correspondente à expressão regular especificada. Por exemplo, com regex [\w]+:[\w]+ é possível encontrar e retornar o nome do símbolo “It’s time to sell some NASDAQ:AAPL!” string da fonte:

s = "It's time to sell some NASDAQ:AAPL!"
var string tickerId = str.match(s, "[\\w]+:[\\w]+") //"NASDAQ:AAPL"

CONVERSÃO DE MOEDA

A maioria das funções na solicitação.* O namespace agora pode converter os valores que retornam em outra moeda. Se o argumento da moeda for especificado na chamada da função, os valores de preço retornados pela função serão convertidos da moeda de origem para a moeda de destino. O parâmetro de moeda foi adicionado às seguintes funções:

TEXTBOXES

O desenho da caixa em Pine agora suporta texto! Basta adicionar o argumento de texto à função box.new() sempre que você desenhar a caixa e o texto será exibido dentro dela. Você pode ajustar o comportamento do texto definindo os valores para os parâmetros text_size, text_color, text_valign e text_halign quando criar a caixa, ou referindo-se à caixa com uma das seguintes funções novas:

Como exemplo deste recurso, aqui está o indicador de Gráficos de Multi-Período modificado para exibir o número e as altas/baixas da semana que ele destaca:

Para manter-se informado sobre as novas funcionalidades do Pine, fique de olho nas Notas de Lançamento de nosso Manual do Usuário do Pine. Nossos PineCoders também divulgam atualizações no canal Squawk Box Telegram, Twitter, e no chat público do Pine Script no TradingView.

Esperamos que você considere úteis estes recursos altamente requisitados. Por favor, continue nos dando seu feedback e sugestões para melhorias. Nós construímos o TradingView para você, e estamos sempre ansiosos para ouvir você.

Look first Then leap

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