Novidades em Pine?

Apr 9, 2021

Nem todas as atualizações do Pine justificam um post de blog separado, mas você nunca sabe quando uma nova funcionalidade pode vir a ser útil para programar seus scripts. Este post mostra as recentes melhorias que podem ter escapado de seu radar.

A palavra-chave varip é útil para quando você quiser acompanhar alguns dados e como eles mudam dentro da barra em tempo real. Todas as variáveis regulares do Pine estão sujeitas ao que é conhecido como rollback, onde em cada novo tick de dados, o estado da variável é redefinido de volta ao seu valor na barra anterior antes de avaliar os novos dados. A palavra-chave varip escapa disso e permite comparar o valor atual de uma variável com seu valor no tick anterior (ao contrário da barra anterior), o que abre todo um novo mundo de possibilidades. Dê uma olhada em um gráfico de tick criado por um de nossos Pine Wizards LonesomeTheBlue:

https://www.tradingview.com/script/ygNO2G1V-Tick-Chart/

Para saber mais, leia o tutorial detalhado sobre o varip da PineCoders:

https://www.tradingview.com/script/ppQxBISk-Using-varip-variables-PineCoders/

Para aqueles que queriam mais matemática em Pine, agora temos todo um conjunto de novas funções e constantes relacionadas à matemática:

  • Novas constantes math.pi, math.phi, math.rphi e math.e
  • Nova funcionalidade da função round() – a função agora permite especificar a precisão do arredondamento, em vez de sempre arredondar para o inteiro mais próximo
  • median()
  • mode()
  • range()
  • todegrees()
  • toradianos()
  • random()

Aqui está uma estratégia para aqueles que também gostam de viver perigosamente: todas as entradas e saídas são aleatórias com base nas porcentagens especificadas na seção Entradas, tudo graças à função aleatória():

//@version=4
strategy("I’m feeling lucky", overlay=true)
seed = input(1, "Seed, increase to recalculate the strategy", minval=1)
entryPerc = input(20.0, "Entry chance, %", minval=0.0, maxval=100.0)
exitPerc = input(10.0, "Exit chance, %", minval=0.0, maxval=100.0) 
roll = random(0, 100, seed)
positionSize = floor(random(1, (strategy.equity / close), seed))
if roll < entryPerc
    strategy.entry("My Long Entry Id", strategy.long, qty=positionSize)
if roll < exitPerc
    strategy.close_all()

Em outro desenvolvimento, o := operador de atribuição foi fundido com os operadores aritméticos para criar novos operadores de atribuição +=, -=, *=, /= e, %=. Estes permitem que você arrume e encurte seus scripts: em vez de usar um := a + 1, você pode simplesmente escrever um += 1. Uma pequena, mas bastante conveniente, melhoria.

Se você já se viu precisando converter um string em um número, a nova função tonumber() permite que você faça exatamente isso. Por exemplo, no script abaixo, tonumber(), em conjunto com outras funções relacionadas a string- como str.split() e str.replace_all(), permite que um único campo de entrada de string retorne vários valores inteiros que são então usados como comprimentos para os cálculos de SMA. Não há nenhuma razão convincente para fazê-lo desta forma em vez da correta e conveniente “uma entrada separada para cada um dos SMAs”… Mas se você precisar dela, ela está aqui:

//@version=4
study("My SMAs", overlay=true)
sma_lengths = input("5, 10, 20, 30, 50", title = "SMA Lengths (separated by comma)")
sma_lengths_array = str.split(str.replace_all(sma_lengths, " ", ""), ",")
sma_len(index) =>
    index > array.size(sma_lengths_array) - 1 ? 10 :
     int(tonumber(array.get(sma_lengths_array, index)))
sma0 = sma(close, sma_len(0))
sma1 = sma(close, sma_len(1))
sma2 = sma(close, sma_len(2))
sma3 = sma(close, sma_len(3))
sma4 = sma(close, sma_len(4))
plot(sma0, color=color.blue)
plot(sma1, color=color.red)
plot(sma2, color=color.green)
plot(sma3, color=color.orange)
plot(sma4, color=color.purple)

Adicionamos uma variável time_tradingday, que retorna o timestamp UNIX do início do dia de negociação. Isto será útil ao analisar símbolos que são negociados durante a noite, como EURUSD, onde a negociação começa no domingo, enquanto tecnicamente, o dia de negociação é na verdade segunda-feira.

A nova função time_close() permite obter o horário de fechamento de uma barra a partir de um horário e sessão especificados (em contraste com a variável time_close anteriormente existente, que só funciona com o horário/sessão do gráfico). Isto é especialmente útil para desenhos, permitindo que você desenhe linhas e legendas para o futuro com mais precisão. Para vê-lo em ação, verifique a visão de JayRogers sobre o indicador Pivot Points:

https://www.tradingview.com/script/7EwXUkBE-Pivotal-Multi-Pivot-Selector/

Com o novo parâmetro format.percent para study(), a saída de seu script pode agora ser formatada automaticamente como uma porcentagem. Veja isso em ação com nosso indicador Aroon incorporado:

//@version=4
study(title="Aroon", shorttitle="Aroon", overlay=false, format=format.percent, precision=2, resolution="")
length = input(14, minval=1)
upper = 100 * (highestbars(high, length+1) + length)/length
lower = 100 * (lowestbars(low, length+1) + length)/length
plot(upper, "Aroon Up", color=#FF6A00)
plot(lower, "Aroon Down", color=#0094FF)

Três novas variáveis, session.ismarket, session.ispremarket, e session.ispostmarket, permitem verificar a parte da sessão intradiária à qual a barra atual está relacionada. Observe que as horas estendidas só aparecem nos gráficos intraday, e somente quando a opção é explicitamente habilitada através das configurações.

Se você quiser saber sobre as atualizações do Pine assim que elas ocorrerem, monitore as Notas de Lançamento em nosso Manual do Usuário. Os PineCoders também transmitem notícias sobre atualizações em seu canal Squawk Box Telegram, no Twitter e no chat público do Pine Script 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 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