Debug Pine Script com Claude/ChatGPT — guia prático
Os 10 erros mais comuns do Pine Script v5 e como resolver com AI em minutos. Mensagens de erro decifradas, soluções testadas.
Você compilou seu primeiro indicador AI e… erro. Acontece em ~20% dos códigos gerados. A boa notícia: 90% dos erros do Pine v5 são repetitivos e fáceis de corrigir. Vou mostrar os mais comuns e como debugar com AI eficientemente.
Anatomia de um erro Pine
Quando código não compila, TradingView mostra:
- Linha do erro (linha exata onde está o problema)
- Mensagem técnica (frequentemente confusa)
- Sugestão (às vezes útil)
Exemplo:
line 23: Cannot use mutable variable in series context
maxVal := math.max(close, maxVal)
^^^^^^^^^^^^^^^^^^^^^^^Mensagem assusta. Solução é simples (apenas usar var declaration). AI resolve em 10 segundos.
Erro 1: “Mismatched input”
Mensagem típica: Mismatched input 'X' expecting Y
Causa: sintaxe quebrada — geralmente parêntese, vírgula ou chave faltando.
Exemplo:
// ❌ Errado - falta vírgula plot(ema21 color=color.green) // ✅ Correto plot(ema21, color=color.green)
Prompt de debug:
“Erro Pine v5: ‘Mismatched input’ na linha [N]. Aqui está o código:
[cola linha + 2 acima e 2 abaixo]
Onde está o problema sintático?”
Erro 2: “Cannot use mutable variable in series context”
Causa: tentar modificar variável sem declarar como var.
Solução:
// ❌ Errado maxVal = 0.0 maxVal := math.max(close, maxVal) // ✅ Correto - declarar var var maxVal = 0.0 maxVal := math.max(close, maxVal)
var mantém o valor entre as barras. Sem ele, Pine cria nova variável a cada barra.
Erro 3: “Series of integer expected”
Causa: passar tipo errado em função que espera int.
Exemplo:
// ❌ Errado - rsi é float, pivothigh espera int rsiPivot = ta.pivothigh(rsi, rsi[1], 5) // ✅ Correto rsiPivot = ta.pivothigh(rsi, 5, 5)
Sempre verifique tipos esperados na documentação Pine.
Erro 4: “Undeclared identifier”
Causa: usar variável antes de declarar, ou typo no nome.
Exemplo:
// ❌ Errado - typo ema21 = ta.ema(close, 21) plot(eam21) // "eam21" não existe // ✅ Correto plot(ema21)
Cuidado com acentos copy/paste de PT-BR também — AI às vezes gera variável tendência que vira erro.
Erro 5: “Cannot use ‘plot’ in local scope”
Causa: usar plot() dentro de if block.
Solução: use ternário para plot condicional.
// ❌ Errado if upTrend plot(ema200, color=color.green) // ✅ Correto plot(upTrend ? ema200 : na, color=color.green)
Erro 6: “Cannot call security() with X”
Causa: argumento errado em request.security().
Solução: verificar formato do timeframe.
// ❌ Errado htf = request.security(syminfo.tickerid, "H4", close) // ✅ Correto - usar formato Pine htf = request.security(syminfo.tickerid, "240", close)
Formatos válidos: "1" (1min), "60" (H1), "240" (H4), "D" (Daily), "W" (Weekly), "M" (Monthly).
Erro 7: “Repainting” warning
Não é erro de compilação, mas problema sério.
Causa: sinal “muda” depois de candle fechar. Backtest mostra performance falsa.
Solução: usar request.security() corretamente com offset.
// ❌ Repaints (sinal muda depois) htf = request.security(syminfo.tickerid, "D", close) // ✅ Não repaint - usa close confirmado htf = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
Sempre teste estratégias em modo replay para confirmar que não repinta.
Erro 8: “Argument cannot be ‘na'”
Causa: passar valor na em função que não aceita.
Solução: usar nz() para substituir NA por 0 (ou outro valor).
// ❌ Pode dar erro se variavel é NA total = strategy.openprofit + commission // ✅ Correto total = nz(strategy.openprofit, 0) + commission
Erro 9: Strategy não executa trades
Não é erro de compilação, mas frustrante.
Causa comum: condição de entrada nunca atende.
Debug:
// Adicionar plot para visualizar condicoes plot(longCondition ? 1 : 0, "Long Cond", color=color.green) bgcolor(longCondition ? color.new(color.green, 85) : na)
Se condição nunca pinta verde no gráfico, lógica está errada. Simplifique condições uma de cada vez.
Erro 10: “Drawing functions … exceeded”
Causa: muitas label.new() ou line.new() — Pine tem limite.
Solução: aumentar limites no indicator().
indicator("Meu Indicador", overlay=true, max_lines_count=100, // default é 50 max_labels_count=100, // default é 50 max_boxes_count=100)
Workflow de debug com AI
Passo 1: Identificar erro EXATO
TradingView mostra linha. Vá até ela, copie:
- A linha do erro + 3 acima + 3 abaixo
- Mensagem de erro COMPLETA
- Número da linha
Passo 2: Prompt focado
“Erro Pine Script v5: ‘[mensagem]’ na linha [N].
CÓDIGO (linha com erro destacada):
[linha 20] var float maxVal = 0.0
[linha 21] if condition
[linha 22] maxVal = math.max(close, maxVal) // <– ERRO AQUI
[linha 23] plot(maxVal)
Por que erro? Como corrigir? Explique mudança em 2 linhas.”
Passo 3: Aplicar correção
Cole sugestão no TradingView. Save. Veja se compila.
Passo 4: Se persiste
Algumas vezes AI fica “preso” em padrão errado dentro da mesma conversa. Soluções:
- Comece chat novo com prompt limpo
- Forneça código COMPLETO (não apenas snippet)
- Diga “ignore o que sugerimos antes, comece do zero”
- Mude de AI (se ChatGPT trava, tente Claude e vice-versa)
Quando AI não consegue resolver
~5% dos casos. Sinais:
- AI gera várias “soluções” que não compilam
- Cada correção introduz novo erro
- AI começa a “explicar” sem corrigir
Nesses casos:
- Simplifique radicalmente: remova 50% do código, faça funcionar, adicione gradualmente
- Consulte documentação oficial: tradingview.com/pine-script-docs/
- Procure Stack Overflow: tag “pine-script”
- Pergunte em forum do TradingView (community)
- Reddit r/algotrading e r/pinescript
Geralmente é solução simples que AI não captou. Humanos veem facilmente em fórum.
AI é ótima muleta, mas entender Pine Script básico evita 90% dos problemas.
Recursos grátis:
• Documentação oficial TradingView (excelente)
• PineCoders no GitHub
• YouTube: “Big Bits Trading” tem séries grátis
Investir 10-15 horas estudando = pode escrever Pine sem AI eventualmente. AI vira amplificação, não dependência.
Debug com AI = 5x mais rápido
Errors Pine Script são repetitivos. Aprenda os padrões, AI resolve em segundos.
Criar indicadores 10 Indicators