QuantumAlgo
Inicio›Blog›Indicadores
Indicadores

Pine Script v6: guía para empezar para desarrolladores de indicadores

Pine Script v6: guía para empezar para desarrolladores de indicadores
◆ LA RESPUESTA CORTA

Pine Script v6 es la versión actual del lenguaje de TradingView para indicadores y estrategias personalizados; todo script empieza con la directiva //@version=6 seguida de una declaración indicator(). Frente a v5, impone un sistema de tipos más estricto, se ejecuta más rápido, gestiona request.security() de forma más segura y añade nuevas funciones integradas, por lo que la mayoría de los errores de migración son discrepancias de tipos que se corrigen con conversiones int() o float().

¿Qué es Pine Script?

Pine Script es el lenguaje específico de dominio de TradingView para escribir indicadores técnicos y estrategias personalizados que se ejecutan dentro del motor de gráficos de TradingView. No es un lenguaje de programación de propósito general: cada script se ejecuta una vez por barra a lo largo de todo el historial del gráfico, y el estado se gestiona de forma implícita a través de la serie de barras. Si nunca lo has usado, el modelo mental se asimila en un día; las trampas, en un año.

La versión 6, lanzada en noviembre de 2024, es la versión de producción actual. Las versiones 4 y 5 siguen funcionando, pero ya no son la opción por defecto para los scripts nuevos.

¿Cómo se escribe tu primer script en v6?

Todo script de Pine Script empieza con una directiva de versión en la línea 1. Para crear un indicador en v6:

//@version=6 indicator("My First v6 Indicator", overlay=true) // Dibuja el precio de cierre como una línea en el gráfico plot(close, color=color.new(color.aqua, 0), linewidth=2)

Guárdalo en el Pine Editor de TradingView y añádelo al gráfico. Verás el precio de cierre dibujado como una línea cian. Fíjate en tres cosas: la directiva //@version=6 es obligatoria y debe ser la primera línea no vacía; indicator() es la declaración que define si tu script es un indicador (superpuesto o en panel) o una estrategia (con operaciones simuladas); y overlay=true significa que el script dibuja sobre el gráfico de precios en lugar de en un panel separado debajo.

Qué cambió de v5 a v6

1. Sistema de tipos más estricto

El cambio más importante. v6 aplica una comprobación de tipos que v5 ignoraba o resolvía en silencio. El caso más habitual: v5 te dejaba pasar un series int donde se esperaba un simple int y lo degradaba sin avisar. v6 lanzará un error en tiempo de compilación.

Consecuencia práctica: cuando migras un script de v5 y de repente no compila, el error casi siempre es una discrepancia de tipos en un argumento de función. La solución suele ser envolver el valor en int(), float() o usar la función integrada adecuada para convertir los tipos de forma explícita.

2. Ejecución más rápida

v6 introdujo optimizaciones del compilador que mejoran de forma notable la velocidad de ejecución de la mayoría de los scripts. Las mejoras se notan sobre todo en scripts con uso intensivo de request.security() (análisis multitemporal), manipulación de arrays u operaciones con matrices. Los scripts sencillos de plot y color no notarán una diferencia significativa.

3. Mejor comportamiento de request.security()

La función para solicitar datos de otra temporalidad ganó un manejo de argumentos más limpio y una mejor protección frente a la clásica trampa del "sesgo de anticipación (lookahead bias)". El error típico de v4/v5 —usar lookahead=barmerge.lookahead_on sin entender las consecuencias— ahora genera una advertencia más clara al publicar el script.

4. Nuevas funciones integradas

Varias funciones de utilidad que antes había que implementar a mano ahora vienen integradas. Novedades destacadas: mejor formateo de cadenas, mejor segmentación de matrices y métodos prácticos en el tipo array que reducen el código repetitivo.

¿Qué patrones de Pine Script importan para los indicadores SMC?

Si escribes indicadores de Smart Money Concepts (order blocks, FVG, detección de BOS, liquidity sweeps), hay tres patrones de Pine Script que aparecen constantemente. Domínalos y podrás construir la mayor parte de lo que incluyen las suites SMC comerciales.

Patrón 1: ¿cómo se detectan los swing highs y swing lows?

La base de todo indicador de estructura de mercado. Usa ta.pivothigh() y ta.pivotlow() con una ventana de barras a izquierda y derecha:

//@version=6 indicator("Swing Detection", overlay=true) length = input.int(5, "Pivot Length", minval=1) ph = ta.pivothigh(high, length, length) pl = ta.pivotlow(low, length, length) // Dibuja círculos en los swing points confirmados plotshape(not na(ph), location=location.abovebar, style=shape.circle, color=color.red, size=size.tiny) plotshape(not na(pl), location=location.belowbar, style=shape.circle, color=color.green, size=size.tiny)

Nota: los pivots se confirman length barras después de formarse. Es una confirmación sin repintado: una vez impreso, el pivot no se mueve. La contrapartida es la latencia: solo sabes que el pivot existe 5 barras después (con length=5).

Patrón 2: ¿cómo se dibujan cajas para order blocks y FVG?

Usa la función integrada box.new() para dibujar rectángulos. Las cajas se pueden actualizar, extender a la derecha a medida que se imprimen nuevas barras o eliminar cuando quedan invalidadas:

Quantum Algo
//@version=6 indicator("Bullish FVG Detector", overlay=true, max_boxes_count=500) // FVG alcista: mínimo de la barra actual > máximo de hace 2 barras fvg_top = low fvg_bot = high[2] isFVG = fvg_top > fvg_bot if isFVG box.new(left=bar_index[2], top=fvg_top, right=bar_index, bottom=fvg_bot, bgcolor=color.new(color.green, 80), border_color=color.new(color.green, 50))

Aquí hay dos cosas que pillan primero a los desarrolladores novatos. Primero, max_boxes_count vale 50 por defecto: súbelo en cualquier indicador que dibuje zonas a lo largo de historiales largos. Segundo, las cajas se dibujan en tiempo de compilación por barra; si dibujas una caja en cada barra sin lógica condicional, agotarás el límite enseguida.

Patrón 3: mantener el estado entre barras (la palabra clave var)

Pine Script ejecuta tu código una vez por barra, pero a menudo necesitas un estado que persista. La palabra clave var declara una variable que se inicializa una sola vez y persiste entre ejecuciones de barra:

//@version=6 indicator("BOS Tracker", overlay=true) // Estado persistente: guarda el último swing high confirmado var float lastSwingHigh = na // Actualiza cuando se confirma un nuevo pivot high ph = ta.pivothigh(high, 5, 5) if not na(ph) lastSwingHigh := ph // Detecta BOS: cierre por encima del último swing high isBOS = not na(lastSwingHigh) and close > lastSwingHigh if isBOS label.new(bar_index, high, "BOS", color=color.new(color.green, 0), textcolor=color.white)

Sin var, la variable se reiniciaría en cada barra. Con var, el valor persiste. Es el patrón básico de cualquier indicador que necesite memoria de eventos pasados: todo detector de BOS, detector de MSS, rastreador de mitigación y sistema de envejecimiento de order blocks usa este patrón por dentro.

¿Qué trampas pillan a quienes empiezan con Pine Script?

Trampa 1 Indicadores que repintan, se ven geniales en el backtest pero pierden dinero en real. La causa es usar lookahead=barmerge.lookahead_on en llamadas a request.security() o usar construcciones que miran al futuro como ta.pivothigh() sin tener en cuenta el retraso de confirmación de barra. Si las señales de tu indicador se ven perfectas en datos históricos, sospecha primero del repintado.
Trampa 2 No usar format.mintick en las etiquetas de precio. Fijar la precisión decimal a mano falla cuando el script se aplica a instrumentos con distintos tamaños de tick (BTC vs EURUSD vs ES). Usa str.tostring(price, format.mintick) para cualquier precio que muestres en etiquetas o alertas.
Trampa 3 Dibujar demasiados objetos. Pine Script tiene límites estrictos en el número de líneas, cajas, etiquetas y tablas que puede dibujar un script (50 por defecto, 500 como máximo). Los indicadores que dibujan una etiqueta en cada barra o una caja por cada señal descartarán en silencio los objetos más antiguos. Define max_lines_count, max_boxes_count, etc. de forma explícita en la declaración indicator() cuando necesites más.
Trampa 4 Asignación frente a reasignación de variables. Pine usa = para la primera asignación y := para reasignar. x = 5 en dos sitios crea dos variables con ámbitos distintos. x := 5 reasigna una existente. Si las confundes, pasarás una hora depurando valores que no se actualizan.

Los bloques básicos de Pine Script v6 de un vistazo

