Sobreoptimización en un bot de trading: cómo detectarla

Sobreoptimización en un bot de trading: cómo detectarla

La sobreoptimización de un bot de trading se detecta comparando lo que hace el sistema con datos que no vio durante el ajuste. Si el rendimiento se hunde fuera de esa muestra, si un pequeño cambio en un parámetro lo desmonta o si probaste miles de combinaciones para dar con la ganadora, la curva bonita del backtest describe el ruido del pasado y no una ventaja repetible.

A continuación verás por qué ocurre, cuánto se infla un resultado cuando pruebas muchas variantes y cinco comprobaciones contra la sobreoptimización que puedes hacer en MetaTrader 5 o en tu propio código antes de darle dinero a un robot.

Qué es la sobreoptimización y por qué la sufre cualquier bot

Un bot de trading ejecuta reglas con parámetros: el periodo de una media, la distancia del stop, la franja horaria en la que opera. Optimizar consiste en buscar los valores que mejor resultado dan en un histórico. El problema está en que ese histórico mezcla dos cosas: un patrón que quizá se repita y un ruido que no volverá a darse de la misma forma. Cuantos más ajustes permites, más fácil le resulta al optimizador encontrar la combinación que mejor encaja con el ruido.

La analogía más útil es la del examen del año pasado. Si te aprendes de memoria sus respuestas, sacas un diez en ese examen y no sabes nada del temario. Un bot sobreoptimizado ha memorizado 2019-2024; el mercado de mañana es otro examen con otras preguntas.

Conviene separar dos términos que se usan como sinónimos. Optimizar es elegir parámetros razonables para una idea que tiene una lógica previa. Sobreoptimizar es seguir afinando hasta que el sistema explica cada vaivén del histórico, incluidos los que fueron pura casualidad. La frontera depende de cuántas pruebas haces y de cómo validas el resultado.

Cuántas combinaciones prueba tu optimizador sin que lo notes

Imagina un asesor experto con tres parámetros: periodo de la media entre 10 y 200 de 10 en 10 (20 valores), stop entre 10 y 80 puntos de 5 en 5 (15 valores) y un filtro horario con 10 opciones. El optimizador recorre 20 × 15 × 10 = 3.000 combinaciones. Cada una es, a efectos estadísticos, una prueba distinta, y cada prueba es una oportunidad más de sobreoptimización.

Ahora un cálculo sencillo. Si una estrategia sin ninguna ventaja tiene un 5 % de probabilidades de parecer buena por azar en una prueba, y haces 100 pruebas independientes, la probabilidad de que al menos una salga «buena» es 1 − 0,95100, alrededor del 99,4 %. Con 3.000 pruebas esperarías unas 150 falsas alarmas (3.000 × 0,05).

En la práctica las combinaciones están correlacionadas: una media de 50 y otra de 60 dan resultados parecidos, así que el número real de pruebas independientes es menor que 3.000. La conclusión se mantiene: la mejor fila del informe de optimización es, por construcción, la que más suerte ha tenido en ese histórico.

El experimento de las 200 estrategias aleatorias

Campbell Harvey y Yan Liu lo ilustraron en «Evaluating Trading Strategies», publicado en The Journal of Portfolio Management. Generaron 200 estrategias con números aleatorios, con rentabilidad media cero y una volatilidad anual del 15 %, durante diez años. La mejor tenía un ratio de Sharpe de 0,92 y un estadístico t de 2,91: con una sola prueba, apenas un 0,4 % de probabilidades de ser casualidad. Tenía caídas mínimas e incluso aguantaba bien la crisis financiera. Era azar.

Al corregir por las 200 pruebas con el método de Bonferroni, el umbral pasa de 0,05 a 0,05 / 200 = 0,00025, y hace falta un t de al menos 3,66 para dar la estrategia por buena. Con esa corrección, el Sharpe «honesto» de la ganadora baja a 0,08: un recorte del 91 % sobre el 0,92 original. Ese porcentaje mide cuánto infla el resultado quedarse con la mejor de 200, que es el mecanismo de la sobreoptimización.

