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
| Vantagem | Detalhe |
|---|---|
| Sem servidor | Executa diretamente no TradingView |
| Dados históricos | Acesso a OHLCV de qualquer ativo e timeframe |
| Strategy Tester | Backtesting visual integrado com métricas completas |
| Alertas nativas | Conecta diretamente a webhooks |
| Comunidade | Milhares de scripts open-source para estudar |
| Sem custo de infra | Nã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 backtesterstrategy: 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:
- Abra o Pine Editor no TradingView
- Cole o código acima
- Clique em Add to chart
- 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:
- Com o script no gráfico, clique no sino (Criar Alerta)
- A condição aparece automaticamente como "RSI Long Signal" ou "RSI Short Signal"
- Em Notificações, ative Webhook URL e cole a URL do Bybit/OKX
- 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âmetro | Comportamento |
|---|---|
alert.freq_all | Dispara toda vez que a condição é verdadeira dentro da barra |
alert.freq_once_per_bar | Dispara uma vez por barra (candle) |
alert.freq_once_per_bar_close | Dispara apenas no fechamento da barra |
Use
freq_once_per_bar_closepara 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étrica | O que significa | Referência |
|---|---|---|
| Net Profit | Lucro total no período | Positivo e crescente |
| Win Rate | % de operações lucrativas | 40-60% é bom (depende do payoff) |
| Profit Factor | Ganhos totais / Perdas totais | > 1,5 é aceitável; > 2 é bom |
| Max Drawdown | Maior queda de pico a vale | < 20% do capital |
| Avg Trade | Lucro médio por operação | Deve superar as taxas |
| Sharpe Ratio | Retorno 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
| Recurso | Link | Nível |
|---|---|---|
| Documentação oficial | pine-script-docs.tradingview.com | Todos |
| Script de exemplo: MACD | Buscar "MACD Strategy" na Pine Script Library | Iniciante |
| Script de exemplo: Turtle Trading | Buscar "Turtle Trading Rules" | Intermediário |
| Binance Academy: Pine Script | Artigo "How To Create TA Indicators on TradingView" | Iniciante |
| OKX Strategies prontas | Listadas na configuração do Signal Bot | Iniciante |
Próximos Passos
- TradingView Webhook: guia completo — conectar os alertas à exchange
- API Trading com Python — quando Pine Script não é suficiente
- Backtesting de Estratégias — backtesting mais rigoroso com Python
Aviso Legal: Conteúdo educativo. Backtesting histórico não garante performance futura. Não constitui recomendação de investimento.
TradingView Webhook: Automatize Ordens sem Código Python
Como conectar alertas do TradingView a Bybit, OKX e outras exchanges via webhook para executar ordens automaticamente com base em qualquer indicador ou estratégia Pine Script.
Gestão de Risco em Sistemas Automatizados
Como proteger seu capital em trading automatizado: regra dos 1-2%, stop-loss com ATR, circuit breaker diário, alavancagem controlada, overfitting no backtesting e riscos específicos de bots.