Saltar al contenido
ALX Quant
← M0.4 · TradingView desde cero

Lección 418 min40 XPGratis

Replay y el simulador de estrategias: ensayar sin dinero y sin engañarte

Al terminar sabrás

  • Usar la repetición de barras (replay) para practicar decisiones sin ver el futuro
  • Leer el informe del simulador de estrategias de Pine y saber qué le falta
  • Decidir qué se hace en TradingView y qué se hace en Python

Antes de esta conviene haber hecho Alertas: que TradingView te avise, y luego que avise a tu bot.


Mirar un gráfico histórico completo y decir "aquí habría comprado" no vale nada: ya sabes qué pasó después. La repetición de barras de TradingView te esconde el futuro y te obliga a decidir con lo que había. Es la herramienta más honesta de la plataforma para un principiante, y el simulador de estrategias de Pine es la más peligrosa si no sabes qué no cuenta.

El problema

Dos herramientas parecidas con propósitos distintos. El replay sirve para entrenar tu criterio con reglas fijas y descubrir lo difícil que es seguirlas. El simulador de strategy() sirve para prototipar una regla en minutos, pero su informe omite costes realistas, no controla el orden intrabarra y no permite la validación del Nivel 3. Confundirlos lleva a dos errores: creer que has "practicado" mirando gráficos completos, y creer que el informe verde de Pine es un backtest.

Tres capas

Intuición

Replay es ver una película sin haber leído el final. Pones el gráfico en una fecha pasada, TradingView borra todo lo posterior, y vas avanzando barra a barra. En cada barra decides con lo que hay. Al terminar comparas tus decisiones con lo que pasó. Es un simulador de vuelo: no gana dinero, pero enseña a no estrellarse.

El simulador de estrategias es distinto: escribes reglas en Pine (strategy()), TradingView las aplica a todo el histórico y te da un informe: beneficio, número de operaciones, porcentaje de aciertos, drawdown. Está bien para responder en cinco minutos a "¿esta idea es una tontería evidente?". No está bien para decidir si operarla con dinero, porque el informe supone cosas sobre ejecución y costes que rara vez son ciertas, y porque no puedes hacerle las 27 preguntas del Nivel 3.

Ejemplo numérico

Una sesión de replay bien hecha, con reglas escritas antes:

Regla escrita antes de empezarQué anotas en cada barra
Entrar largo al cierre si el cierre cruza la EMA20 hacia arriba y el ATR14 > 4 puntos¿Se cumplió? ¿Entraste? Si no, ¿por qué?
Stop a 1,5 × ATR bajo la entrada; objetivo a 2 × ATRPrecio de stop y objetivo calculados, no estimados
Salir al cierre de la sesión si sigue abiertaHora de cierre anotada

Resultado típico de un principiante en 20 sesiones de replay: la regla da 12 señales; el alumno entra en 9 (se saltó 3 "porque el gráfico no le gustaba"), mueve el stop en 4 y cierra antes del objetivo en 5. La regla, aplicada a rajatabla, habría ganado 3,2 ATR; el alumno gana 0,4 ATR. La diferencia no es la regla: es la disciplina, y eso es lo que el replay mide.

Y el informe de una strategy() de esa misma regla en Pine, sobre un año de MES a 15 min, sin configurar costes: "Beneficio neto +2.140 $, 187 operaciones, 44 % aciertos". Con la comisión y el slippage medido en M0.3.4 (unos 2,5 $ por operación en total): 187 × 2,5 = 467 $ menos. Y el informe asume que cada entrada se ejecutó al cierre exacto de la barra, que en la vida real no pasa. El +2.140 se convierte en algo entre +1.200 y +1.600 antes de hacerle ninguna pregunta seria.

Formal

Replay. Restringe la información disponible a Ft\mathcal{F}_t en cada barra tt: es el análogo manual de la condición de no look-ahead de M0.1.5. Su valor es doble: (a) elimina el sesgo de retrospectiva al evaluar reglas discrecionales (con el gráfico completo, el ojo encuentra siempre la señal "obvia" que precedió al movimiento); (b) mide la adherencia a un conjunto de reglas, que es la variable que separa a quien tiene un sistema de quien tiene opiniones. Limitaciones: la velocidad de reproducción no reproduce la presión temporal real, no hay libro ni fills, y el número de sesiones que puedes hacer a mano es pequeño (decenas), insuficiente para inferencia estadística.

strategy() en Pine. Motor de backtesting de barras integrado. Modelo de ejecución: las órdenes generadas al cierre de la barra tt se ejecutan en la apertura de t+1t+1 por defecto (process_orders_on_close = false), lo que evita el look-ahead más burdo; stops y límites se simulan intrabarra con un supuesto sobre el recorrido del precio dentro de la barra (por defecto, TradingView asume un camino O→H→L→C o O→L→H→C según la barra; con calc_on_every_tick y datos intrabarra se puede refinar). Costes: comisión y slippage configurables (commission_type, slippage en ticks) pero cero por defecto. Limitaciones estructurales: (1) un solo instrumento por script; (2) sin acceso programático completo a los trades para análisis externo (existe exportación CSV manual); (3) sin walk-forward, permutación, PBO ni Monte Carlo nativos; (4) el histórico intradía disponible depende del plan (limitado en gratuito); (5) el optimizador de parámetros ("Deep Backtesting", de pago) facilita el sobreajuste sin ninguna corrección por tests múltiples.

