Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-08-08

Sesgo de anticipación: el error del backtest

El sesgo de anticipación introduce datos futuros en un backtest. Conoce cómo las decisiones en la misma vela, la supervivencia y las cifras revisadas inflan los resultados.

El sesgo de anticipación consiste en usar en un backtest información que nadie podría haber tenido cuando se habría colocado la operación simulada. La curva de capital sube, las estadísticas parecen excelentes y nada de eso se sostiene al ejecutar una orden real. Esta página define el sesgo, explica tres mecanismos que lo generan y mide cada uno con datos reales de mercado.

Qué es el sesgo de anticipación

Un backtest es una afirmación sobre una decisión: en este momento, con esta información, la regla habría hecho esto. La afirmación solo es válida cuando todos los datos que utiliza la regla ya existían, en su forma definitiva, antes de ese momento. El sesgo de anticipación aparece cuando se incumple esa condición, y lo hace de forma silenciosa. Ninguna hoja de cálculo ni ningún script avisa cuando una fila devuelve un valor con una fecha posterior a la decisión a la que alimenta.

En la práctica, la mayoría de los casos corresponden a tres incumplimientos. Una decisión que utiliza una vela de precios dentro de la cual también ejecuta la operación. Un universo compuesto por los nombres que aún cotizan hoy. Un campo de datos que fue revisado después de la fecha que lleva.

Mecanismo uno: decidir en una barra en la que también se opera

Comience con una regla que parece inofensiva. Comprar cuando hay fortaleza, es decir, en las sesiones en las que el fondo cierra por encima de su apertura. Si se codifica sin cuidado, la prueba entra en la apertura de esa sesión y sale en su cierre, mientras que la condición que filtra utiliza el precio de cierre de la misma barra. Nadie conoce el precio de cierre en la apertura del mercado.

El panel siguiente ejecuta ambas versiones sobre SPY, el ETF que replica el S&P 500, durante diez años calendario. La primera columna corresponde a la versión imposible. La segunda retrasa la misma condición una sesión, que es el momento más temprano en que una cuenta con fondos podría actuar con base en ella.

ConsultaDecisión en la misma barra vs. rezago de una sesión: SPY, ganancia promedio por sesión, 2016-2025
añodías de señalpromedio en la misma barra (%)promedio rezagado (%)brecha (pp)
20161400.447-0.0080.455
20171390.2450.0330.212
20181270.5740.0070.567
20191380.4260.0720.354
20201470.742-0.1650.907
20211370.4850.0390.446
20221270.979-0.0281.007
20231470.5330.0540.479
20241350.4220.0060.416
20251310.636-0.030.666
El SQL exacto detrás de cada cifra
WITH bars AS (
    SELECT date,
           toFloat64(open) AS o,
           toFloat64(close) AS c,
           toFloat64(close) > toFloat64(open) AS up_day
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= toDate('2015-12-01')
      AND date <= toDate('2025-12-31')
),
lagged AS (
    SELECT date, o, c, up_day,
           any(up_day) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prior_up
    FROM bars
)
SELECT toYear(date) AS year,
       countIf(up_day) AS signal_days,
       round(100 * avgIf(c / o - 1, up_day), 3) AS same_bar_avg_pct,
       round(100 * avgIf(c / o - 1, prior_up), 3) AS lagged_avg_pct,
       round(100 * (avgIf(c / o - 1, up_day) - avgIf(c / o - 1, prior_up)), 3) AS gap_pp
FROM lagged
WHERE date >= toDate('2016-01-01')
GROUP BY year
ORDER BY year
Pruébalo tú mismo

La diferencia es clara. En 2016, la versión de la misma barra promedió 0.447% por sesión que cumplía la condición, mientras que la versión con rezago promedió -0.008%, una diferencia de 0.455 puntos porcentuales por día. En 2025, los resultados fueron 0.636% y -0.03%. Con aproximadamente 140 sesiones que cumplen la condición al año, una diferencia de medio punto porcentual por sesión se capitaliza hasta formar una curva de capital que ninguna cuenta real ha registrado.

Toda la ventaja proviene de la definición. Seleccionar las sesiones que cerraron por encima de su apertura y después medir el rendimiento entre apertura y cierre de esas mismas sesiones equivale a medir una cantidad que necesariamente es positiva. La regla descubrió su propio filtro.