Puedes trasladarlo a tu bot con la relación que usan los autores, t = Sharpe × √años. Según el mismo trabajo, Bonferroni exige un t de 2,8 con 10 pruebas y de más de 4,1 con 1.000. Con diez años de datos y 1.000 combinaciones probadas, necesitarías un Sharpe anual de al menos 4,1 / √10 ≈ 1,30 para descartar la casualidad con ese criterio, que además es de los más estrictos. Si tu informe muestra un Sharpe de 0,9 después de mil variantes, el dato por sí solo no demuestra nada.

En otro trabajo, «Backtesting», los mismos autores revisan la costumbre de recortar a la mitad el Sharpe de cualquier backtest. Sostienen que aplicar ese 50 % fijo es un error serio, porque el recorte correcto no es lineal: los Sharpe muy altos apenas se penalizan y los marginales se penalizan mucho. Traducido a un bot: un backtest mediocre tras mucha búsqueda vale menos de lo que parece, y uno muy sólido resiste mejor el ajuste.

Dos superficies de resultados: una meseta ancha y estable frente a un pico estrecho y aislado
Una meseta de resultados parecidos aguanta el paso del tiempo; un pico aislado suele ser un accidente del histórico.
Publicidad

Rodéate de personas con tu misma mentalidad.

Ad

Cinco señales de sobreoptimización en un bot de trading

  1. Un pico aislado en el mapa de parámetros. Supón que la media de 50 da un factor de beneficio de 1,9 y las de 45 y 55 caen a 1,05 y 0,98. Has encontrado un accidente. Un sistema robusto dibuja una meseta: valores vecinos con resultados parecidos.
  2. Muchos parámetros para pocas operaciones. Cada parámetro es un grado de libertad que el optimizador usa para encajar el pasado. Con cinco filtros y 80 operaciones en diez años, cada operación sostiene demasiadas decisiones.
  3. Reglas con fechas o excepciones. «No operar los martes de agosto» o «saltarse 2020» suelen ser parches para borrar pérdidas concretas del histórico, no reglas con una lógica de mercado.
  4. Un resultado fuera de muestra muy inferior. Si el rendimiento cae a la mitad o desaparece en el tramo reservado, la diferencia mide cuánto se ajustó el sistema al ruido.
  5. Una curva demasiado limpia. En el experimento de Harvey y Liu, la ganadora aleatoria tenía caídas mínimas. Una curva casi recta no prueba calidad; con suficientes intentos, el azar también la dibuja.

Cómo comprobarlo en MetaTrader 5, paso a paso

El probador de estrategias de MetaTrader 5 trae una herramienta que conviene activar siempre para medir la sobreoptimización: el periodo forward. Según la ayuda oficial de optimización de MetaTrader 5, puedes reservar la mitad, un tercio o un cuarto del periodo, o fijar una fecha propia. El probador optimiza en la primera parte y vuelve a probar en el tramo reservado el 10 % de las mejores pasadas si la optimización es completa, o el 25 % si es genética.

  1. Fija un periodo largo y elige forward 1/3 o una fecha personalizada. El tramo reservado siempre es el final del periodo.
  2. Limita la optimización a los parámetros que tengan una razón de ser. Si no sabes explicar por qué existe un filtro, quítalo antes de optimizar.
  3. Al terminar, compara en los resultados forward las pasadas que mejor quedaron en la optimización. Si el orden se desbarata por completo, la optimización eligió ruido.
  4. Toma la combinación elegida y mueve cada parámetro un 10-20 % arriba y abajo. Si el resultado se derrumba, estás sobre un pico.
  5. Añade costes pesimistas por operación: comisión, spread y deslizamiento. Lo detallo en latencia y slippage en un bot de trading; una ventaja pequeña y sobreoptimizada suele evaporarse con ellos.

