En qué se convierte cada campo
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 formulario | Lo que defines | En qué se convierte en el archivo Pine |
|---|---|---|
| 1. Información y plataforma | el nombre, y TradingView como plataforma | un script strategy() de Pine Script v6 con ese nombre |
| 2. Marcos temporales | el marco temporal de operación y hasta dos superiores | los marcos temporales en los que se lee cada indicador |
| 3. Reglas de entrada | indicadores de 47 tipos integrados, sus ajustes y las condiciones | un input por cada ajuste numérico, cada indicador escrito como su propia función y las condiciones de entrada creadas con tus reglas |
| 4. Filtros | hasta 8 filtros, como una ventana de sesión o de horario | condiciones que deben cumplirse antes de una entrada |
| 5. Salidas | stop, objetivo, stop dinámico, breakeven, cierres parciales, reglas de salida, salidas por tiempo | las órdenes de salida, entre ellas strategy.exit() |
| 6. Riesgo y gestión del dinero | el tamaño de cada operación (seis tipos de tamaño) y los límites de la cuenta | el tamaño de cada orden, calculado en el archivo con tu regla de tamaño |
| 7. Revisión y guardado | una última comprobación de toda la estrategia | la 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.
// 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)
// 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:
//@version=6y una cabecera con el nombre de la estrategia y la versión del generadorstrategy(...)— la declaración, donde se deciden tus resultados- las declaraciones
input.*— cada ajuste numérico que mostrará el diálogo de ajustes - la sección de indicadores — una función por indicador, llamada en cada barra
- las reglas — las condiciones de entrada y los filtros
- 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 adelantado | Por qué tiene que ser antes |
|---|---|
| la métrica con la que juzgarás | elegir la métrica tras ver los resultados es elegir la que te favorece |
| el rango de fechas que probarás | acortar un rango porque «no es representativo» es ajustar |
| el número de variaciones que probarás | si no, paras cuando estás contento, y ese momento nunca es neutral |
| una ventana reservada que no mirarás | solo 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.