Este patrón aparece constantemente en variantes con datos diarios: una media móvil que incluye el cierre de hoy y se utiliza para operar hoy; una señal calculada con precios ya ajustados por un split que todavía no había ocurrido; o un stop intradía colocado en un máximo de la sesión que aún no se había registrado. El elemento común es que la marca temporal de la decisión es anterior a uno de sus propios datos de entrada.

Mecanismo dos: un universo compuesto por los supervivientes actuales

El segundo mecanismo nunca modifica la regla. Se encuentra en la lista de nombres que la regla puede observar.

Si se obtiene una lista de tickers de un proveedor de datos actual y se retrocede diez años, la muestra excluye silenciosamente a todas las empresas que quebraron, fueron adquiridas o dejaron de cotizar durante ese periodo. La regla nunca tuvo acceso a las perdedoras. El panel mide el tamaño de esa omisión: todos los nombres cotizados en Estados Unidos que negociaron al menos 200 sesiones por encima de $1 en un año calendario determinado, la proporción de esa cohorte que todavía registraba precios en julio de 2026 y el rendimiento mediano de todo el grupo durante el año calendario, junto con el rendimiento mediano de los supervivientes.

ConsultaSupervivencia en el universo: nombres que cotizan cada año, proporción aún listada en julio de 2026 y retorno mediano
añoactivos operadoscotizan aún (%)rendimiento mediano total (%)rendimiento mediano de sobrevivientes (%)brecha de sobrevivientes (pp)
2015706352.5-5.39-5.290.09
2016700955.47.6510.853.2
2017709257.77.5111.323.81
2018724561.1-13.67-13.030.64
2019760563.414.117.042.94
2020774567.91.062.741.68
2021850669.16.8810.473.59
2022921773.5-20.26-19.950.31
2023901380.84.655.781.13
2024925787.52.242.90.66
El SQL exacto detrás de cada cifra
WITH recent AS (
    SELECT DISTINCT ticker
    FROM global_markets.stocks_daily_aggs
    WHERE date >= toDate('2026-06-15')
      AND date <= toDate('2026-07-28')
),
per_name AS (
    SELECT toYear(date) AS year,
           ticker,
           argMin(toFloat64(close), date) AS first_close,
           argMax(toFloat64(close), date) AS last_close,
           count() AS sessions
    FROM global_markets.stocks_daily_aggs
    WHERE date >= toDate('2015-01-01')
      AND date <= toDate('2024-12-31')
      AND close > 1
    GROUP BY year, ticker
    HAVING sessions >= 200
)
SELECT year,
       uniqExact(ticker) AS names_trading,
       round(100 * uniqExactIf(ticker, ticker IN (SELECT ticker FROM recent)) / uniqExact(ticker), 1) AS still_listed_pct,
       round(100 * quantileDeterministic(0.5)(last_close / first_close - 1, cityHash64(ticker)), 2) AS median_return_all_pct,
       round(100 * quantileDeterministicIf(0.5)(last_close / first_close - 1, cityHash64(ticker), ticker IN (SELECT ticker FROM recent)), 2) AS median_return_survivors_pct,
       round(100 * (quantileDeterministicIf(0.5)(last_close / first_close - 1, cityHash64(ticker), ticker IN (SELECT ticker FROM recent))
                    - quantileDeterministic(0.5)(last_close / first_close - 1, cityHash64(ticker))), 2) AS survivor_gap_pp
FROM per_name
GROUP BY year
ORDER BY year
Pruébalo tú mismo

De los 7063 nombres que superaron el umbral en 2015, 52.5% todavía cotizaban en julio de 2026. En la cohorte de 2024, la cifra fue de 87.5%. La diferencia se debe principalmente al tiempo transcurrido: un nombre de 2024 tuvo dos años para desaparecer, mientras que uno de 2015 tuvo once.

Las columnas de rendimiento muestran el sesgo en sí. En 2017, el nombre mediano obtuvo un rendimiento de 7.51%, mientras que el superviviente mediano obtuvo 11.32%. La brecha fue de 3.81 puntos porcentuales, obtenidos sin esfuerzo. La brecha es positiva en cada uno de los 10 años incluidos en el gráfico. Una estrategia probada sobre supervivientes incorpora ese sesgo antes de tomar una sola decisión. Las reglas que filtran la debilidad incorporan un sesgo aún mayor que la mediana, porque los nombres que desaparecieron se concentran de forma desproporcionada en ese grupo.

