CommunityRedacción y edicióngithub.com

jpantsjoha/pinescript-plugin

Habilidades en Pine Script v6 y herramientas MCP para agentes de codificación, respaldado por un validador real, no por prosa.

¿Qué es pinescript-plugin?

Este plugin proporciona un conjunto de habilidades y herramientas MCP (Model Context Protocol) diseñadas para agentes de IA (como Claude Code, Cursor o Codex) que escriben o mantienen scripts de Pine Script v6 para TradingView. En lugar de confiar en documentación textual o en suposiciones, el plugin incluye un validador real (`validate_pine_script`) que verifica la sintaxis y el comportamiento del código en tiempo de compilación, devolviendo errores estructurados con números de línea. También ofrece `lookup_pine_reference` para consultar firmas exactas de símbolos v6, evitando errores comunes como inventar nombres de parámetros (por ejemplo, `colour` en lugar de `color`). El plugin cubre aspectos críticos de Pine Script: el modelo de ejecución por barra, el uso correcto de variables con `var`, la prevención de repintado en `request.security()`, y las limitaciones de plataforma. Es útil para cualquier agente que deba generar o depurar indicadores, estrategias o bibliotecas en Pine Script v6 de manera confiable, asegurando que el código compila y funciona según lo esperado antes de ser desplegado.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add jpantsjoha/pinescript-plugin

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Pine Script v6

Validar antes de afirmar que funciona

Pine falla en tiempo de compilación de maneras que se leen bien en la página. Nunca entregues un script que no hayas verificado.

validate_pine_script    # Herramienta MCP — devuelve errores estructurados con números de línea
lookup_pine_reference   # Herramienta MCP — firma real para cualquier símbolo v6

Si el servidor MCP no está disponible, di que el script no está validado en lugar de implicar que compila.

No adivines nombres de parámetros. lookup_pine_reference existe porque adivinar es el fallo más común: inventar colour por color, shape= por style=, o textalign en una función que espera text_halign.

El modelo de ejecución lo decide todo

Un script se ejecuta una vez por barra, de izquierda a derecha a través del historial, luego en cada tick de la barra en vivo.

// INCORRECTO — se reinicia cada barra, por lo que siempre es 1
int count = 0
count := count + 1

// CORRECTO — `var` se inicializa una vez y persiste
var int count = 0
count := count + 1

= declara. := reasigna. Usar = dos veces sobre el mismo nombre es un error.

Las funciones ta.* deben ejecutarse en cada barra. Mantienen estado interno, por lo que llamar una dentro de un condicional lo corrompe silenciosamente:

// INCORRECTO — ta.sma solo avanza cuando la condición es verdadera
valor = condicion ? ta.sma(close, 20) : na

// CORRECTO — calcular sin condición, luego seleccionar
smaValue = ta.sma(close, 20)
valor = condicion ? smaValue : na

Constructores sobrecargados

line.new, label.new y box.new aceptan cada uno dos formas. Ambas son 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="hola")                            // coordenadas
label.new(point=chart.point.now(high), text="hola")

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

Los nombres de parámetros difieren por función y son fáciles de confundir: label.new toma textalign; box.new y table.cell toman text_halign / text_valign.

Anti-repintado

// REPINTA — la barra actual de marco temporal superior aún se está formando
d = request.security(syminfo.tickerid, "D", close)

// ESTABLE — la barra anterior, cerrada
d = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_off)

Cachea la llamada en una variable; nunca la repitas en línea. Protege las divisiones de valores derivados de security con nz().

Límites de la plataforma

LímiteValor
Llamadas plot()64
Llamadas request.*()40
Tamaño del script80,000 tokens
Tiempo de bucle500 ms
Objetos de dibujo500 de cada línea/etiqueta/caja (aumentar con max_*_count)

API añadida desde 2025 — a menudo omitida

CaracterísticaLanzamiento
box.set_xloc()Mar 2025
active en cada input.*()Jul 2025
timeframe_bars_back en time() / time_close()Oct 2025
syminfo.isinNov 2025
request.footprint(), tipos footprint / volume_rowEne 2026
sort_field en array.sort() / matrix.sort()Abr 2026
Cadenas multilínea """…"""Abr 2026
calc_on_every_history_tick en strategy()Jul 2026

Las reglas también se eliminan: TradingView eliminó las restricciones de sangría para líneas envueltas en diciembre de 2025, por lo que una continuación con sangría de cuatro espacios, o sin sangría alguna, es legal. Consulta las notas de lanzamiento antes de afirmar que un símbolo es inválido.

Estructura del script

//@version=6
indicator("Título", overlay=true)     // o strategy(...)
// imports -> tipos -> constantes -> inputs -> funciones
// -> cálculos -> órdenes -> plots -> alertas

Errores comunes de compilación

MensajeCausa
end of line without line continuationEspacio en blanco al final después de un operador, o una expresión envuelta rota
Undeclared identifierVariable asignada solo dentro de un if; declárala antes con var o un valor por defecto
Cannot call 'ta.sma' with 'series' donde se requiere simpleEl argumento length debe ser simple int — los inputs lo son, los valores de serie no
Mismatched input ... expectingSe usó = para reasignación donde se requiere :=

Referencias

Skills relacionados