Las funciones integradas en las que se apoya esta guía, qué hacen y la trampa de cada una.
TareaFunción integradaQué haceOjo con
Swing highs y swing lowsta.pivothigh() / ta.pivotlow()Confirma pivots con una ventana de barras a izquierda y derechaSolo se confirma 'length' barras después del pivot
Zonas de order blocks y FVGbox.new()Dibuja rectángulos que puedes extender o eliminar50 cajas por defecto; sube max_boxes_count (máx. 500)
Estado entre barraspalabra clave varSe inicializa una vez y conserva su valorReasigna con :=, no con =
Datos de temporalidad superiorrequest.security()Solicita datos de otra temporalidadlookahead_on puede filtrar datos futuros y repintar
Etiquetas de preciostr.tostring(price, format.mintick)Formatea los precios al tamaño de tick del símboloLos decimales fijos fallan entre instrumentos

◆Todo script debe empezar con la directiva //@version=6 en su primera línea no vacía.

¿Cómo se publica un script en TradingView?

Cuando tu script funcione, puedes publicarlo en la Public Library de TradingView, ya sea como código abierto (cualquiera puede leer y copiar el código) o solo por invitación (tú controlas el acceso). Ambas opciones llegan a la base de usuarios de TradingView; las publicaciones de código abierto se revisan según las House Rules y, si la calidad es alta, entran en el proceso de Editors' Picks.

Tres House Rules que pillan con más frecuencia a los autores nuevos: no incluyas enlaces promocionales externos en los títulos ni en las descripciones de los scripts, no uses técnicas de repintado sin declararlas y no menciones tu marca dentro de lo que se dibuja en el gráfico (ni logos ni etiquetas de marca de agua). Las dos primeras son técnicas; la tercera es de cumplimiento y tropiezan con ella a menudo los publicadores comerciales.

Preguntas frecuentes

¿Tengo que migrar mis scripts de v5 a v6?

Los scripts de v5 existentes siguen funcionando en TradingView de forma indefinida: no hay fecha de retirada obligatoria. Migrar solo se recomienda cuando necesitas una función específica de v6 (sistema de tipos mejorado, mejor rendimiento, nuevas funciones integradas) o cuando empiezas un script desde cero. En los indicadores publicados, el coste de migrar rara vez compensa salvo que estés manteniendo activamente el script.

¿Cuál es el mayor cambio incompatible de Pine Script v6?

El sistema de tipos reforzado. v6 aplica una comprobación de tipos más estricta: las conversiones implícitas que en v5 funcionaban en silencio ahora lanzarán errores. El problema de migración más habitual son las discrepancias de tipo series frente a simple en argumentos de función que antes pasaban desapercibidas.

¿Es Pine Script v6 más rápido que v5?

Sí, de media. El compilador de v6 optimiza de forma más agresiva y tiene un entorno de ejecución más rápido para los patrones más comunes. La mejora se nota sobre todo en scripts con mucha manipulación de arrays o muchas llamadas a request.security.

¿Puedo usar v5 y v6 en el mismo script?

No. La versión se declara al principio del script (//@version=6 o //@version=5) y se aplica a todo el script. No puedes mezclar versiones dentro de un mismo indicador o estrategia.

¿Dónde puedo publicar indicadores de Pine Script v6?

La Public Library de TradingView acepta scripts tanto de v5 como de v6. Los moderadores de TradingView revisan los scripts de código abierto según las House Rules, y se aplican las mismas reglas sea cual sea la versión. Los scripts de código cerrado (solo por invitación) tienen menos revisión, pero no se pueden promocionar en la Public Library.

● Código abierto en TradingView

Mira indicadores v6 en producción en acción

El Neural Confluence Engine gratuito de Quantum Algo y toda la suite Zeno están escritos en Pine Script v6. El script gratuito es de código abierto: clónalo, estúdialo y modifícalo como referencia de aprendizaje.

Ver en TradingView →
Uso gratuito · Scripts publicados revisados por los moderadores de TradingView

Referencias y guías relacionadas

Guías relacionadas

Más lecturas

Fuentes de referencia

Redactor · Quantum Algo

ILY escribe contenido educativo de trading para Quantum Algo: desglosa los Smart Money Concepts, la estructura de mercado y la acción del precio en lecciones claras y prácticas. Cada guía es revisada por Quant, el fundador, y cada idea de trading que publica Quantum Algo lleva marca de tiempo para que cualquiera pueda verificarla.

✓ Revisado por Quant · Fundador y Head Trader