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
| Limite | Valor |
|---|---|
Chamadas plot() | 64 |
Chamadas request.*() | 40 |
| Tamanho do script | 80.000 tokens |
| Tempo de loop | 500 ms |
| Objetos de desenho | 500 cada de linha/rótulo/caixa (aumente via max_*_count) |
API adicionada desde 2025 — frequentemente esquecida
| Recurso | Lançado |
|---|---|
box.set_xloc() | Mar 2025 |
active em todos os input.*() | Jul 2025 |
timeframe_bars_back em time() / time_close() | Out 2025 |
syminfo.isin | Nov 2025 |
request.footprint(), tipos footprint / volume_row | Jan 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
| Mensagem | Causa |
|---|---|
end of line without line continuation | Espaço em branco à direita após um operador, ou uma expressão quebrada mal formatada |
Undeclared identifier | Variá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ário | O 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 |