Gráfico de preço com média móvel simples e exponencial sobrepostas
Trading

Pine Script: tutorial de indicadores e estratégias no TradingView

Tutorial de Pine Script v6: como abrir o Pine Editor, criar um indicador com alerta e uma estratégia de cruzamento de médias com stop, custos e backtest.

Imagem: Alex Kofman, domínio público, via Wikimedia Commons

Por Redação Boletim Bitcoin

. Leitura de 6 min.

Pine Script é a linguagem do TradingView para criar indicadores, estratégias com backtest e alertas personalizados. Você escreve o código no Pine Editor, no rodapé do gráfico, clica em “Adicionar ao gráfico” e o script roda nos servidores do TradingView, sem instalar nada. Neste tutorial você cria um indicador com alerta e uma estratégia completa em Pine Script v6, a versão atual.

Em resumo: todo script começa com //@version=6 e uma declaração indicator() ou strategy(). O código é executado uma vez por candle, do mais antigo ao mais recente. Indicadores desenham e alertam; estratégias simulam ordens e geram relatório de backtest. Configure comissão e slippage na estratégia, ou o resultado será otimista demais.

O que dá para fazer com Pine Script?

  • Indicadores próprios: médias, osciladores, níveis, painéis de informação.
  • Estratégias com backtest: entradas, saídas, stop e alvo simulados no histórico.
  • Alertas: avisos no celular, e-mail ou webhook quando uma condição acontece.
  • Bibliotecas: funções reutilizáveis publicadas para outros scripts.

Segundo a documentação oficial, a comunidade já publicou mais de 150 mil scripts, cerca de metade com código aberto. Ler o código de bons scripts públicos é uma ótima forma de aprender. Se você ainda está conhecendo a plataforma, comece pelo guia do TradingView.

Como abrir o Pine Editor e criar o primeiro script?

  1. Abra um gráficoEscolha um ativo, por exemplo BTCUSDT, e um tempo gráfico.
  2. Clique em Pine EditorA aba fica no rodapé do gráfico.
  3. Crie um novo scriptNo menu à esquerda do nome do script, escolha criar um novo indicador ou estratégia.
  4. Cole o código e salveO script fica salvo na sua conta, visível só para você.
  5. Adicione ao gráficoClique em "Adicionar ao gráfico" e ajuste as entradas na engrenagem.

O passo a passo segue o roteiro do primeiro indicador da documentação.

Exemplo 1: indicador de média móvel com alerta

//@version=6
indicator("Média com alerta", overlay = true)

periodo = input.int(20, "Período", minval = 1)
media = ta.sma(close, periodo)
acima = close > media

plot(media, "SMA", color = acima ? color.green : color.red, linewidth = 2)

cruzouCima = ta.crossover(close, media)
alertcondition(cruzouCima, "Preço cruzou a média", "O preço cruzou acima da SMA")

Linha a linha:

TrechoO que faz
//@version=6Define a versão da linguagem (obrigatório)
indicator(..., overlay = true)Declara um indicador desenhado sobre o preço
input.int(20, ...)Cria um campo editável nas configurações
ta.sma(close, periodo)Média móvel simples dos fechamentos
plot(...)Desenha a linha, verde acima do preço e vermelha abaixo
alertcondition(...)Disponibiliza a condição na janela de alertas

Troque ta.sma por ta.ema para usar a média exponencial. A diferença entre as duas está no guia de médias móveis. Outras funções úteis do namespace ta: ta.rsi (IFR), ta.macd, ta.bb (Bollinger) e ta.atr.

Gráfico de preço com o indicador MACD 12, 26, 9 e seu histograma no painel inferior Indicadores como o MACD, que ficam num painel abaixo do preço, são criados no Pine com overlay = false e a função ta.macd. Crédito: Kevin Ryde, licença CC BY-SA 3.0, via Wikimedia Commons.

Exemplo 2: estratégia de cruzamento de médias com stop e alvo

//@version=6
strategy("Cruzamento de médias v6", overlay = true, initial_capital = 10000,
     default_qty_type = strategy.percent_of_equity, default_qty_value = 10,
     commission_type = strategy.commission.percent, commission_value = 0.1,
     slippage = 2)

rapidaLen = input.int(9, "Média rápida", minval = 1)
lentaLen  = input.int(21, "Média lenta", minval = 2)
stopPct   = input.float(2.0, "Stop (%)", minval = 0.1) / 100
alvoPct   = input.float(4.0, "Alvo (%)", minval = 0.1) / 100

rapida = ta.ema(close, rapidaLen)
lenta  = ta.ema(close, lentaLen)
plot(rapida, "Rápida", color = color.teal)
plot(lenta, "Lenta", color = color.orange)

compra = ta.crossover(rapida, lenta)
saida  = ta.crossunder(rapida, lenta)

if compra and strategy.position_size == 0
    strategy.entry("Long", strategy.long)

if strategy.position_size > 0
    preco = strategy.position_avg_price
    strategy.exit("Stop/Alvo", "Long", stop = preco * (1 - stopPct), limit = preco * (1 + alvoPct))

if saida
    strategy.close("Long", comment = "Cruzou para baixo")

