CommunityEscrita e Ediçãogithub.com

Pine Script v6 – Plugin de validação real

Habilidades Pine Script v6 e ferramentas MCP para agentes de codificação — sustentado por um validador real, não por prosa.

O que é Pine Script v6 – Plugin de validação real?

Este plugin fornece habilidades e ferramentas MCP especializadas para Pine Script v6, projetadas para agentes de IA (como Claude Code, Cursor, Codex) que precisam escrever scripts confiáveis para TradingView. Ele se baseia em validação concreta via `validate_pine_script` (que retorna erros estruturados com números de linha) e `lookup_pine_reference` (que fornece assinaturas reais para qualquer símbolo v6), evitando palpites sobre nomes de parâmetros que frequentemente quebram scripts. O plugin cobre o modelo de execução (scripts executam uma vez por barra), construtores sobrecarregados (`line.new`, `label.new`, `box.new`), anti-repintura com `request.security`, limites de plataforma (máximo de 64 `plot()`, 40 `request.*()`, etc.), APIs adicionadas ou removidas desde 2025, e erros comuns de compilação. É útil para qualquer desenvolvedor que queira evitar erros de tempo de compilação que parecem corretos no texto, garantindo que scripts Pine Script v6 sejam válidos antes de serem apresentados como funcionais.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add jpantsjoha/pinescript-plugin

Installed? Explore more Escrita e Edição skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Pine Script v6

Valide antes de afirmar que funciona

O Pine falha em tempo de compilação de maneiras que parecem corretas na tela. Nunca entregue um script que você não verificou.

validate_pine_script    # Ferramenta MCP — retorna erros estruturados com números de linha
lookup_pine_reference   # Ferramenta MCP — assinatura real para qualquer símbolo v6

Se o servidor MCP estiver indisponível, diga que o script não foi validado em vez de insinuar que compila.

Não adivinhe nomes de parâmetros. lookup_pine_reference existe porque adivinhar é a falha mais comum: inventar colour para color, shape= para style=, ou textalign em uma função que espera text_halign.

O modelo de execução decide tudo

Um script executa uma vez por barra, da esquerda para a direita no histórico e, em seguida, a cada tick da barra ao vivo.

// ERRADO — redefine a cada barra, então sempre é 1
int count = 0
count := count + 1

// CERTO — `var` inicializa uma vez e persiste
var int count = 0
count := count + 1

= declara. := reatribui. Usar = duas vezes no mesmo nome é um erro.

As funções ta.* devem ser executadas em cada barra. Elas mantêm estado interno, então chamar uma dentro de um condicional corrompe esse estado silenciosamente:

// ERRADO — ta.sma só avança quando a condição é verdadeira
value = condition ? ta.sma(close, 20) : na

// CERTO — calcula incondicionalmente, depois seleciona
smaValue = ta.sma(close, 20)
value = condition ? smaValue : na

Construtores sobrecarregados

line.new, label.new e box.new aceitam duas formas. Ambas são válidas:

line.new(x1=bar_index[1], y1=low[1], x2=bar_index, y2=high)          // coordenadas
line.new(first_point=chart.point.now(low), second_point=chart.point.now(high))

label.new(x=bar_index, y=high, text="hi")                            // coordenadas
label.new(point=chart.point.now(high), text="hi")

box.new(left=bar_index[5], top=high, right=bar_index, bottom=low)    // coordenadas
box.new(top_left=p1, bottom_right=p2)

Os nomes dos parâmetros diferem por função e são fáceis de confundir: label.new usa textalign; box.new e table.cell usam text_halign / text_valign.

Anti-repintura

// REPINTA — a barra atual de timeframe maior ainda está se formando
d = request.security(syminfo.tickerid, "D", close)

// ESTÁVEL — a barra anterior, já fechada
d = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_off)

Armazene a chamada em cache em uma variável; nunca repita inline. Proteja divisões de valores derivados de security com nz().

Limites da plataforma

LimiteValor
Chamadas plot()64
Chamadas request.*()40
Tamanho do script80.000 tokens
Tempo de loop500 ms
Objetos de desenho500 cada de linha/rótulo/caixa (aumente via max_*_count)

API adicionada desde 2025 — frequentemente esquecida

RecursoLançado
box.set_xloc()Mar 2025
active em todos os input.*()Jul 2025
timeframe_bars_back em time() / time_close()Out 2025
syminfo.isinNov 2025
request.footprint(), tipos footprint / volume_rowJan 2026
sort_field em array.sort() / matrix.sort()Abr 2026
Strings multilinha """…"""Abr 2026
calc_on_every_history_tick em strategy()Jul 2026

Regras também são removidas: A TradingView eliminou as restrições de indentação para linhas quebradas em dezembro de 2025, portanto uma continuação indentada com quatro espaços, ou sem indentação, é legal. Verifique as notas de versão antes de afirmar que um símbolo é inválido.

Estrutura do script

//@version=6
indicator("Title", overlay=true)     // ou strategy(...)
// imports -> tipos -> constantes -> inputs -> funções
// -> cálculos -> ordens -> plots -> alertas

Erros comuns de compilação

MensagemCausa
end of line without line continuationEspaço em branco à direita após um operador, ou uma expressão quebrada mal formatada
Undeclared identifierVariável atribuída apenas dentro de um if; declare-a antes com var ou um valor padrão
Cannot call 'ta.sma' with 'series' onde simple é necessárioO argumento length deve ser simple int — inputs são, valores de série não são
Mismatched input ... expecting= usado para reatribuição onde := é necessário

Referências

Habilidades Relacionadas