Qué es un backtest y cómo evitar los errores más comunes del backtesting

Una característica del trading cuantitativo es la utilización del backtesting para evaluar la viabilidad de un sistema.

¿Qué es un backtest?

Hacer backtesting es simplemente probar tu sistema de trading antes de utilizarlo.
¿Sobre qué lo probamos? Sobre los datos de cotizaciones pasadas para analizar qué habría pasado si hubiéramos operado el sistema en ese momento.

Basándonos en los resultados del backtest, pasaremos a la siguiente etapa y tomaremos la decisión de operar o no el sistema.

Si cometemos fallos en el proceso de backtesting nuestra decisión puede ser errónea. Por este motivo, es importante conocer cuáles son los errores más comunes al realizar un backtest y así poder evitarlos.

Errores más comunes al realizar un backtest

errores al realizar un backtest

1) Fallos en la base de datos

Datos históricos y datos reales del broker

Lo primero que hay que comprobar es que los datos que utilizas al realizar un backtest no sean muy diferentes de los datos que utilizarás en real.

Esto puede ser relativamente fácil para operativas que utilizan datos al cierre del día por ejemplo, pero se complica bastante para operativas intradía. A medida que el time frame se acelera el problema aumenta. Los datos intradía del broker no siempre suelen coincidir con los datos utilizados en el backtest.

Conclusión básica: Realizar un backtest de estrategias intradía es bastante más complicado que hacerlo de estrategias diarias.

El problema con el «Survivorship bias»

El problema del survivorship bias o sesgo de supervivencia afecta especialmente a las estrategias con acciones.

La lista de acciones que componen los índices se va actualizando con el tiempo. Se incorporan nuevas acciones y se deslistan aquellas acciones con bajo rendimiento o quiebra. Entonces, si realizamos un backtest con la lista actual nos dará un resultado distorsionado porque las acciones eliminadas no se tienen  en cuenta.
—-Si te interesa ver el impacto del sesgo de supervivencia, hay un excelente estudio en el blog de Quant Trading de Cesar Alvarez—.

La solución a este problema es utilizar bases de datos que incluyan todas las acciones históricas. El inconveniente es que estas bases de datos son de pago, ya que la mayoría de bases de datos gratuitas sólo incluyen los títulos actuales (Si alguien conoce cómo tener acceso gratuito a bases de datos completas, por favor que lo comparta en comentarios).

Si no podemos tener acceso a bases de datos completas, otra manera de lidiar con el sesgo de supervivencia es utilizar sólo los datos más recientes para realizar un backtest. Cuando más atrás busquemos, mayor será la probabilidad de verse afectado por el survivorship bias.

Ajuste de splits y dividendos

En el caso de trabajar con acciones o ETFs es necesario comprobar si en la base de datos las cotizaciones históricas están ajustadas a splits y dividendos.

Si te interesa el tema del ajuste por dividendos en los sitemas de trading, puedes ver este examen que realizamos en la web Test: Ajuste de dividendos y sistemas de trading con acciones para

Tamaño insuficiente de la base de datos

Un inconveniente habitual es no tener suficiente cantidad de datos históricos para realizar el backtest.

Tienes que tener en cuenta que para poder optimizar correctamente deberás separar los datos de la muestra en dos periodos: In sample y out of sample.

datos backtest
Datos: In sample| out of sample

Si quieres ver más sobre cómo optimizar un sistema de trading puedes ver esta entrada: http://estrategiastrading.com/optimizar-sistemas-de-trading-walk-forward/

 ¿Qué cantidad de datos históricos necesitas para el backtest?

Pues depende… la cantidad de datos necesarios dependerá de tu sistema, tanto del número de parámetros (a más parámetros más data necesitas), como de la temporalidad y de la frecuencia de operaciones.

Necesitas que el backtest tenga suficiente número de operaciones para que sea válido.
¿Cuántos trades son suficientes para que la muestra de datos sea válida? Hay muchos expertos en trading que argumentan que se deben tener al menos 30 trades para validar estadísticamente los resultados del sistema. Yo prefiero la postura de Keith Fitschen, que afirma que cuanto más grande sea la desviación estándar de los resultados del backtest, mayor deberá ser la muestra in-sample.

Por otro lado, se puede llegar a pensar que cuanto más datos históricos tengamos mejor, más robusto será nuestro backtest.
Bueno, eso es así pero solo en parte.
Hay que tener en cuenta que los datos (cotizaciones) no son estacionarios. Por ejemplo, si tienes muy buenos resultados hace 20 años pero no en los últimos 5 es aconsejable hacer tests complementarios.

2) Errores en la programación del sistema de trading

Mis conocimientos de programación son básicos…muy muy básicos. Por lo que los posibles fallos en la programación del sistema me preocupan mucho, y además algunas veces son difíciles de detectar.

Una buena opción es recordar el principio KISSKeep It Simple, Stupid!- Evitar los bucles interminables, buscar un código claro y evitar caer en una complejidad a veces innecesaria. Las soluciones sencillas son más simples de programar y con ello podrás evitar errores de programación.

Look-Ahead Bias o mirar al futuro

Esto me ha ocurrido más de una vez. Cuando escribes el código te equivocas y estás tomando datos del futuro para detectar las señales.

Entonces queda algo al estilo:
«comprar hoy a la apertura si mañana el precio sube de X%»
en vez de
«comprar hoy a la apertura si ayer el precio subió de X%».

Suele ser un error muy tonto, pero bastante fácil de cometer. Normalmente te puedes dar cuenta porque los resultados del backtest son demasiado buenos para ser ciertos.

amibroker check look ahead al realizar un backtestHay algunos programas que dan un aviso cuando se comete este tipo de errores en la programación.