plotshape(compra, title = "Compra", style = shape.triangleup, location = location.belowbar, color = color.green, size = size.small)

O que observar:

  • Custos na declaração: commission_value = 0.1 cobra 0,1% por ordem e slippage = 2 piora cada execução em 2 ticks. Sem isso, o backtest mente.
  • Tamanho da posição: 10% do capital por entrada (strategy.percent_of_equity).
  • Stop e alvo: strategy.exit cria as ordens de saída a partir do preço médio da posição.
  • Execução realista: por padrão, a ordem a mercado é preenchida no próximo tick disponível, normalmente a abertura do candle seguinte ao sinal, segundo a documentação de estratégias.

Ao adicionar ao gráfico, abra o testador de estratégias. O relatório traz métricas de desempenho, drawdown e a lista de operações, que pode ser exportada. Como ler esses números está em backtest.

O que mudou no Pine Script v6?

MudançaImpacto prático
Parâmetro when removidoCondições de ordem vão dentro de if
Margem padrão de 100%A estratégia não abre posição que não pode pagar; pode haver chamada de margem em vendas
bool não aceita naCondições não definidas viram false
Requests dinâmicos por padrãorequest.security() pode rodar dentro de laços e condicionais

Fonte: guia de migração para a v6. Scripts antigos podem ser convertidos pelo próprio editor, mas revise o resultado. A lista completa de funções está no manual de referência da v6.

Repintura: o erro que faz o backtest mentir

Repintura acontece quando o script calcula de um jeito no histórico e de outro em tempo real. Causas comuns, segundo a documentação de repainting:

  • usar valores do candle ainda aberto, que mudam até o fechamento;
  • buscar dados de tempo gráfico maior com request.security() sem esperar a confirmação ou com lookahead ativado;
  • desenhar pivôs e sinais no candle onde ocorreram, antes de serem confirmados.
Dica: para sinais que não repintam, baseie a decisão em candles fechados (por exemplo, usando close[1] ou checando barstate.isconfirmed). O sinal chega um candle depois, mas é o mesmo no histórico e ao vivo.

A repintura é parente do overfitting: ambos criam resultados que não se repetem na conta real.

Do Pine Script para a operação real

Uma estratégia no TradingView simula ordens. Para executar de verdade, há dois caminhos:

  1. Corretoras integradas ao TradingView, operadas manualmente pelo painel de negociação.
  2. Alertas com webhook: o alerta envia uma mensagem a um servidor seu, que repassa a ordem à corretora pela API. O TradingView só aceita webhooks nas portas 80 e 443, exige autenticação em dois fatores e cancela a requisição se o servidor não responder em três segundos, conforme a página de suporte sobre webhooks.

O segundo caminho exige cuidado com segurança das chaves, assunto do guia de API de corretora cripto. Para forex e CFDs, muita gente reescreve a estratégia em MQL5 e roda no MetaTrader 5.

O canal oficial do TradingView no Brasil tem uma série em português sobre programação de indicadores; o primeiro episódio é um bom complemento a este tutorial.

Próximos passos

  • Modifique o Exemplo 2 para usar stop por ATR em vez de percentual fixo.
  • Teste em BTC, ETH e um par de forex: uma ideia robusta não depende de um único ativo.
  • Separe um período recente para validar sem otimizar.
  • Defina risco por operação com base no stop; veja gestão de risco no trading.

Para o roteiro completo, da ideia ao robô ligado, leia como criar um robô de trading do zero.

Conteúdo informativo, não é recomendação de investimento.

Perguntas frequentes

O que é Pine Script?

É a linguagem de programação do TradingView para criar indicadores, estratégias com backtest e alertas. Os scripts rodam nos servidores do TradingView, sem instalar nada.

Pine Script é difícil de aprender?

É uma das linguagens mais fáceis para trading. Um indicador simples cabe em cinco linhas. O desafio maior é entender como o script é executado candle a candle e evitar repintura.

Qual a diferença entre indicator e strategy no Pine Script?

Um indicator só calcula e desenha no gráfico (e pode gerar alertas). Uma strategy também simula ordens de compra e venda e gera relatório de backtest com lucro, drawdown e lista de operações.

Pine Script executa ordens na corretora?

Não diretamente como um robô do MetaTrader. A estratégia simula ordens; para operar de verdade, usa-se a integração de corretoras do próprio TradingView ou alertas com webhook enviados a um sistema externo.

Qual a versão atual do Pine Script?

A versão 6. Ela removeu o parâmetro when das funções de ordem, passou a margem padrão das estratégias para 100% e eliminou o valor na em variáveis booleanas.

Referências

  1. TradingView: Welcome to Pine Script v6
  2. TradingView: Pine Script docs, First indicator
  3. TradingView: Pine Script docs, Strategies
  4. TradingView: migração para Pine Script v6
  5. TradingView: Pine Script v6 Reference Manual
  6. TradingView: Pine Script docs, Repainting
  7. TradingView: About webhooks
  • Pine Script
  • TradingView
  • Pine Script v6
  • indicador
  • estratégia
  • backtest
  • alertas

Este conteúdo é informativo e não é recomendação de investimento. Encontrou um erro? Escreva para contato@boletimbitcoin.com.

Leia também