Ejecutar y mantener una estrategia Pine: paper, Properties, alertas

Operación diaria: paper, Properties, alertas vs órdenes broker, updates tras re-export — VPS normalmente innecesario.

📖 8 min read

📝 1,438 words

🏷️ Pine Script and TradingView

Compartir este artículo:

Las alertas no son órdenes

El Strategy Tester muestra doscientas operaciones. Tu registro de alertas está vacío. Nada está roto, y esta es la razón documentada:

Las alertas solo se disparan en la barra en tiempo real. [1]

Cada ejecución del backtest es una reproducción del historial. Una alerta es un evento en tiempo real. Nada en la parte histórica del gráfico disparó nunca una alerta, y nunca lo hará: ninguna configuración cambia eso.

La frecuencia que no elegiste

pine
alert(message, freq)

freq vale alert.freq_once_per_bar por defecto [1]. Hay tres valores:

Constante [1]Se dispara
alert.freq_once_per_barla primera vez que la condición es cierta en la barra — el valor por defecto
alert.freq_once_per_bar_closesolo al cierre confirmado de la barra
alert.freq_allcada vez que la condición es cierta

Si tu estrategia decide al cierre de la barra, el valor por defecto es el equivocado. Te avisará de una condición intrabarra que ya se ha revertido cuando la barra cierra: el problema del repintado con otro disfraz, y la razón por la que un flujo de alertas en vivo puede contradecir al backtest que lo generó.

Alertas de ejecución de órdenes y su texto

Una alerta de script creada desde una estrategia puede configurarse para que los eventos de ejecución de órdenes también la disparen [1]. El texto por orden viene del parámetro alert_message, que aceptan strategy.entry(), strategy.exit(), strategy.close() y strategy.order() [1]; lo recuperas en el cuerpo de la alerta con el marcador {{strategy.order.alert_message}} [1].

Otros marcadores disponibles en los mensajes de alerta incluyen {{ticker}}, {{exchange}}, {{interval}}, {{close}}, {{time}} y {{timenow}} [1].

La parte que TradingView no promete

Una alerta es una notificación. No coloca una orden en tu bróker. Pasar de una alerta disparada a una posición abierta requiere una integración con el bróker, y el retardo entre ambas es tuyo: no está en el tester, que asume que la ejecución ocurrió al precio que modeló. Esa brecha se mide en la comparación entre el tester y el mercado en vivo.


Los límites que deciden tus resultados

Parte de lo que informa tu backtest lo decide tu cuenta, no tu estrategia. Conviene saberlo antes de gastar un fin de semana depurando uno de estos límites.

Tu plan cambia tu backtest

Barras históricas disponibles, por plan [2]:

Plan [2]Barras históricas
Ultimate40.000
Expert25.000
Premium20.000
Essential y Plus10.000
Otros planes5.000

Lee esa tabla otra vez, porque la consecuencia es mayor de lo que parece: dos personas que ejecutan un script idéntico en un símbolo y temporalidad idénticos obtienen backtests distintos. Quien tiene más historial prueba más regímenes de mercado, y quien tiene menos puede no llegar al drawdown que le habría hecho cambiar de opinión.

Así que un factor de beneficio publicado no es reproducible si no se indica el plan junto a él. Si publicas una cifra, indica tu plan; si lees una que no lo hace, no puedes comprobarla.

El tope de órdenes que detiene tu backtest en silencio

Un script puede colocar un máximo de 9.000 órdenes en un backtest, que sube a 1.000.000 con Deep Backtesting [2].

Un script que opera con frecuencia sobre un rango largo alcanza las 9.000 y simplemente deja de añadir operaciones. La curva se aplana y las estadísticas siguen pareciendo verosímiles. Nada te avisa de que el test terminó antes: compara el número de operaciones con el tope antes de concluir que la estrategia dejó de funcionar.

Tiempo de ejecución, que hace fallar un script que antes pasaba

El tiempo asignado para ejecutarse sobre todas las barras de un conjunto de datos es de 20 segundos para cuentas básicas y 40 para las demás [2].

Este confunde porque tu lógica no tiene que cambiar para alcanzarlo. Añade barras, añade una llamada request.*, cambia a un símbolo con más historial, y un script que funcionaba ayer agota el tiempo hoy.

El resto, en una tabla