La corrección consiste en utilizar un universo point-in-time: la lista de nombres tal como existía en cada fecha de rebalanceo, incluidos los valores que dejaron de cotizar. Una posición delisted se cierra en su último print, en lugar de eliminarse del registro.

Mecanismo tres: datos revisados después de su fecha de referencia

Los precios llevan una sola marca temporal. Los fundamentales no. Una cifra trimestral conserva la fecha de cierre del trimestre, pero una presentación posterior puede modificarla. Una base de datos que solo guarda la versión actual puede asociar sin problemas la cifra modificada con la fecha original. Una regla que filtra ese dato está leyendo una corrección que tardó meses en publicarse.

El mismo patrón aparece en las listas de integrantes de índices, reconstruidas con los componentes actuales; en los historiales de estimaciones de analistas, sobrescritos con el consenso final; y en los ajustes por acciones corporativas, aplicados retroactivamente a toda una serie de precios. En cada caso, el registro almacenado es una instantánea del presente con una fecha del pasado.

Dos prácticas ayudan a contener este problema. Utilice una fuente que conserve las distintas versiones históricas, es decir, el valor tal como se conocía en cada fecha y no como se conoce ahora. Cuando no haya versiones históricas disponibles, aplique un rezago de publicación suficientemente amplio para cubrir el plazo real. Trate la duración de ese rezago como un parámetro que conviene probar, no como un detalle que se deba estimar a ciegas.

Cómo se ve la curva cuando el futuro se filtra

El sesgo de anticipación tiene una señal característica: una rentabilidad muy superior a la que ofreció el mercado subyacente. Un punto de referencia útil es el techo de retrospectiva: el crecimiento que habría producido un pronóstico perfecto con un día de anticipación sobre un solo instrumento.

ConsultaEl límite con conocimiento retrospectivo: comprar y mantener SPY, el mismo año sin sus mayores días alcistas y previsión perfecta de un día
añosesionescomprar y mantener (%)sin días de fuertes alzas (%)múltiplo máximo retrospectivo
20162529.6-1.84.3
201725119.419.42.2
2018251-6.3-18.76.4
201925228.8224.2
202025316.2-44.927.7
20212522721.54.9
2022251-19.5-56.219.8
202325024.321.55.1
202425223.315.24.4
202525016.4-6.66.3
El SQL exacto detrás de cada cifra
WITH bars AS (
    SELECT date,
           toFloat64(close) AS c,
           any(toFloat64(close)) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= toDate('2015-12-01')
      AND date <= toDate('2025-12-31')
),
rets AS (
    SELECT toYear(date) AS year,
           c / prev_c - 1 AS r
    FROM bars
    WHERE date >= toDate('2016-01-01')
      AND prev_c > 0
)
SELECT year,
       count() AS sessions,
       round(100 * (exp(sum(log(1 + r))) - 1), 1) AS buy_and_hold_pct,
       round(100 * (exp(sumIf(log(1 + r), r < 0.02)) - 1), 1) AS without_big_up_days_pct,
       round(exp(sum(log(1 + abs(r)))), 1) AS hindsight_ceiling_multiple
FROM rets
GROUP BY year
ORDER BY year
Pruébalo tú mismo

El techo es enorme. En 2020, anticipar perfectamente un día en SPY habría multiplicado el capital 27.7 veces durante 253 sesiones, frente a 16.2% con una simple estrategia de mantener el fondo. En el año más tranquilo de los diez, 2017, el mismo pronóstico perfecto multiplicó el capital 2.2 veces.

La columna central muestra cuán concentrado está ese techo. Si se excluyen las sesiones con ganancias superiores al 2%, 2020 pasa de 16.2% a -44.9%. Una filtración que capture solo unas pocas de esas sesiones al año puede alterar considerablemente un backtest. Una curva con drawdowns moderados, una alta tasa de aciertos y sus mejores días concentrados en las sesiones más violentas del mercado debe someterse a una auditoría.

