¿Qué es el sesgo de anticipación (look-ahead bias) en el backtesting?
El sesgo de anticipación (look-ahead bias) es un error de backtesting en el que una estrategia usa información que no habría estado disponible en el momento de la decisión de trading, como ejecutar al mismo cierre que generó la señal. Se evita ejecutando en la apertura de la siguiente barra, usando datos point-in-time y reservando los precios ajustados para calcular rentabilidades.
El sesgo de anticipación (look-ahead bias) es uno de los errores más traicioneros del backtesting porque a menudo es invisible. Tu estrategia usa información que no habría estado disponible en el momento de la operación, inflando los resultados de una forma imposible de replicar en mercados reales. Entenderlo y eliminarlo es esencial para cualquier análisis cuantitativo serio.
Definición
El sesgo de anticipación se produce cuando un sistema de backtesting usa datos que no se habrían conocido en el momento de tomar una decisión de trading. Es como leer el periódico de mañana para hacer las operaciones de hoy. Cualquier backtest que incorpore información futura producirá resultados irrealmente buenos, y completamente imposibles de reproducir en trading real.
El sesgo puede introducirse en varios niveles: en los propios datos (precios ajustados retroactivamente), en la lógica de la señal (usar el precio de cierre de la misma barra para ejecutar), en la selección del universo (elegir acciones según resultados futuros) o en los datos fundamentales (usar cifras de beneficios antes de que se hicieran públicas).
Ejemplo: ejecución en la misma barra
Es la forma más común. Tu estrategia calcula un indicador usando el precio de cierre de la barra actual y luego ejecuta una operación a ese mismo precio de cierre. El problema: en tiempo real no conoces el precio de cierre hasta que la barra ha cerrado. En ese momento solo puedes ejecutar en la apertura de la siguiente barra, no en el cierre de la barra actual.
El impacto parece pequeño (una barra de retraso), pero puede ser enorme. Si una acción abre con un gap del 2 % tras la noche y tu estrategia contaba con entrar al cierre de ayer, tu rentabilidad real por operación es un 2 % peor de lo que muestra el backtest. A lo largo de cientos de operaciones, esa diferencia se acumula hasta dar un perfil de estrategia completamente distinto. Muchas estrategias que parecen rentables con ejecución en la misma barra dejan de serlo con ejecución en la siguiente barra.
Ejemplo: datos de beneficios futuros
Supón que tu estrategia compra acciones cuando su ratio precio-beneficio (PER) cae por debajo de 10. El PER requiere datos de beneficios, pero ¿cuándo se publicaron realmente esos beneficios? Si usas beneficios anuales publicados el 15 de marzo en una decisión de trading del 10 de enero, has usado datos del futuro.
Esto es sorprendentemente común en los backtests de factores fundamentales. La mayoría de las bases de datos vinculan la cifra final de beneficios al periodo fiscal que cubre, no a la fecha en que se publicó. Un informe de resultados del 4T cubre de octubre a diciembre, pero puede no publicarse hasta febrero. Cualquier backtest que use datos de beneficios del 4T para una decisión de trading en diciembre tiene sesgo de anticipación.
La solución es usar datos point-in-time: bases de datos que registran lo que se sabía en cada fecha concreta, no lo que sabemos ahora mirando atrás. El conjunto de datos point-in-time de Compustat y productos similares existen precisamente para resolver este problema.
Ejemplo: precios ajustados retroactivamente
Cuando una empresa hace un split 2:1, los proveedores de datos reducen a la mitad, de forma retroactiva, todos los precios históricos para que los gráficos se vean continuos. Cuando una empresa paga un dividendo de 1 $, las series de cierre ajustado reducen todos los precios anteriores en 1 $. Esto es útil para calcular rentabilidades, pero reescribe la historia.
Piensa en una estrategia que compra cuando la SMA de 50 días cruza por encima de un nivel de precio concreto. Si se produce un split, todas las SMA históricas se recalculan con los nuevos precios ajustados, lo que puede crear señales de cruce que no existían en ese momento. Un trader en 2019 veía los precios sin ajustar; el backtest en 2024 ve los precios ajustados por el split. Son series diferentes que pueden generar señales diferentes.
La mejor práctica: usa precios ajustados solo para calcular rentabilidades y seguir el valor de la cartera. Usa precios sin ajustar (o precios con ajustes point-in-time aplicados con cuidado) para generar señales y calcular indicadores.
Cómo detectar el sesgo de anticipación
Detectarlo requiere auditar de forma sistemática tu proceso de backtest:
- Comprobación del momento de ejecución: imprime la marca de tiempo de generación de la señal y la de ejecución de cada operación. Si están en la misma barra, tienes sesgo de anticipación.
- Auditoría de disponibilidad de datos: para cada dato usado en la generación de señales, verifica que era público en ese momento. Esto es especialmente importante para los datos fundamentales (beneficios, ingresos, previsiones).
- Prueba de sensibilidad: añade un retraso de 1 barra a todas las ejecuciones de señales. Si el ratio de Sharpe de tu estrategia cae más de un 30 %, probablemente la ejecución en la misma barra estaba inflando los resultados.
- Comparación con paper trading: ejecuta la estrategia hacia adelante sobre datos en vivo durante unas semanas. Un rendimiento sistemáticamente inferior al del backtest es un fuerte indicio de sesgo de anticipación en algún punto del proceso.
Cómo evitar el sesgo de anticipación
Evitarlo requiere disciplina en cada etapa del proceso de backtesting:
- Ejecuta siempre en la siguiente barra. Si una señal se genera al cierre de la barra N, ejecuta en la apertura de la barra N+1. Esta sola regla elimina la fuente más común de sesgo de anticipación.
- Usa datos point-in-time. Para los factores fundamentales, asegúrate de usar los datos tal como estaban disponibles en cada fecha histórica, no cifras reexpresadas retroactivamente.
- Gestiona los ajustes con cuidado. Usa datos ajustados por splits y dividendos solo para calcular rentabilidades, no para generar señales donde importan los niveles absolutos de precio.
- Congela tu universo. No uses conocimiento futuro para elegir qué activos incluir en el backtest. Si pruebas una estrategia con acciones del S&P 500, usa la lista de componentes del S&P 500 tal como era en cada fecha histórica, no la lista de hoy aplicada retroactivamente.
- Incorpora retrasos de ejecución. Añade retrasos realistas en el llenado de órdenes: aunque tu bróker ejecute en milisegundos, añade un retraso de 1 barra como margen de seguridad para detectar cualquier lógica accidental en la misma barra.
Datos point-in-time
Las bases de datos point-in-time (PIT) guardan los datos tal como se conocían en cada fecha histórica. A diferencia de las bases de datos estándar, que sobrescriben los valores antiguos con cifras reexpresadas, las bases de datos PIT mantienen un historial completo de revisiones. Si una empresa publicó inicialmente unos beneficios del 3T de 1,20 $ el 28 de octubre y luego los reexpresó a 1,15 $ el 5 de diciembre, una base de datos PIT registra ambos valores con sus respectivas marcas de tiempo.
En estrategias basadas en precios sobre activos principales, el sesgo de anticipación por revisiones de datos preocupa menos: los precios son definitivos al cierre. Pero para cualquier estrategia que use datos fundamentales (inversión en valor, factores de calidad, señales basadas en beneficios), los datos PIT son imprescindibles. La diferencia entre usar datos PIT y no PIT puede ser la diferencia entre una estrategia que parece tener un ratio de Sharpe de 1,5 y otra que en realidad tiene un ratio de Sharpe de 0,7.
Pruébalo tú mismo
QuantPrompt está diseñado para evitar por defecto las formas más comunes de sesgo de anticipación. Las señales generadas por cruces de indicadores o condiciones de precio en la barra N se ejecutan automáticamente al siguiente precio disponible, no al cierre de la misma barra. Esto elimina el sesgo de ejecución en la misma barra sin necesidad de ninguna configuración especial.
Para ver el impacto por ti mismo, describe una estrategia y compara los resultados con ejecución en la misma barra frente a la siguiente barra. La diferencia te mostrará exactamente cuánto infla el sesgo de anticipación las rentabilidades típicas de un backtest, y por qué eliminarlo es innegociable para cualquier estrategia que pienses operar con capital real.
Preguntas frecuentes
Fuentes
- Banz, R. W. & Breen, W. J. (1986). Sample-Dependent Results Using Accounting and Market Data: Some Evidence. The Journal of Finance.
- TradingView. Pine Script v6 User Manual: Repainting (future leak with request.security()).
- TradingView. Pine Script v6 User Manual: Other timeframes and data (lookahead parameter).