Sistemas de trading: optimización y walk forward

optimizar sistemas de trading

¿Qué valor tengo que dar a las variables que tener más beneficio neto? ¿Con qué parámetros gano más por operación?
Estos son los tipos de pregunta que nos hacemos cuando lanzamos una optimización.

Optimizar sistemas de trading

Lo que se busca al optimizar sistemas de trading, o mejor dicho lo que yo busco cuando optimizo, es identificar los mejores valores numéricos para los distintos parámetros del sistema.

La idea al optimizar sistemas de trading es encontrar los valores adecuados para maximizar la función objetivo.

Esta función objetivo puede ser cualquiera de los ratios para evaluar sistemas como por ejemplo el recovery factor, K-ratio, el ratio de Sharpe, etc. Lo importante es que la función objetivo elegida simbolice lo que nosotros buscamos en un sistema.

Yo por ejemplo, actualmente optimizo por profit factor, buscando tener controlado el drawdown y me resulta muy importante tener un alto % de aciertos. Y digo actualmente porque estás son las funciones que son importantes para mí en mis condiciones actuales y para el tipo de sistema que estoy operando.

Para encontrar la mejor combinación de valores, el programa lo que hace es ir probando todas las combinaciones de valores posibles y haciendo el backtest para cada una de ellas.

¿Qué es un backtest? Hacer un backtest es aplicar el sistema de trading a los datos de cotizaciones históricas y analizar cómo ha funcionado el sistema en el pasado (% beneficio neto,  % Drawdown, etc).

Por esto, cuantas más variables tengas a optimizar más combinaciones posibles habrá y más backtests habrá que realizar.

La mayoría de plataformas de software para trading permiten hacer optimizaciones de los sistemas; actualmente trabajo con Amibroker (donde las optimizaciones son muy rápidas) antes lo hacía con ProRealTime, y sé que también con Tradestation se puede hacer bastante bien.

¿Cuáles son las claves de una buena optimización?

La estabilidad, esa es la clave.

Al optimizar sistemas de trading buscamos resultados estables, buscamos un grupo de valores numéricos similares que den buenos resultados.

Es mejor evitar los resultados en solitario, es decir evitar que sea una única combinación la que resulte ideal y que si sólo variamos una cifra el resultado se deteriore notablemente.

Un ejemplo visual son los mapas de optimización allí vemos que la mejor combinación de valores debe estar en forma de meseta y no de pico aislado de ganancias.

Pico de ganancia al optimizar el sistema de trading
Pico de ganancia al optimizar el sistema de trading
Optimizar sistemas de trading
Mapas de optimizacion
Algunos tips

La primera vez que lances la optimización, comienza la búsqueda dando a los valores rangos amplios para luego ir acotando y afinando.

A veces ocurre que cambiar alguna variable no tiene ningún efecto significativo en el backtest, entonces quizás es mejor dejarla fija o replantearse si este parámetro es realmente útil ( si no nos aporta nada claro, mejor que se quede fuera del sistema).

Una cosa a tomar en cuenta es que la optimización se debe hacer siempre con el mismo tamaño de la posición, a 1 futuro o si es con acciones siempre con el mismo tamaño de posición ( siempre compramos o vendemos por ejemplo 10.000€ en acciones). Si no lo hacemos así estaremos teniendo en cuenta la reinversión del beneficio y esto depende de las distintas rachas de pérdidas y ganancias que tengamos en el periodo. Primero optimizamos y luego se puede calcular gestión de capital más adecuada.

Peligros de la sobreoptimización

El peligro al optimizar sistemas de trading es caer en una sobreoptimizacion o curve-fitting. A mi me gusta equipararlo a la idea de que torturas tanto a la optimización de un sistema añadiendo muchas restricciones y filtros, que al final te dice lo que quieres oír. Y terminas con un sistema perfecto pero que sólo funciona genial en el pasado y cuando lo pruebas en tu cuenta fracasa estrepitosamente. Eso pasa porque nos hemos pasado de rosca y hemos sobreajustado el sistema. Para evitarlo se aconseja que sean pocos los parámetros a optimizar dando más margen al sistema.

Para saber más, aquí hay un herramienta on-line que muestra el concepto matemático del la sobreoptimización del backtest http://datagrid.lbl.gov/backtest/

Proceso de optimización:

Como de momento no podemos predecir el futuro, cuando hacemos la optimización sólo podemos probar las distintas combinaciones de nuestro sistema con los datos del histórico.

Entonces, optimizamos el modelo en un rango de fechas del histórico, este rango de fechas será el periodo de datos de muestra– in sample data. Obtenemos las mejores variables para ese periodo in sample y probamos el sistema utilizando los parámetros que nos dio el proceso de optimización en el rango de fechas siguiente, estas fechas serán el out of sample data.

In sample-out of sample data
Optimizar sistemas de trading: In sample-out of sample data

¿Cuánto histórico se necesita para optimizar un sistema de trading? Pues depende. Depende una parte del tipo de sistema que estemos analizando, pero sobretodo depende de la frecuencia de las operaciones. Necesitamos un mínimo de operaciones para que el backtest pueda tener validez estadística.