División de herramientas (regla de la casa): TradingView para mirar, para alertas, para prototipar en minutos y para ejecutar señales vía webhook. Python para todo lo que se llame backtest, validación o gestión de cartera. La misma regla se escribe dos veces (Pine para la alerta, Python para el research), y las dos versiones deben producir las mismas señales sobre las mismas barras: esa comprobación cruzada es un test más de la batería del Nivel 3.

Ejemplo trabajado con código

La regla del ejemplo como strategy() en Pine v6, con costes configurados y ejecución al cierre desactivada (órdenes a la apertura siguiente). Compila en el editor Pine.

//@version=6
strategy("ALX · Cruce EMA20 + filtro ATR (prototipo)", overlay = true,
     initial_capital = 10000, default_qty_type = strategy.fixed, default_qty_value = 1,
     commission_type = strategy.commission.cash_per_contract, commission_value = 0.62,   // por lado, MES ilustrativo
     slippage = 1,                                                                       // ticks, medido en M0.3.4
     process_orders_on_close = false)                                                    // señal al cierre, fill a la apertura siguiente
 
emaLen = input.int(20, "EMA"), atrLen = input.int(14, "ATR"), atrMin = input.float(4.0, "ATR mínimo (pts)")
ema = ta.ema(close, emaLen)
atr = ta.atr(atrLen)
plot(ema, color = color.new(#4C82FB, 0))
 
entrada = ta.crossover(close, ema) and atr > atrMin and barstate.isconfirmed
if entrada
    strategy.entry("L", strategy.long)
    strategy.exit("salida", "L", stop = close - 1.5 * atr, limit = close + 2.0 * atr)
 
// cierre forzado al final de la sesión regular (RTH): evita mantener posiciones de noche
if not session.ismarket and strategy.position_size != 0
    strategy.close_all("fin de sesión")

Al ejecutarlo, el informe del simulador muestra las métricas habituales; el número exacto depende del símbolo, timeframe e histórico disponible, así que no lo pegamos aquí. Lo que sí es fijo: el prototipo tarda cinco minutos, y la pregunta de si vale algo no la responde este informe, la responde el Nivel 3.

Figura

Tabla visual de dos columnas con iconos. Columna TradingView (azul): mirar gráficos, alertas y webhooks, prototipo en 5 minutos con strategy(), replay para entrenar disciplina. Columna Python (teal): backtest con costes medidos, walk-forward y permutación, Monte Carlo, cartera multi-activo, informe reproducible. Una flecha doble entre columnas etiquetada 'misma regla, dos implementaciones, mismas señales' y una nota en coral bajo TradingView: 'el informe verde no es un backtest'.
Las dos herramientas son buenas en lo suyo. El problema empieza cuando la de la izquierda intenta hacer el trabajo de la de la derecha.

(Figura estática en SVG.)

El error típico

Optimizar parámetros en el simulador de Pine hasta que el informe sale bonito, y llamar a eso "tener una estrategia". Con el optimizador puedes probar 500 combinaciones de EMA y ATR en una tarde; la mejor tendrá un informe excelente por la lección M0.1.4 (el mejor de 500 lo tiene siempre), y el simulador no te dirá nada de eso. Además, cada vez que miras el informe y cambias algo, has hecho una prueba más que no anotas. El prototipo en Pine es para descartar ideas malas rápido, no para confirmar buenas. Confirmar requiere Python, costes medidos, out-of-sample intocado y las 27 preguntas del Nivel 3.

Quiz

5 preguntas · se aprueba con 60 %

  1. 1.¿Para qué sirve el replay de TradingView?

  2. 2.En `strategy()` con `process_orders_on_close = false`, una señal al cierre de la barra t se ejecuta:

  3. 3.El informe de una strategy() de Pine sin configurar comisión ni slippage:

  4. 4.¿Qué NO puede hacer el simulador de Pine que sí hace Python en el Nivel 3?

  5. 5.Optimizas EMA y ATR con el "Deep Backtesting" y la mejor de 400 combinaciones da +80 % anual. Conclusión:

0 de 5 respondidas

Ejercicio

  1. Escribe en un archivo tres reglas de entrada, stop, objetivo y cierre (como la tabla de la capa azul). Abre el replay de TradingView en MES1! a 15 min desde una fecha de hace tres meses y haz 10 sesiones completas anotando, en cada barra con señal, si entraste y por qué. Calcula al final la adherencia: señales seguidas / señales totales.
  2. Pega la strategy() de la lección, anota el beneficio neto del informe con los costes configurados, luego pon comisión y slippage a cero y anota la diferencia.

Resultado verificable: la adherencia de un principiante suele estar entre el 60 % y el 80 %; si te sale 100 %, o eres una excepción o has relajado la definición de señal (anótalo). La diferencia entre el informe con y sin costes debe ser aproximadamente (número de operaciones) × (2 × 0,62 + 1,25) $ para MES; si no cuadra, revisa que slippage esté en ticks y commission_value por contrato.

Qué te llevas

  1. El replay esconde el futuro y mide tu disciplina. Es entrenamiento, no backtest.
  2. El simulador de Pine prototipa en minutos y cuenta costes solo si se lo dices. Su informe no es una validación.
  3. TradingView para mirar, alertar y prototipar; Python para backtestear, validar y gestionar. La misma regla, dos implementaciones, mismas señales.

Fin del módulo M0.4. Examen: 15 preguntas de un banco de 32. Después: M0.5, Puesta a punto: Python y tu primer script, donde instalas todo lo que hace falta y ejecutas el código que has visto en este nivel en tu propio ordenador.