¿Cómo sobreoptimizar un sistema de trading?

En el último informe vimos el indicador TD SEQUENTIAL de Tom DeMark y se programó un sistema de trading para operarlo. Básicamente el sistema consistía en comprar siguiendo las señales del indicador y salirse cuando haya una ganancia, implementado como un oscilador estocástico que alcanza un determinado nivel.

La parte bajista era simétrica

Los resultados no fueron buenos, y eso que estábamos optimizando los largos y los cortos por separado; es decir, teníamos un total de 6 variables que se pueden cambiar para que el resultado salga como uno espera. Esto suena familiar, verdad? Estamos sobreoptimizando para que un sistema de trading termine dando los resultados que esperamos.


He decidido seguir sobreoptimizando el sistema para mostrarle que cualquier sistema de trading puede dar muy buenos resultados si optimizamos todo: sus parámetros, los mercados que opera, etc. Pero eso no va a funcionar en tiempo real, desafortunadamente.

Lo más importante es que vd se dé cuenta de que hay un momento en el diseño del sistema en que los resultados no son los esperados y empezamos a cambiar cosas para hacer que funcione. Una pista importante es el número de parámetros. Si con 2 o 3 no funciona entonces
el sistema probablemente no sirva.

En resumidas cuentas, este sistema basado en el indicador TD Sequential, tal y como yo lo he planteado parece que no funciona, así que voy a sobreoptimizarlo para que saque buenos resultados y para que vd vea lo que NO hay que hacer. Creo que va a ser un ejercicio muy didáctico y útil.


Debajo vemos una optimización a la que he añadido 2 parámetros para optimizar también el TD Sequential, que por defecto toma los valores 9 y 4 en la fórmula original de DeMark. Con esto se tiene un total de 8 parámetros optimizables.


Los resultados siguen siendo malos como lo demuestra el alto drawdown. Si forzamos a que el optimizador nos encuentre una solución buena por Recovery Factor entonces aparecen los siguientes resultados:



Es decir, para tener un Recovery Factor de 8 hay que quedarse solamente con 71 operaciones. Esta es una pista importante de que este sistema no funciona.

Cuando la mejor solución tiene muy pocas operaciones estamos ante un pico de ganancia que ha encontrado el optimizador y no ante una solución “todo-terreno” que funcione en un amplio margen de parámetros. Esto es importante.

En este punto tengo que aclarar que no es el sistema de Tom DeMarke el que no funciona sino mi implementación de esta idea. Quizás plantearlo de otra manera sí que hubiera funcionado, pero como digo en el informe de hoy vamos a ver los pasos que seguiría un mal diseñador de
sistemas para llegar a una solución que le satisfaga.

Todo esto lo hago sobre la marcha y no sé muy bien cómo lo haré para mejorar esto, pero como ya tengo bastante experiencia con Amibroker pues seguro que al final consigo torturar los números lo suficiente como para sacar una buena curva de capital.


Si se recuerda de las reglas del sistema (explicadas en el informe anterior), el sistema tiene un stop de tiempo de forma que si una operación no va bien tras un número determinado de días pues la cerramos. Este número de días es un parámetro optimizable. Voy a quitar esta regla que parece que no funciona y voy a poner un stop loss “tradicional” con N desviaciones estándar y haré la optimización de N.

En realidad este cambio reducirá en 1 el número de parámetros, pero también se sobreoptimiza “probando cosas hasta que sale mejor” así que si esto mejora los resultados lo incluiré, y si no los mejora pues no haré este cambio. Supongo que poco a poco vd se da cuenta de cómo funciona un mal diseño del sistema. Se podría resumir como: “hay que hacer que esta idea genere buenas estadísticas como sea”…

Según pongo a funcionar el optimizador me salen un montón de soluciones con pérdidas:



Esta es otra pista importante. Si cuando empiezas a optimizar un sistema solo salen curvas negativas y el optimizador necesita un tiempo para encontrar curvas positivas entonces estás ante un sistema que no funciona.

Si lo dejas un tiempo al final las curvas malas quedan muy por debajo y te llevas la impresión de tener buenos resultados, pero los buenos resultados deberían ser la regla y no la excepción.

Los resultados que obtengo tras la optimización son los siguientes:


Que están sin incluir comisiones. Ahora voy a añadirle $100 de comisiones por operación completa a ver qué pasa. El resultado es:



Y sale negativo. Perfecto, no hay que añadir comisiones Si añadimos comisiones altas el sistema no funciona.

Espero que entienda la ironía, un mal diseñador de sistemas pensaría que es mala idea añadir comisiones y operaría el sistema con la ilusión de que va a poder tener ejecuciones de órdenes igual que en la teoría y comisiones lo suficientemente bajas para que no afecten. Y por supuesto no esperaría ni una sola contingencia cotidiana como llegar tarde a una orden, poca liquidez, el ordenador va lento, fallos de internet, etc. Todo esto lo obviamos.

Una vez quitadas las comisiones hay que solucionar el tema del máximo drawdown que es demasiado alto. Puesto que optimizar los parámetros no lo ha solucionado voy a listar los mercados y me quedaré solamente con los que tengan menor drawdown:



La tabla muestra los mercados ordenados por drawdown descendente. Me voy a quedar con los 10 primeros que todos tienen un drawdown inferior a 30.000 dólares.

En la lista veo que están la Harina de Soja (ZM) y también el Aceite de Soja (ZL), dos mercados altamente correlacionados, pero como se puede imaginar voy a hacer como que no lo he visto. La idea es no usar demasiado el sentido común en este diseño

Me creo un watchlist con los 10 primeros mercados y ese es mi universo de mercados donde voy a operar el sistema de trading. Ahora hago un backtest y veo que “casualmente” ha bajado mucho el drawdown:



Pero claro, ahora tengo unos mercados diferentes así que seguro que si le vuelvo a pasar el optimizador consigo que todavía mejoren más los resultados. Cuando lo hago lo que resulta es lo siguiente:




Ahora sí que he conseguido un Recovery Factor de 10; es decir, un drawdown 10 veces menor que la ganancia del sistema. El profit factor es bajo, de 1.22, lo que nos dice que el sistema no es que sea muy eficiente, pero de nuevo vuelvo a cerrar los ojos y hago como que no lo he visto.

Vamos bien
Incluso hay un 64% de aciertos tras 3391 operaciones. Alta fiabilidad estadística!
Y finalmente tenemos la curva de capital (página siguiente al final) que nos dice que estamos ante un sistema excepcional. Su evolución rectilínea es impecable. Solo
tiene dos años en negativo y el drawdown es mínimo.

Decido no pasarle la prueba de WalkForward por si acaso se me estropea este magnífico sistema.


Como no podía ser de otra manera el análisis de Montecarlo de este maravilloso sistema de trading sale muy bien.

El percentil del 1% es una ganancia de más de 200.000 dólares, así que incluso teniendo mala suerte con este sistema al final deberíamos terminar en ganancias.

Hemos partido de una idea que inicialmente no funcionaba y al final hemos conseguido hacer que funcione. Espero que este informe le haya resultado útil para saber lo
que no hay que hacer en el diseño de un sistema de trading.



Accede a Rankia
¡Sé el primero en comentar!