¿Qué es el proceso de Walk Forward?

Walk forward es una especie de optimización proyectada que va haciendo sucesivas optimizaciones en sucesivos periodos.

Es un poco lioso de explicar así que con un ejemplo se entenderá mucho mejor:

Ejemplo walk forward paso a paso

Walk Forward.Ejemplo
Walk Forward.Ejemplo

 

 

 

  1. Optimizo el sistema para los datos históricos de la muestra – in sample data- en nuestro ejemplo 2006-2008.
  2. Selecciono los mejores valores numéricos para las variables según mi función objetivo.
  3. Defino estos valores en el código y hago un backtest sobre el periodo fuera de muestra- out of sample data- y guardo los resultados. En ejemplo 2009.
  4. Repito el proceso de optimización pero muevo las fechas incorporando los datos del anterior out of sample y desplazando la fecha de inicio. En el ejemplo seleccionaría 2007-2009.
  5. Selecciono los mejores valores numéricos  y los defino en el código. Relanzo un backtest sobre un nuevo periodo fuera de muestra- out of sample data- y guardo los resultados. En ejemplo sobre 2010.
  6. Repito el proceso hasta haber usado todo el histórico, hasta la fecha de ayer ( hasta 2014).
  7. Concateno los resultados de los out of sample y obtengo una curva de capital de los resultados fuera de muestra. En este ejemplo se deben de unir los backtest del 2009 al 2014. Estos resultados nos dan una aproximación más exacta a la realidad que la optimización con los datos in sample. Porque estos datos nos dicen como hubiera sido la curva de capital si este se hubiera operado en real y si este procedimiento de sucesivas optimizaciones hubiera continuado hasta ahora.
  8. Si los resultados fuera de muestra son favorables, puedo utilizar los parámetros de la última optimización si decido operar el sistema en real.
Para qué sirve el walk-forvard

El objetivo del walk forward es determinar si la rentabilidad del sistema optimizado puede sostenerse en el futuro o si sólo es una consecuencia de la sobreoptimización.

En consecuencia, lo  realmente importante son los resultados de los out of sample y cómo es su curva de capital. Los resultados in sample no nos dicen nada sobre la futura performance del sistema porque los optimizamos para que sean buenos.

La clave del proceso walk forward es la continua optimización en el rango temporal más reciente, esto se basa en la idea de que el pasado más reciente es la mejor base para seleccionar los parámetros para que el sistema continúe funcionando en el futuro.

Sin embargo, y a pesar de toda esta optimización y reoptimización no hay ninguna garantía que un sistema que haya sido exitoso en el pasado lo siga siendo en el futuro. Como siempre en trading como en la vida no hay nada 100% garantizado.


Resumen de conceptos:

Backtest: Aplicar el sistema de trading a los datos históricos y calcular sus ratios de rendimiento.

Optimizar:  Optimizar sistemas de trading es identificar los mejores parámetros del sistema.

Walk Forward: valora si el sistema mantiene su rendimiento en datos no optimizados. Permite evaluar la robustez del sistema de trading.

Para saber más, aquí hay un ejemplo de como realizar un walk forward con amibroker.


¿Te interesan los sistemas de trading para operar en bolsa o forex? Entonces, te invito a suscribirte a Estrategias de Trading y podrás recibir los artículos directamente en tu correo. Además puedes seguir / compartir los artículos por nuestra página de Facebook, Twitter o Feedly

Saludos y buen trading!

 

 

 

12 comentarios en «Sistemas de trading: optimización y walk forward»

    • Hola Luis Miguel,
      Buena pregunta.
      En mi caso miraría primero si al hacer las sucesivas optimizaciones del walk forward los parámetros( mejores valores numéricos para las variables según mi función objetivo) no difieren mucho. Es decir,primero buscar que sea robusto en este sentido.
      Una vez que compruebo que es robusto si utilizaría los datos para Montecarlo.

      un saludo,

      Responder
  1. Hola,
    muy interesante el artículo!
    Me gustaría optimizar la operativa de mi estrategia, es decir, si ir a un tp fijo, tp dinámico, fijo hasta un cierto punto y luego dinámico, lo mismo con el stop loss.
    Lo estoy intentando con el excel ya que no tengo la estrategia automatizada.
    Podrías recomendarme algún curso de excel enfocado a este campo?
    Muchas gracias y un saludo,

    Responder
  2. Buen día.

    Saludos desde colombia. Muchas gracias por la guía, me ha servido mucho. Estoy iniciando en este mundo del trading algoritmico. Algo que no comprendí bien, es la parte que mencionas de unir los bactesting de los periodos fuera de la muestra de cada iteración. No entiendo como debo concatenarlos. Es decir sumo los resultados de cada periodo? o debo correr un bactesting de esos periodos con la ultima optimización que corrí en el ultimo periodo?

    Y otra duda, existe algún software gratuito para hacer esto o puedes indicarme como lo puedo hacer con MT4

    Espero me haya hecho entender, muchas gracias por tu tiempo al responder.

    Responder

Deja un comentario