La calibración importa más que cualquier umbral individual. Una regla que prometa un rendimiento estable del 40% anual durante una década está capturando una parte importante del techo de retrospectiva. La pregunta correcta es qué dato le indicó lo que estaba a punto de ocurrir.

Cómo probar un backtest para detectar sesgo de anticipación

  • Retrasa todo un bar. Desplaza cada señal un periodo completo hacia adelante y vuelve a ejecutar la prueba. Las ventajas genuinas se deterioran un poco. Las filtraciones de información suelen desaparecer por completo.
  • Perturba el futuro. Toma los datos posteriores a cada marca de tiempo de decisión, reemplázalos por ruido o reordénalos y vuelve a ejecutar la lógica de decisión. Todas las decisiones deberían ser idénticas. Si alguna cambia, utilizó información que no podía conocer.
  • Trata las marcas de tiempo como datos. Para cada entrada, registra junto al momento que describe un valor el momento en que ese valor estuvo disponible. Una unión que nunca compara esas dos columnas no puede hacer cumplir la regla.
  • Reconstruye el universo para cada fecha. Incluye los nombres excluidos de cotización y adquiridos, ciérralos en su último print y aplica la misma regla a ambos universos para medir la contribución del sesgo de supervivencia.
  • Mide frente al límite superior. Compara el rendimiento de la estrategia con una cifra de buy and hold y otra de previsión perfecta para la misma ventana. La distancia respecto del límite aporta un contexto que un ratio de Sharpe por sí solo no ofrece.

El dimensionamiento de posiciones se aplica después de todo esto. Una tasa de aciertos inflada genera un tamaño de apuesta inflado. Ahí es donde dimensionamiento de posiciones según el criterio de Kelly convierte un error contable en una caída de la cartera. La misma disciplina se aplica antes de invertir capital real: paper trading antes de usar dinero real pone a prueba la mecánica de las órdenes, y los sistemas automatizados enfrentan el mismo riesgo a velocidad de máquina, como se explica en sistemas de trading con IA multiagente. Los efectos que sobreviven a pruebas cuidadosas con información disponible en cada momento, como la anomalía de baja volatilidad, resultan interesantes precisamente por esa razón.

Preguntas frecuentes

¿Qué es el sesgo de anticipación en el backtesting?

Es el uso de datos en una operación simulada que no estaban disponibles cuando se habría ejecutado la operación. Algunas formas comunes son decidir usando una vela de precios dentro de la cual también se ejecuta la operación, analizar un universo de empresas que todavía cotizan hoy y leer una cifra financiera que fue revisada después de la fecha a la que correspondía.

¿Cómo se puede detectar el sesgo de anticipación?

Retrasa cada señal un periodo completo y vuelve a ejecutar la prueba. Una filtración de información suele desaparecer, mientras que una ventaja real se deteriora gradualmente. Una prueba más sólida sustituye por ruido todos los datos posteriores a cada marca de tiempo de decisión y confirma que todas las decisiones permanecen sin cambios.

¿El sesgo de supervivencia es lo mismo que el sesgo de anticipación?

Son sesgos distintos, pero suelen aparecer juntos. El sesgo de supervivencia consiste en construir la muestra con los valores que sobrevivieron. Saber cuáles sobrevivieron ya es información del futuro. Por eso, un universo compuesto solo por supervivientes es una filtración de información anticipada ubicada en los datos, no en la regla.

¿Por qué los backtests con sesgo de anticipación parecen tan buenos?

La filtración selecciona los resultados en lugar de predecirlos. En el panel anterior, analizar las sesiones con base en su propio cierre produjo una ganancia media por sesión aproximadamente 0.455 puntos porcentuales superior a la versión con rezago en 2016. Esa ventaja es definicional, no obtenida mediante una estrategia.

¿Qué son los datos point-in-time?

Los datos point-in-time almacenan cada valor tal como se conocía en cada fecha histórica. Incluyen la cifra original y todas las revisiones posteriores, junto con el universo de valores tal como existía ese día. Son la referencia que necesita un backtest para demostrar que sus datos de entrada existían antes de sus decisiones.


Todas las cifras anteriores corresponden a una consulta almacenada y versionada sobre barras diarias reales. Expande el SQL de cualquier panel o ejecuta la prueba con rezago sobre tu propia regla en la terminal de Strasmore.

#backtesting#look-ahead bias#survivorship bias#quant#research process