Kaique Mitsuo Silva Yamamoto
CriptoTrading automatizado

Pine Script para Criar Sinais de Bot

Aprenda Pine Script v5 para criar estratégias e indicadores customizados no TradingView, gerar sinais de entrada/saída e conectar ao seu bot via webhook. Do básico ao Strategy Tester.

Pine Script é a linguagem de programação do TradingView — simples, executada no browser, sem instalação. Com ela, você cria indicadores customizados, estratégias completas com backtesting e alertas que disparam webhooks para seus bots.

Esta página cobre Pine Script v5 (versão atual). Scripts v3 e v4 ainda funcionam mas não são recomendados para novos projetos.


Por que Pine Script para Bots

VantagemDetalhe
Sem servidorExecuta diretamente no TradingView
Dados históricosAcesso a OHLCV de qualquer ativo e timeframe
Strategy TesterBacktesting visual integrado com métricas completas
Alertas nativasConecta diretamente a webhooks
ComunidadeMilhares de scripts open-source para estudar
Sem custo de infraNão precisa de VPS ou servidor para rodar

Estrutura Básica de um Script

Todo script Pine Script começa com a declaração de versão e tipo:

//@version=5
indicator("Nome do Indicador", overlay=true)
// ou
strategy("Nome da Estratégia", overlay=true, initial_capital=10000)
  • indicator: apenas visualiza dados — não executa trades, não aparece no backtester
  • strategy: pode simular trades, aparece no Strategy Tester

Construindo Seu Primeiro Indicador

RSI com Zonas Coloridas

//@version=5
indicator("RSI com Zonas", overlay=false)

// Parâmetros configuráveis pelo usuário
rsiLength = input.int(14, title="Período RSI", minval=1)
overbought = input.int(70, title="Sobrecomprado")
oversold = input.int(30, title="Sobrevendido")

// Cálculo do RSI
rsi = ta.rsi(close, rsiLength)

// Plot do RSI
plot(rsi, title="RSI", color=color.blue, linewidth=2)

// Linhas de referência
hline(overbought, "Sobrecomprado", color=color.red, linestyle=hline.style_dashed)
hline(oversold, "Sobrevendido", color=color.green, linestyle=hline.style_dashed)
hline(50, "Neutro", color=color.gray, linestyle=hline.style_dotted)

// Colorir fundo quando em zona extrema
bgcolor(rsi > overbought ? color.new(color.red, 85) : na)
bgcolor(rsi < oversold ? color.new(color.green, 85) : na)

Construindo uma Estratégia com Backtesting

Estratégia RSI + EMA (Dual Filter)

//@version=5
strategy(
    "RSI + EMA Strategy",
    overlay=true,
    initial_capital=10000,
    commission_type=strategy.commission.percent,
    commission_value=0.1,           // Taxa de 0,1% por ordem
    slippage=2                       // 2 pontos de slippage
)

// Parâmetros
rsiLen    = input.int(14, "RSI Length")
rsiOB     = input.int(70, "RSI Overbought")
rsiOS     = input.int(30, "RSI Oversold")
emaLen    = input.int(200, "EMA Length")

// Indicadores
rsi = ta.rsi(close, rsiLen)
ema = ta.ema(close, emaLen)

// Condições de entrada
longCondition  = rsi < rsiOS and close > ema   // Oversold + acima da EMA 200
shortCondition = rsi > rsiOB and close < ema   // Overbought + abaixo da EMA 200

// Execução de ordens
if longCondition
    strategy.entry("Long", strategy.long)

if shortCondition
    strategy.close("Long", comment="RSI OB")

// Plots visuais
plot(ema, title="EMA 200", color=color.orange, linewidth=2)
plotshape(longCondition, title="Long Signal", style=shape.triangleup,
          location=location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition, title="Exit Signal", style=shape.triangledown,
          location=location.abovebar, color=color.red, size=size.small)

Como usar:

  1. Abra o Pine Editor no TradingView
  2. Cole o código acima
  3. Clique em Add to chart
  4. Acesse Strategy Tester (aba inferior) para ver o resultado do backtest

Gerando Alertas para Webhook

Para conectar ao seu bot via webhook, você precisa que o script gere alertas programaticamente.

Método 1: alertcondition() — Para Indicators

//@version=5
indicator("RSI Alert Bot", overlay=false)

rsi = ta.rsi(close, 14)
plot(rsi, "RSI")

// Cria condições de alerta
longSignal  = ta.crossover(rsi, 30)   // RSI cruza acima de 30 (saindo de oversold)
shortSignal = ta.crossunder(rsi, 70)  // RSI cruza abaixo de 70 (saindo de overbought)