Ese forward de MetaTrader es un único corte del histórico. Para repetirlo en varias ventanas sucesivas, que es lo que hace el análisis walk forward, tienes el procedimiento completo en walk forward para validar un bot.

Qué hacer si detectas sobreoptimización en tu bot

  • Reduce parámetros y amplía los pasos. Menos combinaciones significa menos suerte acumulada en el ganador.
  • Elige el centro de una meseta, no el máximo del informe. Pierdes algo de rentabilidad en el backtest y ganas estabilidad fuera de él.
  • Apunta cuántas combinaciones has probado en total, incluidas las de sesiones anteriores que descartaste. Ese número decide cuánto tienes que exigir al resultado.
  • Escribe la lógica antes de optimizar. Una hipótesis del tipo «el precio tiende a continuar tras romper el máximo de la sesión asiática» limita qué pruebas tienen sentido.
  • Pasa a demo o a capital mínimo con un criterio de parada escrito, como explico en cuándo apagar un bot de trading.

Lo que conviene retener

  • Tres parámetros con 20, 15 y 10 valores son 3.000 pruebas, y la mejor es la que más suerte tuvo.
  • Con 100 pruebas independientes al 5 %, la probabilidad de al menos un falso positivo ronda el 99,4 %.
  • En el estudio de Harvey y Liu, la mejor de 200 estrategias aleatorias tenía un Sharpe de 0,92 que, corregido, quedaba en 0,08.
  • Busca mesetas, no picos, y prueba siempre en datos que el optimizador no haya visto.
  • Los costes pesimistas y el forward de MetaTrader 5 destapan buena parte de la sobreoptimización antes de arriesgar dinero.

Preguntas frecuentes

¿Qué diferencia hay entre optimizar y sobreoptimizar un bot?

Optimizar es elegir parámetros sensatos para una regla con lógica previa y validarlos fuera de muestra. Sobreoptimizar es seguir afinando hasta explicar cada movimiento del histórico. La diferencia práctica se ve en el tramo reservado: el sistema optimizado se degrada algo; el sobreoptimizado se desmorona.

¿Cuántos años de datos necesito para evitar la sobreoptimización?

No hay una cifra que la evite, pero la relación t = Sharpe × √años da una idea. Con un Sharpe de 0,5, llegar a un t de 2 en una sola prueba exige (2 / 0,5)² = 16 años. Si además probaste muchas combinaciones, el listón sube.

¿El optimizador genético de MetaTrader sobreoptimiza más que el completo?

Recorre menos combinaciones, pero también busca el máximo, así que el riesgo viene de quedarte con la mejor pasada. Lo que reduce el problema es reservar un tramo forward y fijarte en la estabilidad del resultado, sea cual sea el algoritmo.

¿Un backtest con datos de ticks reales está libre de sobreoptimización?

No. La calidad de los datos mide si la simulación reproduce bien los precios del pasado. La sobreoptimización depende de cuántas variantes probaste y de cómo elegiste la ganadora; con ticks perfectos también puedes ajustar un sistema al ruido.

Aviso de riesgo: los bots de trading operan a menudo con CFD, forex o criptomonedas, productos apalancados con los que puedes perder una parte o la totalidad del capital. Un backtest, aunque esté bien validado, no garantiza resultados futuros. Los ejemplos de este artículo son ilustrativos y su contenido es informativo; no constituye asesoramiento financiero.

Mario Insausti

Mario Insausti

Ingeniero de software especializado en sistemas de trading algorítmico

Mario Insausti es ingeniero de software con más de diez años diseñando, programando y auditando sistemas de trading algorítmico sobre plataformas como MetaTrader y entornos propios en Python. Ha realizado backtesting y evaluación de cientos de estrategias automáticas, y colabora divulgando buenas prácticas de automatización para inversores particulares. Su enfoque es puramente técnico y anti-humo: métricas verificables, riesgo medido y cero promesas de rentabilidad; la tecnología ejecuta, pero el criterio lo pone el método.

← Volver al inicio