Qué puede significar «listo para producción»
La frase se usa constantemente y casi nunca se define, lo que la vuelve infalsable. Esta es una definición lo bastante estrecha para comprobarse.
Una estrategia Pine lista para producción es aquella en la que el archivo hace lo que pretendías y el backtest mide algo posible. Eso es todo. Es una propiedad del artefacto, no un pronóstico sobre el mercado.
Las cuatro afirmaciones que sí hace
| Afirmación | Cómo la compruebas |
|---|---|
| es una estrategia, no un indicador | la segunda línea dice strategy( |
| los costes están declarados y son realistas | commission_value, commission_type, slippage están fijados [1] |
| cada control afecta al comportamiento | mueve cada input y confirma que cambia el número de operaciones |
| las ejecuciones eran posibles | tres operaciones comprobadas contra el rango máximo-mínimo del gráfico |
Un archivo que pasa las cuatro es uno sobre el que puedes razonar. Un archivo que falla cualquiera produce cifras que no describen nada, y ningún análisis posterior lo recupera.
Las cuatro afirmaciones que explícitamente no hace
Esta es la parte que vuelve utilizable el término:
No afirma que la estrategia sea rentable. Una implementación limpia de una mala idea sigue siendo una mala idea, correctamente implementada.
No afirma que el resultado se repita. Una estrategia sobreajustada pasa todas las comprobaciones anteriores: el código está limpio, los costes son honestos, las ejecuciones son reales, y los parámetros resultan ser los que convenían a ese tramo de historial. Ese fallo no deja ningún rastro en el archivo.
No afirma que la estrategia vaya a operar sola. Una estrategia de Pine lanza alertas; una alerta es una notificación, no una orden, y las alertas solo se disparan en la barra en tiempo real. Pasar de alerta a ejecución requiere una integración con el bróker que no forma parte del archivo.
No afirma que el backtest sea reproducible por otra persona. Cuánto historial probaste depende de tu plan de cuenta de TradingView [4], y tus valores de entrada viven con el gráfico y no en el archivo. Dos personas con el mismo archivo pueden obtener informes distintos con toda legitimidad.
Por qué la definición estrecha es más útil
Porque es alcanzable y comprobable en unos cinco minutos, y porque separa dos preguntas que se confunden constantemente:
- ¿Es correcto este archivo? — se responde hoy, por inspección
- ¿Es buena esta estrategia? — solo se responde con evidencia fuera de muestra, y nunca con certeza
Casi toda la decepción en este campo viene de tratar un sí a la primera como un sí a la segunda. Las comprobaciones de la siguiente sección son todas para la primera pregunta, que es la única en la que una herramienta puede ayudar.
Migrar una estrategia de v5 a v6
Una estrategia v5 que escribiste o heredaste es el caso más claro de un archivo que puede fallar la definición anterior pareciendo terminado. Algunos cambios de v6 detienen el script y cuestan diez minutos. Otros dejan que compile y se ejecute y cambian lo que devuelve, y cuestan un backtest en el que crees. Todos están en la guía de migración de TradingView [6]; aquí se agrupan por consecuencia, y la superficie completa del lenguaje está en la referencia de v6 [3].
Los cambios que se ejecutan y devuelven otras cifras
| Qué cambió [6] | v5 | v6 | Consecuencia |
|---|---|---|---|
Evaluación de and / or | ambos lados siempre | cortocircuito | una llamada a un indicador tras una condición falsa se omite, corrompiendo su historial |
margin_long / margin_short por defecto | 0 — sin control de margen | 100 — control estricto | llamadas de margen donde no había |
strategy.exit() con niveles relativos y absolutos | ganaba el absoluto | el que se active antes | profit = 0, limit = price ahora sale en la entrada |
| Órdenes más allá de 9.000 | error de ejecución, se detenía | se recortan las más antiguas en silencio | las recortadas devuelven na en strategy.closedtrades.* |
timeframe.period en gráfico diario | "D" | "1D" | timeframe.period == "D" ahora siempre es falso |
5 / 2 con dos const int | 2 | 2.5 | umbrales y periodos se desplazan |
| Un bool referenciado antes de existir | na | false | la lógica de la primera barra toma la otra rama |
for i = 0 to expr | expr una sola vez | reevaluado en cada iteración | un bucle con límite mutable puede no terminar |
array.get(-1) | error de ejecución | devuelve el último elemento | un desajuste de índice que antes gritaba ahora devuelve un valor erróneo verosímil |
La evaluación perezosa es la peor, porque corrompe el estado interno de un indicador y el daño es invisible en el código. En v5 un indicador dentro de una condición se llamaba en cada barra; en v6 la llamada se omite en las barras donde la primera condición es falsa [6]:
// v6: ta.rsi() se omite cuando close <= open
if close > open and ta.rsi(close, 14) > 50
signal := true
// la solución: llamarlo en ámbito global, donde se ejecuta en cada barra
rsiVal = ta.rsi(close, 14)
if close > open and rsiVal > 50
signal := true
Revisa cada script convertido que llame a una función ta.* dentro de un
if, un switch o el lado derecho de un and. Nada te avisa, y el backtest
sigue produciendo una curva.
El margen por defecto afecta a las estrategias apalancadas. Una estrategia
v5 sobreapalancada en silencio ahora se cierra por llamadas de margen [6].
Poner margin_long = 0, margin_short = 0 recupera el comportamiento antiguo,
pero es una decisión sobre realismo, no un arreglo: una estrategia que solo
funcionaba sin control de margen nunca iba a sobrevivir en real.
Los cambios que detecta el compilador
Cuestan tiempo y no dinero, y todos tienen un arreglo mecánico [6]:
whense eliminó destrategy.entry()y de las demás llamadas de órdenes. Era la forma estándar de v5 de colocar una orden condicional, así que gran parte de las estrategias v5 publicadas necesitan la reescritura conif cond.- Los números ya no se convierten a bool:
if algúnNúmeropasa a serif algúnNúmero != 0, y un bool ya no puede serna. - Una variable mutada es
series, y funciones comota.ema()solo aceptansimpleen su longitud. Nunca fue correcto — una longitud que cambia barra a barra no tiene un historial consistente — así que v6 rechaza algo que estaba mal en silencio. - Eliminaciones menores: sin historial
[]en literales ni constantes,transpsustituido porcolor.new(), sin parámetros repetidos,linewidthde al menos 1. Las constantes de color también cambiaron de valor (color.redahora es#F23645), lo que sorprende a quien compara capturas.
Usa el conversor, y revisa tú la lista silenciosa
El propio conversor del Pine Editor gestiona la mayoría de los cambios
mecánicos [6], así que úsalo antes de migrar nada a mano. Sus límites
documentados [6]: un script que no compila limpiamente como v5 no puede
convertirse automáticamente; en casos raros sigue haciendo falta un arreglo
manual; y las llamadas request.*() ahora son dinámicas por defecto, así que
las peticiones anidadas pueden comportarse distinto y recuperar el
comportamiento de v5 puede exigir dynamic_requests = false.
El conversor reescribe sintaxis. No sabe que tu ta.rsi() dentro de un and
ya no se ejecuta en cada barra, ni que tu estrategia ahora aplica margen:
después de convertir, la tabla anterior sigue siendo tu trabajo.
Una estrategia construida en el builder no tiene nada que migrar: se guarda como documento de estrategia, y volver a exportar escribe el archivo de nuevo en Pine Script v6. El código generado no usa indicadores integrados de la plataforma: cada indicador está escrito en el archivo que descargas, así que puedes leerlo.
La evidencia que debes tener antes de arriesgar dinero
La sección anterior trata de si el archivo es correcto. Esta trata de si tienes motivos para ejecutarlo. Pregunta distinta, pruebas distintas, y ninguna herramienta puede hacerlas por ti.
Cinco cosas que o tienes o no tienes
| Evidencia | Por qué es la que importa |
|---|---|
| un resultado en un rango de fechas que no ajustaste | la única prueba de si encontraste una ventaja o ajustaste una muestra |
| un resultado en un segundo instrumento | una estrategia que funciona en un símbolo puede ser una descripción de ese símbolo |
| más de cien operaciones | por debajo, las estadísticas describen un puñado de sucesos |
| el resultado con tamaño de posición fijo | el porcentaje de capital compone y favorece a una ventaja débil [1] |
| el número de variaciones que probaste | la mejor de diez es una estimación sesgada, y el recuento va con el resultado |
La última fila es la que nadie anota y la que más cambia la interpretación. Si probaste diez conjuntos de parámetros y te quedaste con el mejor, ese mejor resultado está sesgado al alza por la propia búsqueda — el razonamiento, con la literatura, está en probar variaciones con honestidad.
La prueba de sensibilidad a costes
Una medición, que casi nadie hace, y que te dice más que otro mes de backtesting: duplica tu comisión y tu slippage, y vuelve a ejecutar.
| Qué ocurre | Qué significa |
|---|---|
| la ventaja sobrevive | los costes no están sosteniendo el resultado |
| la ventaja se reduce a la mitad | estás cerca del margen; pequeñas diferencias de ejecución decidirán el resultado |
| la ventaja desaparece | la estrategia era un error de redondeo sobre los costes de transacción |
El tercer caso es común y conviene descubrirlo antes de operar en real, no después. La evidencia académica revisada sobre reglas técnicas se debilita mucho una vez incluidos los costes de transacción [5], así que una estrategia sensible a costes es el caso esperado, no el sorprendente.
Qué anotar
No la curva de capital. Esto:
Instrumento, temporalidad, rango de fechas, plan de cuenta, tamaño de posición, los valores de entrada usados, el número de operaciones, el drawdown máximo, y cuántas variaciones se probaron antes de esta.
Diez líneas. Hacen que el resultado sea reproducible por ti en seis meses y comprobable por cualquier otro — y su ausencia es la razón por la que casi ningún backtest publicado puede verificarse. Si citas una cifra sin el plan y el recuento de variaciones, has publicado algo que nadie puede comprobar, tú incluido.
El último paso honesto
Papel primero, y durante suficiente tiempo para ver a la estrategia equivocarse. Una estrategia a la que solo has visto ganar no te ha mostrado lo que decide si seguirás ejecutándola: qué aspecto tiene durante el drawdown. La cifra de drawdown máximo del tester es un número; vivirlo es otra experiencia, y es la razón por la que las estrategias se abandonan en el peor momento posible.