Límite [2]Valor
Recuentos de plot por script64
Llamadas request.* únicas40, o 64 en Ultimate
Búfer histórico, la mayoría de series5.000 barras
Búfer histórico de open, high, low, close, timehasta 10.000 barras
Líneas, cajas, polilíneas y etiquetas mostradas por defectoúltimas 50
Máximo de IDs de línea, caja y etiqueta500
Máximo de IDs de polilínea100

Dos de esos provocan informes de fallos que no son fallos. Los dibujos que exceden el límite mostrado no se dibujan, así que una etiqueta que esperabas y no encuentras suele ser el tope, no tu condición — y poner las propiedades de un dibujo en na sigue contándolo en el total [2]. Y una serie indexada más atrás de lo que permite su búfer es un límite, no un error tipográfico.

El recuento de plots también merece una segunda mirada, porque no es uno por cada llamada a plot(): plotarrow(), plotcandle(), plotchar(), plotshape(), alertcondition(), bgcolor(), barcolor() y un fill() con color de serie consumen todos de los mismos 64 [2].


Qué comprobar de verdad, y con qué frecuencia

Primero, lo que no tienes que hacer: mantener una máquina encendida. Una estrategia Pine se ejecuta en el gráfico de TradingView, no en tu ordenador, así que no hay terminal que reiniciar ni VPS que alquilar. Esta es la diferencia estructural con un Expert Advisor de MT5, y casi todo el consejo de mantenimiento que encontrarás para Pine es un artículo de MT5 con las palabras cambiadas — ver desplegar y mantener un EA para lo que aquello sí requiere.

Lo que queda es comprobar que sigue siendo cierto lo que tu backtest asumió.

Tras cada re-export — la declaración

Es la única comprobación obligatoria, porque la declaración strategy() es donde se deciden tus resultados y una exportación nueva la reescribe.

ConfirmaPorque
commission_type y commission_value están fijadosuna exportación por defecto puede no costar nada
slippage está en ticks de este instrumentoun tick no mide lo mismo en dos símbolos
pyramiding es el número que queríasvale 1 por defecto [3]; un valor mayor acumula posiciones
cada control de entrada cambia el comportamiento de verdadmueve un umbral y confirma que la lista de operaciones cambia

Esa última fila no es paranoia. Una entrada declarada pero nunca referenciada en la lógica genera un control que funciona y no hace nada, y no hay forma de saberlo mirándolo — ver los parámetros de coste en detalle.

Cada semana — dos comprobaciones

Elige tres operaciones de la List of Trades y búscalas en el gráfico. ¿Corresponde el precio de ejecución a un precio al que esa barra realmente operó? Esta única comprobación detecta fuga de futuro, un tipo de gráfico no estándar y un tamaño de tick mal leído, y cuesta menos de un minuto.

Confirma que tu filtro de sesión sigue coincidiendo con el horario del instrumento. El horario de verano lo mueve dos veces al año, y una cadena de sesión se interpreta en la zona horaria del mercado, no del gráfico — las reglas de los filtros de sesión explican por qué eso hace daño.

Cada mes — ¿sigue operando?

Una estrategia que ha dejado de abrir posiciones está o en un régimen de mercado para el que no fue construida, o tiene una condición que ya no llega a ser cierta. En la curva de capital ambas cosas son idénticas: una línea plana.

Distínguelas dibujando la condición en sí, no el resultado. Si la condición se cumple y no siguen órdenes, mira pyramiding, el tope de órdenes, o un filtro que ahora es permanentemente falso. Si la condición no se cumple nunca, el mercado cambió — y eso es una decisión que tomar, no un fallo que arreglar.

Lo que no hay que comprobar

El código, salvo que lo cambiaras tú o lo cambiara la plataforma. Los valores por defecto de cada versión son la excepción que merece un recordatorio en el calendario: los cambios de v5 a v6 alteraron comportamientos sin dar error, y esa clase de cambio es la única que puede romper un script que nunca tocaste.



Tactix AI en este flujo

AlfaTactix incluye Tactix AI: usa Tactix Studio para describir tu idea en lenguaje natural y rellenar timeframes, señales, filtros y riesgo en el mismo formulario de seis pasos — o abre Tactix Guide en cualquier paso si solo necesitas explicar un campo. Revisa cada valor y luego exporta MQL5 o Pine Script desde Code Generator (form-first — no prompt-to-code sin probar).

Preguntas frecuentes

En el gráfico, Properties, paper, re-export. Tester.

Normalmente no. Gemelo MT5: Deploy EA.

Re-export. Production-ready.

Costes, sesión, riesgo. Comisión.