← All Collections
🎯 9 parts

Backtesting Without Fooling Yourself

A step-by-step path from what your backtest really optimizes to proving an edge survives overfitting, multiple testing, and live execution. Read top to bottom — each part builds on the last.

  1. 01
    Diseño de la función objetivo: la métrica que optimizas elige en secreto tu estrategia
    Jun 28, 2026 #algotrading

    Diseño de la función objetivo: la métrica que optimizas elige en secreto tu estrategia

    Para buscar la 'mejor' estrategia primero hay que definir 'mejor' — y ese escalar elige el ganador en silencio. Con datos sintéticos y un edge conocido (600 semillas, T=2000, 80 umbrales), un Sharpe por operación ingenuo corona una lotería: elige un ganador con menos del 5% de exposición en el 56% de las semillas y degenera en el 57% — en la semilla más extrema, 8 operaciones producen un Sharpe in-sample de 21.09 que colapsa a 0.13 fuera de muestra. La reparación honesta es casi aburrida: medir en la línea temporal completa, que nunca degenera (fuera de muestra 1.71). Un shrinkage por número de operaciones (conf_k) y un piso de exposición pueden reparar una métrica por operación, pero incluso totalmente corregidos solo igualan al Sharpe de línea temporal completa (1.70 frente a 1.71) — nunca lo superan. La ley de Goodhart, en un backtest, con verdad de base controlada.

  2. 02
    Demostrando la ausencia de look-ahead en backtests multi-timeframe: perturbar el futuro para probar que el pasado no puede verlo
    Jul 8, 2026 #algotrading

    Demostrando la ausencia de look-ahead en backtests multi-timeframe: perturbar el futuro para probar que el pasado no puede verlo

    Los backtests multi-timeframe filtran el futuro a través de una vela de temporalidad superior en formación, cuyo cierre final aún no existe. No se puede llegar a la confianza mediante revisión de código — hay que probarlo. Reproducimos exactamente la regla de vela cerrada del bot en vivo, y luego demostramos que no hay filtración con una sonda de futuro desplazado: perturbamos cada vela futura y verificamos que cada señal y operación pasada permanece idéntica bit a bit. 25/25 comprobaciones de paridad superadas, y la sonda tiene mordiente.

  3. 03
    Walk-Forward Optimization: The Only Honest Strategy Test
    Mar 15, 2026 #algotrading

    Walk-Forward Optimization: The Only Honest Strategy Test

    Why a single train/test split does not protect against overfitting, how walk-forward optimization systematically verifies parameter robustness, and why a strategy with +3342% PnL@ML on 21 parameters is a ticking time bomb without WFO.

  4. 04
    Análisis de meseta: cómo distinguir un óptimo robusto del overfitting
    Mar 12, 2026 #algotrading

    Análisis de meseta: cómo distinguir un óptimo robusto del overfitting

    Por qué encontrar los mejores parámetros de una estrategia es solo la mitad del trabajo. Cómo distinguir visual y cuantitativamente una meseta estable de un pico frágil, y por qué los gráficos de contorno de Optuna son un paso obligatorio antes de lanzar una estrategia optimizada a producción.

  5. 05
    Monte Carlo Bootstrap: cómo obtener intervalos de confianza para un backtest en 10 líneas de código
    Mar 6, 2026 #algotrading

    Monte Carlo Bootstrap: cómo obtener intervalos de confianza para un backtest en 10 líneas de código

    Por qué una estimación puntual de un backtest es una ilusión peligrosa. Cómo el bootstrap Monte Carlo, en 2 segundos de cómputo, te da un intervalo de confianza del 95% para el PnL y el MaxDD, y por qué es un paso obligatorio antes de lanzar una estrategia a producción.

  6. 06
    La Probability of Backtest Overfitting: ¿superó su búsqueda a una moneda al aire?
    Jul 1, 2026 #algotrading

    La Probability of Backtest Overfitting: ¿superó su búsqueda a una moneda al aire?

    El Deflated Sharpe Ratio evalúa la estrategia ganadora; PBO evalúa la búsqueda que la eligió. Combinatorially Symmetric Cross-Validation ejecuta C(16,8) = 12.870 divisiones train/test sobre una matriz de rendimiento de 1000x200 y pregunta: ¿el ganador in-sample cae en la mitad inferior fuera de muestra? La trampa que casi todos pasan por alto: el valor nulo de PBO es 0.5, no 1. En 200 estrategias sin edge, el mejor Sharpe anualizado in-sample de 1.98 colapsa a 0.06 fuera de muestra y PBO = 0.476: una moneda al aire, sobreajuste total. Plante un edge real (Sharpe anualizado 2.38) y PBO cae a 0.001, con el 3.73 in-sample sobreviviendo a un 2.34 fuera de muestra. Una grilla de medias móviles sobre un paseo aleatorio puro tampoco tiene habilidad fuera de muestra —PBO 0.463 promediado en 60 matrices, estadísticamente indistinguible del nulo— y en una matriz representativa el espejismo es evidente: un mejor Sharpe in-sample de 2.33 colapsa a una mediana fuera de muestra de -0.22, PBO 0.573, un 63% de probabilidad de pérdida.

  7. 07
    El Deflated Sharpe Ratio: ¿Cuántos de los 'ganadores' de tu backtest sobreviven al multiple testing?
    Jun 29, 2026 #algotrading

    El Deflated Sharpe Ratio: ¿Cuántos de los 'ganadores' de tu backtest sobreviven al multiple testing?

    Una búsqueda de parámetros es una máquina para fabricar suerte. Sobre ruido puro — 1.000 estrategias con cero edge real — el mejor Sharpe anualizado promedia 1,63 y el test de significancia ingenuo marca un descubrimiento el 100% de las veces. Construimos una verdad de referencia controlada y mostramos que el Deflated Sharpe Ratio, el recorte de Harvey-Liu y el Reality Check de White restauran la honestidad: los falsos descubrimientos caen de 1,000 a 0,001-0,057, los edges genuinos por encima del techo de ruido se conservan con power ~1 — y una trampa real (grids correlacionados) donde el DSR crudo sobre-deflaciona y el veredicto debe leerse a través de toda una banda de estimaciones de trials efectivos, no de una sola.

  8. 08
    Paridad backtest-live: por qué tu bot opera diferente al backtest
    Mar 7, 2026 #algotrading

    Paridad backtest-live: por qué tu bot opera diferente al backtest

    Taxonomía completa de las divergencias entre backtesting y trading en vivo: desde el slippage y las ejecuciones parciales hasta la desincronización del código. Patrones arquitectónicos para lograr paridad, ejemplos en Python de un módulo core compartido y una lista de verificación para monitoreo en producción.

  9. 09
    El negativo honesto: decenas de miles de backtests, cinco majors, ninguna ventaja robusta
    Jul 9, 2026 #algotrading

    El negativo honesto: decenas de miles de backtests, cinco majors, ninguna ventaja robusta

    El cierre del arco de búsqueda y sobreajuste, y termina en un resultado negativo — el correcto. Una búsqueda de doble timeframe sobre un solo símbolo (ETHUSDT) encontró una configuración con +16.35% fuera de muestra y +2.62% en un holdout intacto; el ratio de Sharpe deflactado, contando ~37,000 pruebas, lo deflactó a 0.00. Una pasada entre instrumentos sobre cinco majors (ETH/BTC/SOL/BNB/XRP, ~1.18M de barras de 1m cada uno), seleccionando por la mediana fuera de muestra, lo remata definitivamente: doble DSR 0.24 / PBO 0.264, triple DSR 0.14 / PBO 0.327 — ambos fallan los filtros. El campeón es rentable en 1 de 5 símbolos y negativo en el resto. Para esto existe el aparato anti-sobreajuste: para impedir que despliegues el mejor del ruido como alfa.