Construir una estrategia Pine sin programar

Diseña entradas, filtros y riesgo en Strategy Builder (opcionalmente con Tactix Studio), exporta strategy() v6 y adjúntalo en Pine Editor. Límites honestos de la plataforma y evidencia académica sobre reglas.

📖 10 min de lectura

📝 1,956 palabras

🏷️ Pine Script y TradingView

Compartir este artículo:

En qué se convierte cada campo

Cuatro pasos del formulario: señal de entrada, filtro de mercado, riesgo y el archivo generado.01020304Señal de entradaFiltro de mercadoRiesgoArchivo generado.mq5 o .pineuna plataforma por formulario
En qué se convierte el formulario. Cada plataforma tiene su propio formulario, así que una estrategia produce el archivo de esa plataforma, no los dos.

Un constructor sin código es un formulario que escribe Pine. Saber en qué se convierte cada paso es lo que te permite leer tu propia exportación y confirmar que coincide con lo que pediste.

El Strategy Builder de AlfaTactix tiene 7 pasos, y eliges TradingView como plataforma en el paso 1.

Paso del formularioLo que definesEn qué se convierte en el archivo Pine
1. Información y plataformael nombre, y TradingView como plataformaun script strategy() de Pine Script v6 con ese nombre
2. Marcos temporalesel marco temporal de operación y hasta dos superioreslos marcos temporales en los que se lee cada indicador
3. Reglas de entradaindicadores de 47 tipos integrados, sus ajustes y las condicionesun input por cada ajuste numérico, cada indicador escrito como su propia función y las condiciones de entrada creadas con tus reglas
4. Filtroshasta 8 filtros, como una ventana de sesión o de horariocondiciones que deben cumplirse antes de una entrada
5. Salidasstop, objetivo, stop dinámico, breakeven, cierres parciales, reglas de salida, salidas por tiempolas órdenes de salida, entre ellas strategy.exit()
6. Riesgo y gestión del dineroel tamaño de cada operación (seis tipos de tamaño) y los límites de la cuentael tamaño de cada orden, calculado en el archivo con tu regla de tamaño
7. Revisión y guardadouna última comprobación de toda la estrategiala estrategia que luego descargas como archivo .pine

Lo que obtienes es un archivo strategy() de Pine Script v6 para pegar en el Pine Editor. Cada indicador está escrito en él como código que puedes leer, y su cabecera indica la versión del generador. Cada script Pine que comprobamos compiló en el Pine Editor con 0 problemas. Los costes no son un paso del formulario: en TradingView defines la comisión y el deslizamiento en la pestaña Propiedades de la estrategia. Para pasar una estrategia a MetaTrader 5, cambia la plataforma en el paso 1; el formulario primero lista los ajustes que cambian.

Cuando quieras definir estos pasos para tus propias reglas, abre el generador de Pine Script.

Por qué un indicador debe ejecutarse en cada barra

La exportación no usa funciones ta.* integradas: cada indicador está escrito en el archivo como su propia función y se llama en cada barra. Conviene mantenerlo si editas el archivo a mano, porque es invisible en el comportamiento hasta que está mal.

pine
// correcto — se ejecuta en cada barra, así que su historial es continuo
rsiVal = ta.rsi(close, rsiLen)
if rsiVal < 30 and close > maVal
    strategy.entry("Long", strategy.long)
pine
// incorrecto — v6 hace cortocircuito con and, así que ta.rsi() se omite en las
// barras donde la primera condición es falsa, y su historial se rompe
if close > maVal and ta.rsi(close, rsiLen) < 30
    strategy.entry("Long", strategy.long)

En v6 los operadores and y or evalúan de forma perezosa [6], así que una llamada a la derecha de una condición falsa no se ejecuta en esa barra. Los indicadores mantienen estado interno entre barras, así que uno que no se ejecutó en cada barra ya no tiene el historial que necesita — y nada lo informa.

Así que: si añades a mano una llamada ta., no la pongas a la derecha de un and ni de un or. Busca and y or en el archivo tras cada edición; son diez segundos.

La anatomía de una exportación generada

Los archivos generados siguen un orden fijo, lo que los hace rápidos de recorrer:

  1. //@version=6 y una cabecera con el nombre de la estrategia y la versión del generador
  2. strategy(...) — la declaración, donde se deciden tus resultados
  3. las declaraciones input.* — cada ajuste numérico que mostrará el diálogo de ajustes
  4. la sección de indicadores — una función por indicador, llamada en cada barra
  5. las reglas — las condiciones de entrada y los filtros
  6. las órdenes y salidas — strategy.entry(), strategy.exit() y los límites de riesgo