En el caso de Amibroker, puedes chequear el código y ver si mira al futuro con → AFL Formula Editor →Code Check & Profile.
Aquí te avisa si el código toma referencias de  barras del futuro. Pero hay algunos puntos flojos: si la referencia al futuro está dentro de un bucle puede que no la detecte. Además, da un falso positivo con AdToComposite. En fin…no es perfecto.

Evitar sistemas que dan señales falsas

¿A que me refiero con señales falsas? a sistemas que necesitan una condición posterior para poder confirmar las señales.

En cierta manera es similar al look-ahead bias. El sistema dará señal de entrada durante la sesión pero al cierre esta señal habrá desaparecido. En este caso el resultado del backtest no incluye estas entradas falsas pero tu cuenta de trading en real si.

Añadir o no las comisiones al realizar un backtest

El impacto de las comisiones sobre la rentabilidad dependerá principalmente de la frecuencia de las operaciones. Cuanto más frecuentemente operamos, mayor será el impacto de las comisiones.

Por otro lado, el coste de las comisiones también dependerá del broker con el que vamos a trabajar. Por ejemplo el broker de ING está actualmente promocionando que bajan sus comisiones, pero su comisión mínima para comprar ETFs o acciones en USA es de 20$, cuando el mínimo de Interactive Brokers es de 1$ ¡Definitivamente no hay ni punto de comparación!

Slipagge o deslizamiento de precios

Al operar en real un sistema también puede afectarnos el slipagge o deslizamiento.
Esto depende del tipo de orden que utilicemos (las ordenes limitadas no tienen deslizamiento pero sí tienen riesgo de no ejecución).

Una buena recomendación sería añadir siempre una cantidad lo más realista posible como comisiones o gastos en el backtest.

Además, si queremos replicar estrategias de otros traders, es bueno revisar si los backtest que nos presentan incluyen o no comisiones y cuánto es el importe previsto para las mismas.

Sobreoptimización o curve fitting

Cuando comienzas a testear tu sistema de trading es muy difícil que te des por satisfecho a la primera. Tienes un sistema con una esperanza matemática positiva pero te gustaría mejorar los ratios,  piensas que el drawdown es muy elevado, te gustaría aumentar el ratio de Sharpe, etc y etc.
A partir de este momento comienzas a optimizar los parámetros. Optimizar correctamente un sistema de trading es bueno, pero siempre hay que utilizar métodos para evitar el curve fitting o sobreoptimización.

Si no sabes de qué métodos te estoy hablando mira esta entrada: http://estrategiastrading.com/sobreoptimizacion-en-trading/


Conclusión: Al realizar un backtest, se simula cómo se hubiera comportado el sistema en el pasado.
Evidentemente, el futuro no tiene por qué ser igual al pasado. Pero el pasado es lo único que conocemos, es un dato inalterable y conocido sobre el cual basarnos.

Generalmente, cuando cometemos errores en el backtesting, estos errores suelen ser más al alza que a la baja, dando lugar a resultados excelentes sobre el papel, pero no en la realidad.

No busques un backtest perfecto, busca un sistema de trading viable.

Es mejor no «forzar» el backtesting para obtener un resultado brillante. Lo importante es que el sistema tenga una lógica coherente y que esté ligado con la realidad. De otra manera terminaremos por hacernos trampas al solitario…


Si quieres saber más sobre el tema aquí te dejo un video de Ernie Chan, Pitfalls of Backtesting ( con link a su blog, en inglés, pero lleno de estrategias de trading cuantitativo)


Si te gustan los artículos recuerda que puedes suscribirte a Estrategias de Trading y los recibirás directamente como newsletter en tu correo.

Además puedes seguir las actualizaciones del blog por Google+, Twitter, Feedly, etc.

Saludos y buen trading para todos!


16 comentarios en «Qué es un backtest y cómo evitar los errores más comunes del backtesting»

  1. Hola Duk2,
    enhorabuena por tu trabajo y el blog, te leo desde hace relativamente poco y tus articulos son muy interesantes y de una gran ayuda. Gracias por el esfuerzo.
    Queria trasladarte una duda. De tu articulo entienmdo que el procedimiento de backtesting lo haces sobre datos «adjusted» y aqui viene mi duda. No debiera hacerse sobre historicos cond datos solo a «close» y no ajustados? Puedo comprender que se ajusten splits pero dividendos?
    Saludos
    Jose Ignacio

    Responder
    • Hola Jose Ignacio,

      Primero gracias por tu comentario. Me alegra mucho que los artículos te parezcan interesantes y puedan ser útiles para ti.

      Ahora el tema del ajuste por dividendos:
      En mi opinión todo depende del tipo de estrategia que estes testeando. Para algunos sistemas de trading de corto plazo probablemente no importe tanto ( mientras no operes justo el día del ex-dividend date o del split). Pero en sistemas que mantienen acciones a medio y largo plazo si que puede ser significativo ( tanto en los resultados sobre rentabilidad como en la selección de acciones para sistemas que explotan el momentum). Mira en este artículo trabajaba algunos test para ver la diferencia: BackTest-La diferencia entre ajustar y no ajustar por dividendos

      un saludo,
      Duk2

      Responder
  2. Buenas,

    estoy de lleno estudiando sistemas con ETFs y siempre acabo en tu blog para completar algo. Buen contenido

    Al hilo del comentario que haces de Interactive Brokers… no sé si lo usas, pero me gustaria saber qué comision tienen por operacion para ETFs USA. Estoy en proceso de elegir broker para las estrategias, así que cualquier opinión será de ayuda

    Un saludo,
    Alex

    Responder

Deja un comentario

ESTRATEGIAS DE TRADING