Funções

Funções definidas pelo usuário e built-in

Funções do Usuário

Definindo Funções

Funções permitem reutilizar código e tornam o script mais organizado:

nomeFuncao(param1, param2) =>
    // corpo da função
    resultado // última expressão é o retorno

// Com tipo de retorno explícito
nomeFuncao(param1, param2) =>
    resultado

Funções com Múltiplos Retornos

Pine Script permite retornar múltiplos valores usando tuplas:

minhaFuncao() =>
    valor1 = calcular1()
    valor2 = calcular2()
    [valor1, valor2]

[a, b] = minhaFuncao()
Função Customizada

Criando uma função de canal de preço

1//@version=6
2indicator("Canal de Preço Customizado", overlay=true)
3
4// Função que retorna canal superior e inferior
5priceChannel(src, length) =>
6    upper = ta.highest(src, length)
7    lower = ta.lowest(src, length)
8    middle = (upper + lower) / 2
9    [upper, middle, lower]
10
11// Parâmetros
12len = input.int(20, "Período do Canal")
13
14// Usando a função
15[channelHigh, channelMid, channelLow] = priceChannel(close, len)
16
17// Plotando
18p1 = plot(channelHigh, "Superior", color.green)
19plot(channelMid, "Médio", color.gray, style=plot.style_linebr)
20p2 = plot(channelLow, "Inferior", color.red)
21
22// Preenchimento entre linhas
23fill(p1, p2, color.new(color.blue, 90))

Funções Built-in Principais

Funções de Média

FunçãoDescrição
`ta.sma()`Média Móvel Simples
`ta.ema()`Média Móvel Exponencial
`ta.wma()`Média Móvel Ponderada
`ta.vwma()`Média Ponderada por Volume

Funções de Volatilidade

FunçãoDescrição
`ta.atr()`Average True Range
`ta.stdev()`Desvio Padrão
`ta.bb()`Bandas de Bollinger

Funções de Momentum

FunçãoDescrição
`ta.rsi()`Índice de Força Relativa
`ta.macd()`MACD
`ta.stoch()`Estocástico
`ta.cci()`Commodity Channel Index

Funções de Cruzamento

FunçãoDescrição
`ta.crossover()`Cruza para cima
`ta.crossunder()`Cruza para baixo
`ta.cross()`Qualquer cruzamento
Indicador com Funções Built-in

RSI com média móvel e sinais

1//@version=6
2indicator("RSI Avançado", overlay=false)
3
4// Parâmetros
5rsiLength = input.int(14, "Período RSI")
6maLength = input.int(9, "Período Média do RSI")
7overbought = input.int(70, "Sobrecomprado")
8oversold = input.int(30, "Sobrevendido")
9
10// Cálculos
11rsiValue = ta.rsi(close, rsiLength)
12rsiMA = ta.sma(rsiValue, maLength)
13
14// Sinais
15crossUp = ta.crossover(rsiValue, rsiMA) and rsiValue < oversold
16crossDown = ta.crossunder(rsiValue, rsiMA) and rsiValue > overbought
17
18// Plots
19plot(rsiValue, "RSI", color.blue, 2)
20plot(rsiMA, "RSI MA", color.orange)
21hline(overbought, "Sobrecomprado", color.red)
22hline(oversold, "Sobrevendido", color.green)
23hline(50, "Linha Central", color.gray)
24
25// Sinais visuais
26plotshape(crossUp, "Compra", shape.triangleup, location.bottom, color.green, size=size.small)
27plotshape(crossDown, "Venda", shape.triangledown, location.top, color.red, size=size.small)