// Define os alertas (aparecem no menu "Create Alert" do TradingView)
alertcondition(longSignal,  title="RSI Long Signal",  message='{"action":"openLong","instId":"BTC-USDT-SWAP"}')
alertcondition(shortSignal, title="RSI Short Signal", message='{"action":"openShort","instId":"BTC-USDT-SWAP"}')

Como ativar:

  1. Com o script no gráfico, clique no sino (Criar Alerta)
  2. A condição aparece automaticamente como "RSI Long Signal" ou "RSI Short Signal"
  3. Em Notificações, ative Webhook URL e cole a URL do Bybit/OKX
  4. A mensagem JSON já está preenchida pelo script

Método 2: alert() — Para Strategies

//@version=5
strategy("MACD Webhook Strategy", overlay=true)

// MACD
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
macdCross = ta.crossover(macdLine, signalLine)
macdDrop  = ta.crossunder(macdLine, signalLine)

if macdCross
    strategy.entry("Long", strategy.long)
    // Dispara alerta com JSON para Bybit
    alert('{"symbol":"BTCUSDT","side":"Buy","orderType":"Market","qty":"0.001"}',
          alert.freq_once_per_bar)

if macdDrop
    strategy.close("Long")
    alert('{"symbol":"BTCUSDT","side":"Sell","orderType":"Market","qty":"0.001"}',
          alert.freq_once_per_bar)

Parâmetros de frequência do alert():

ParâmetroComportamento
alert.freq_allDispara toda vez que a condição é verdadeira dentro da barra
alert.freq_once_per_barDispara uma vez por barra (candle)
alert.freq_once_per_bar_closeDispara apenas no fechamento da barra

Use freq_once_per_bar_close para maior confiabilidade — o sinal é confirmado apenas quando a barra fecha.


Strategy Tester: Interpretando os Resultados

Ao usar strategy, o TradingView mostra métricas de backtesting automaticamente.

Métricas Essenciais

MétricaO que significaReferência
Net ProfitLucro total no períodoPositivo e crescente
Win Rate% de operações lucrativas40-60% é bom (depende do payoff)
Profit FactorGanhos totais / Perdas totais> 1,5 é aceitável; > 2 é bom
Max DrawdownMaior queda de pico a vale< 20% do capital
Avg TradeLucro médio por operaçãoDeve superar as taxas
Sharpe RatioRetorno ajustado ao risco> 1 é adequado; > 2 é excelente

Configurações Realistas de Backtest

Erro comum: rodar o backtest sem incluir custos reais.

strategy(
    "Nome",
    initial_capital=10000,
    commission_type=strategy.commission.percent,
    commission_value=0.1,    // Taxa real da exchange
    slippage=3               // Slippage em ticks (ajuste conforme o ativo)
)

Sempre inclua:

  • commission_value: a taxa real (Binance spot: 0,1%; Bybit futures maker: 0,02%)
  • slippage: o deslizamento de preço na execução
  • Um período de dados fora da amostra de treinamento (mínimo 20-30%)

Técnicas Avançadas

Múltiplos Timeframes (MTF)

Filtre sinais usando um timeframe maior:

//@version=5
indicator("MTF RSI Filter", overlay=false)

// RSI no timeframe atual
rsiLocal = ta.rsi(close, 14)

// RSI no timeframe diário (filtro de tendência macro)
rsiDaily = request.security(syminfo.tickerid, "D", ta.rsi(close, 14))

// Sinal só é válido se o RSI diário confirma a direção
validLong  = rsiLocal < 30 and rsiDaily > 40   // Local oversold + Diário saudável
validShort = rsiLocal > 70 and rsiDaily < 60   // Local overbought + Diário fraco

plot(rsiLocal, "RSI Local", color=validLong ? color.green : validShort ? color.red : color.blue)

Trailing Stop Automático

//@version=5
strategy("Trailing Stop", overlay=true)

ema = ta.ema(close, 50)
longCond = ta.crossover(close, ema)

if longCond
    strategy.entry("Long", strategy.long)

// Trailing stop: sai se o preço cair mais que ATR × 2 abaixo do máximo
atr = ta.atr(14)
strategy.exit("Trail", "Long", trail_offset=atr*2, trail_price=high)

Recursos para Estudar

RecursoLinkNível
Documentação oficialpine-script-docs.tradingview.comTodos
Script de exemplo: MACDBuscar "MACD Strategy" na Pine Script LibraryIniciante
Script de exemplo: Turtle TradingBuscar "Turtle Trading Rules"Intermediário
Binance Academy: Pine ScriptArtigo "How To Create TA Indicators on TradingView"Iniciante
OKX Strategies prontasListadas na configuração do Signal BotIniciante

Próximos Passos


Aviso Legal: Conteúdo educativo. Backtesting histórico não garante performance futura. Não constitui recomendação de investimento.

On this page