El bloque 2 es el primero que hay que leer y el que la gente se salta. Los bloques 3 y 5 juntos son donde verificas que cada control alimenta de verdad una comparación: si editas el archivo a mano y un umbral aparece como número suelto en el bloque 5 mientras el bloque 3 declara un input para él, ese control no hace nada.

La comprobación que cierra el círculo

Lleva un input a un extremo en el diálogo de ajustes y confirma que el número de operaciones cambia. Un input declarado en el bloque 3 pero nunca referenciado en el bloque 5 genera un control que se mueve y no tiene efecto, y no hay forma de verlo desde la interfaz. El detalle de qué más verificar está en el editor frente al constructor.


Qué le hace a tus resultados probar diez variaciones

Probar diez variaciones en una tarde es aquello en lo que un constructor sin código es realmente bueno. Y también es, hecho sin cuidado, la forma más rápida de producir una cifra que no significa nada — y eso tiene un nombre en la literatura.

La mejor de diez no es la mejor

Si pruebas diez variaciones y te quedas con la de mayor rentabilidad, esa rentabilidad es una estimación sesgada de lo que hará a continuación. No encontraste la mejor estrategia; encontraste la variación que mejor se ajustó al ruido de esta muestra concreta. El paso de selección es lo que introduce el sesgo, y ocurre tanto si pretendías buscar como si no.

Esto es data snooping, y se ha estudiado específicamente sobre reglas técnicas. Sullivan, Timmermann y White (1999) reexaminaron el rendimiento de las reglas de trading técnico teniendo en cuenta que se habían probado muchas reglas sobre los mismos datos [7]. El Reality Check de White da el método para preguntar si la mejor de muchas estrategias realmente supera a un índice de referencia, en lugar de solo parecerlo [8].

Harvey, Liu y Zhu (2016) concretan la consecuencia en un contexto relacionado: una vez que tienes en cuenta cuántos candidatos se han probado, el umbral de significación que debe superar cualquier superviviente sube, no baja [9].

La traducción práctica es incómoda y breve: diez pruebas hacen que tu mejor resultado sea menos fiable que si hubieras hecho una sola.

Por qué parece lo contrario

Porque probar más parece trabajar más, y porque la herramienta informa de cada prueba por separado. El Strategy Tester te muestra el resultado de la variación siete. No tiene idea de que existieron las variaciones uno a seis, así que no puede descontar la cifra que te está mostrando — y nada en la interfaz te dirá nunca que has estado buscando.

El sobreajuste tampoco deja rastro en el código. Está limpio, los costes son honestos, el backtest es correcto. Solo el historial de tu propia búsqueda distingue una ventaja descubierta de una coincidencia seleccionada, y ese historial está en tu cabeza.

El recuento forma parte del resultado

Así que la cifra que hay que anotar no es solo la rentabilidad. Es:

«La mejor de N variaciones probadas, en este instrumento, en este rango de fechas.»

Publica la rentabilidad sin la N y has publicado algo no verificable. Publícala con la N y un lector puede juzgarla. Es el mismo punto de reproducibilidad que indicar tu plan de TradingView al citar un backtest — ver el Strategy Tester frente a la operativa en vivo para saber por qué el plan también cambia el resultado.


Un protocolo que sobrevive a diez pruebas

La respuesta no es dejar de buscar. Buscar es como se encuentra cualquier cosa. La respuesta es fijar las reglas de la búsqueda antes de empezar, porque cada decisión que tomas después de ver un resultado es otro paso de selección.

Decide estas cuatro cosas antes de la primera prueba

Decide por adelantadoPor qué tiene que ser antes
la métrica con la que juzgaráselegir la métrica tras ver los resultados es elegir la que te favorece
el rango de fechas que probarásacortar un rango porque «no es representativo» es ajustar
el número de variaciones que probarássi no, paras cuando estás contento, y ese momento nunca es neutral
una ventana reservada que no mirarássolo es fuera de muestra si no la has visto

La cuarta es la que la gente se salta, y es la única que produce evidencia. Reserva un tramo de historial — el más reciente es la elección honesta — y no ejecutes ni una prueba en él hasta que la búsqueda termine. Tienes exactamente una mirada. Si el ganador se desmorona ahí, la búsqueda encontró ruido, y eso conviene saberlo en una tarde y no operando en vivo.

Prefiere una meseta a un pico

