Mirar al futuro sin darse cuenta
Siete bugs confirmados de anticipación y desalineamiento, y por qué el más famoso —el repintado— produce resultados espectaculares.
La pregunta: ¿Cuánto de un hallazgo se explica sólo por haber usado, sin querer, información que todavía no existía?
Qué se encontró
Es la clase de error que produce los mejores resultados de la carrera de cualquiera. El proyecto confirmó siete: el repintado de las ondas de Elliott (15,7 días de anticipación media), un desalineamiento de 2.588 días en un ensemble, un objetivo de volatilidad calculado con ventana expansiva, una ventana de suavizado que cambiaba con la granularidad del gráfico, el nulo no emparejado por época, un z-score de flujos de ETF calculado sobre un índice de calendario cuando la serie era de días hábiles, y pesos degenerados que convertían un backtest entero en NaN. Cada script nuevo escrito a mano es otra tirada de dados contra el mismo tipo de bug; por eso la primera medida correctiva del proyecto no fue estadística, fue de ingeniería: una sola librería de validación con tests unitarios, y los 137 scripts anteriores congelados.
Pruébalo tú mismo
Cuánto regala mirar al futuro. Pon los días de anticipación que se cuelan y la deriva diaria del activo, y compáralo con la ventaja que dice tener la señal.
Ventaja que queda después de descontarla (%):
Es una estimación de orden de magnitud, no la medición del caso de Elliott: acertar el signo de un movimiento con quince días de ventaja vale aproximadamente lo que se mueve el activo en ese plazo, y un precio se mueve con la raíz del tiempo. Sirve para lo que tiene que servir: ver que con 15,7 días de anticipación no hace falta ninguna señal para producir un hallazgo espectacular.
Números de ejemplo para practicar — no son datos reales.
Cómo se probó, paso a paso
- El repintado es el caso más ilustrativo. Un máximo local no se sabe que era un máximo hasta que el precio ha bajado desde él. Un indicador que marca ese máximo en la fecha en que ocurrió, y no en la fecha en que se confirmó, está poniendo información del futuro en el pasado.
- La versión corregida sólo cuenta un pivote como accionable cuando ya han pasado los días necesarios para confirmarlo. Con esa corrección, el hallazgo de Elliott desaparece por completo.
- La librería de validación del proyecto incluye un DETECTOR de repintado, con un test unitario que reproduce exactamente el bug de Elliott y exige que salte. Un test que no caza el error que ya te costó dos semanas no está haciendo su trabajo.
- Y una comprobación de conveniencia que salvó otro barrido: un
assertsobre la convención de la transformada de Fourier cazó, en dos iteraciones seguidas, que la correlación cruzada estaba invirtiendo el sentido del tiempo. Sin esa auto-comprobación se habría publicado un hallazgo con el futuro dentro.