Esta no cuesta nada y es lo más informativo que puedes hacer con diez resultados. Ordena las variaciones por parámetro y mira la forma:

  • un pico — un buen resultado con resultados malos a ambos lados — es casi con seguridad un ajuste. Nada sobre los mercados dice que un periodo de 14 funcione y 13 y 15 no.
  • una meseta — una banda de valores vecinos que funcionan aceptablemente — es una propiedad del instrumento. Elige el centro de la meseta, no su punto más alto.

La barra más alta de un conjunto de diez es la que más probablemente lo sea por suerte. Elegir su vecina te cuesta un poco de rendimiento declarado y te compra la única evidencia de robustez disponible sin un segundo conjunto de datos.

Cambia una cosa a la vez

Diez variaciones que difieren cada una en tres aspectos no te enseñan nada sobre qué cambio importó. Diez que difieren en una sola dimensión — un solo umbral, un solo periodo — producen la superficie de parámetros descrita arriba. Es el mismo número de pruebas y una cantidad de información completamente distinta.

Comprueba el número de operaciones antes de clasificar

Una variación en temporalidad corta sobre un rango largo puede alcanzar el tope de órdenes de TradingView e informar de una curva plana que parece una estrategia mala en lugar de una prueba truncada, y cada variación solo ve el historial que permite tu plan. Ambos límites se explican en el Strategy Tester frente a la operativa en vivo.

Y luego anota el recuento

La mejor de diez, en este instrumento, en este rango, juzgada con esta métrica, con un resultado reservado de X. Esa frase vale más que la rentabilidad por sí sola, y es lo que querrás tener cuando vuelvas a mirar esta estrategia en tres meses y no recuerdes cuánto tuviste que buscar para encontrarla.

Preguntas frecuentes

Sí. El generador de Pine Script de AlfaTactix exporta un archivo Pine v6 con strategy(). Strategies [1]. Concepto: qué es una estrategia. Adjunto: Pine Editor.

Es estrategia. Tipos de script [2]. No lo conviertas en indicator() si quieres el Probador.

Misma idea visual, otro runtime. MT5: EA sin código. Pine: First steps [3].

No. Park e Irwin (2007) (DOI [4]). Brock et al. (1992) (DOI [5]).

Los filtros de noticias y fundamentales aún no están disponibles. El builder tiene hasta 3 marcos temporales, 47 tipos de indicadores (con SuperTrend, Ichimoku y ADX) y hasta 8 filtros de 7 tipos. Features · demo.

Code Generator → TradingView. Hub: Academia Pine.

Un eje por variación: un periodo, un nivel, el filtro de sesión activado o no, el tipo de stop, o «Todas estas» frente a «Cualquiera de estas». Diez variaciones que cambian una sola cosa dibujan la superficie de parámetros; diez que cambian tres cosas cada una no te dicen qué cambio importó.

Fija primero los costes (comisión), decide la métrica, el rango de fechas, el número de variaciones y una ventana reservada antes de la primera prueba, y prefiere una meseta de valores vecinos a un pico aislado. La mejor de diez es una estimación sesgada: el problema de data snooping que estudian Sullivan, Timmermann y White [7].

Referencias

  1. TradingView. Strategies. https://www.tradingview.com/pine-script-docs/concepts/strategies
  2. TradingView. Script structure. https://www.tradingview.com/pine-script-docs/language/script-structure
  3. TradingView. First steps. https://www.tradingview.com/pine-script-docs/primer/first-steps
  4. Park, C.-H., & Irwin, S. H. (2007), Journal of Economic Surveys. What do we know about the profitability of technical analysis?. https://doi.org/10.1111/j.1467-6419.2007.00519.x
  5. Brock, W., Lakonishok, J., & LeBaron, B. (1992), Journal of Finance. Simple technical trading rules and the stochastic properties of stock returns. https://doi.org/10.1111/j.1540-6261.1992.tb04681.x
  6. TradingView. Migration guide — to Pine Script® version 6. https://www.tradingview.com/pine-script-docs/migration-guides/to-pine-version-6
  7. Sullivan, R., Timmermann, A., & White, H. (1999), The Journal of Finance 54(5). Data-Snooping, Technical Trading Rule Performance, and the Bootstrap. https://doi.org/10.1111/0022-1082.00163
  8. White, H. (2000), Econometrica 68(5). A Reality Check for Data Snooping. https://doi.org/10.1111/1468-0262.00152
  9. Harvey, C. R., Liu, Y., & Zhu, H. (2016), Review of Financial Studies 29(1). … and the Cross-Section of Expected Returns. https://doi.org/10.1093/rfs/hhv059