En el presente artículo nos referimos a un tema que genera bastante polémica entre los detractores de la operativa con sistemas de trading, la Optimización. Definiremos este término, explicando sus ventajas, diferentes métodos de Optimización, el concepto de Mapas de Optimización y Robustez y sobre todo definiremos sus inconvenientes y peligros, donde nos encontraremos con la SobreOptimización.
Trataremos la optimización desde un punto de vista tradicional, dejando para posteriores artículos las técnicas alternativas al modelo tradicional, entre las que destacan la optimización proyectada o Walk-forward Optimization y los sistemas auto-adaptados o Self-adaptive systems.
¿Qué es la optimización de los sistemas de trading?
Definición de Optimización. Se trata del proceso de búsqueda de la mejor solución de una determinada función objetivo, por ejemplo nuestros beneficios, sujeta a unas restricciones, que son nuestro conjunto de reglas y parámetros. Hemos restringido la definición a los sistemas de trading, a pesar de que la optimización abarca un campo mucho más amplio. La optimización en la práctica consistiría en lo siguiente. Supongamos que queremos hacer un sistema para operar en el futuro del ibex-35 y que nuestro sistema sólo tiene un parámetro, que es una media móvil simple, ¿qué periodo escogemos para dicho indicador?, podríamos elegir uno de forma arbitraria o podríamos optimizar esta media simple, para que, por ejemplo, entre los valores 1 y 100 y con saltos de 1 unidad, seleccione el parámetro que ha obtenido los mejores resultados en la serie histórica de precios.
¿Es necesaria la optimización en el desarrollo de un sistema de trading?
Desde que los ordenadores irrumpieron en nuestras vidas, se ha utilizado la optimización para el desarrollo de sistemas y se ha establecido un debate que aún hoy continúa, sobre la validez de dicho proceso. La controversia se centra en que la distribución de precios del pasado no supone ninguna garantía de la curva de precios futura y por lo tanto cualquier proceso de optimización será inútil, ya que los parámetros de nuestro sistema se ajustarán (fitting) a la distribución de precios del pasado y como la distribución pasada no influye el desarrollo de la distribución futura, los resultados de la optimización nunca serán extrapolables a los resultados futuros de nuestro sistema.
Normalmente, aquellos que se acercan a esta postura, confían su operativa a métodos como las ondas de Elliot, las técnicas de Gann o el Chartismo. Irónicamente, estos mismos traders que enfatizan los peligros de la optimización , también usan una forma de testear los resultados de sus técnicas sobre los gráficos pasados, de esta forma observan los gráficos pasados y revisan su metodología, de esta forma generan confianza en su operativa futura y esto no es muy diferente del proceso típico de optimización , salvo que de esta forma probamos nuestro sistema de forma subjetiva, mediante un vistazo a los gráficos pasados. Si usted está buscando un método para invertir o especular en el mercado, ¿preferirá unas reglas que han funcionado en el pasado o por el contrario utilizará unas reglas que no sabe con seguridad si funcionaron en años anteriores? La mayoría de los detractores de la optimización , a lo que realmente temen es a la SobreOptimización, (OverOptimization o curve-fitting), éste si es un verdadero problema, y no la optimización.
El proceso de creación de un sistema de trading es un proceso de prueba y error en el que la optimización juega un papel muy importante, que no debemos subestimar. Aunque se trata de uno de los últimos pasos que debemos dar en el desarrollo de nuestro sistema, y debemos aplicar la optimización a un sistema que sea rentable en su conjunto de reglas originales como medio para buscar un mejor rendimiento del mismo, nunca debemos seguir el proceso contrario, esto es, partir de la optimización para crear nuestro sistema.
Tipología de Optimizadores según Jeffrey Owen y Donna McCormick
Optimizadores Implícitos
Son aquellos procesos en los que la optimización no se hace de forma explícita. Supongamos el trabajo de un trader que está desarrollando un sistema para aplicar a su operativa diaria, nuestro trader observa determinados comportamientos repetitivos en las cotizaciones de un producto financiero y diseña unas reglas para beneficiarse de dicho comportamiento, tras aplicar estas reglas observa que los resultados son bastante pobres por lo que decide hacer algún ajuste a su sistema, y repite este proceso, una y otra vez, hasta que llega a un conjunto de reglas cuyo resultado genera la suficiente confianza como para utilizarlo en su operativa diaria.
¿Se trata de un sistema optimizado? Parece que nuestro trader a llegado a un buen sistema sin haber optimizado sus parámetros, sin embargo, dado que hemos testado diferentes reglas y al final nos hemos quedado con la que más beneficio generaba, se trata de una optimización de facto, aunque ésta sea implícita.
Optimizadores de Fuerza Bruta o Lineales
Un optimizador lineal encuentra la mejor solución, mediante la prueba sistemática de todas las posibles soluciones. Deben verificar todas y cada una de las iteraciones definidas en el proceso de optimización , por lo que son bastante lentos. Esta lentitud puede suponer un gran problema cuando nos enfrentamos a un proceso con muchas iteraciones, lo que se denomina “explosión combinatoria”.
Supongamos que tenemos un sistema con 4 parámetros y cada uno de ellos puede tomar 50 valores, nos enfrentamos a una optimización de 6.250.000 interacciones (504). Si cada iteración se ejecuta en aproximadamente 1.64 segundos (TradeStation), nos encontramos con un periodo de optimización de 4 meses aproximadamente, que hacen a estos optimizadores totalmente inoperativos cuando nos enfrentamos a problemas con un número muy elevado de iteraciones. En estos casos debemos fijarnos en los optimizadores genéticos.
Optimizadores genéticos
Son los optimizadores más rápidos y potentes que existen, deben su nombre a que realizan un proceso evolutivo en la búsqueda de la mejor solución. Se trata de optimizadores estocásticos, ya que se benefician de un proceso de aleatoriedad en la búsqueda del óptimo. Además de la aleatoriedad, incorporan una mezcla de selección y combinatoria. La base de estos optimizadores está en los algoritmos genéticos y su principal fuerte está en la velocidad y el amplio espectro de posibles resultados que pueden cubrir.
Si abordamos el mismo problema con un optimizador lineal y con uno genético, descubriremos que el genético llegará a la solución con mayor celeridad y en muchos casos nos ofrecerá una solución mejor ya que la región a explorar no se encuentra delimitada por los incrementos que le hemos impuesto a la optimización lineal. Recordemos que en una optimización lineal, si nuestro parámetro lo definimos entre 0 y 50 con saltos de 5 en 5, en ningún caso se podrá obtener una solución que no sea múltiplo de 5.
El problema de la SobreOptimización
La Sobreoptimización o “curve-fitting”, es el resultado de una optimización excesiva, ya sea por contar con una muestra de datos insuficiente o por tener un sistema con demasiados parámetros, y en cuyo resultado nos hemos ajustado como un guante a la serie histórica de precios, por lo que la menor desviación en la distribución de precios del futuro respecto a la pasada, traerá consecuencias bastante negativas para el rendimiento de nuestro sistema. Nuestro objetivo, por lo tanto, como diseñadores de sistemas es el de minimizar los peligros de la SobreOptimización, para lo que vamos a establecer una serie de principios que debemos vigilar en nuestra fase de desarrollo de cualquier sistema de trading.
Desarrolla tu sistema en base a una idea o teoría extraída del Mercado. Debemos aplicar la lógica a nuestro conjunto de reglas y asegurarnos que dichas reglas tienen sentido. Debemos ser capaces de explicarle a cualquier persona nuestras reglas de forma sencilla y fácil de entender, así como comprender la lógica de cada uno de los indicadores con los que trabajamos.
Mantén el sistema simple. Según Charlie F. Wright, el rendimiento de un sistema es inversamente proporcional a su complejidad. Cada nuevo indicador (parámetro) que incluyamos en el modelo aumenta el riesgo de ajuste a la curva de precios “curve-fitting”, por lo que mantengamos nuestro sistema simple y con un número de parámetros reducido.
Evita realizar la optimización sobre una muestra de datos pequeña. Esta es una condición indispensable. Si la muestra analizada no es significativa, los resultados extraídos nunca se podrán aplicar al universo total de datos, se trata de una regla de sentido común, cuanto más extensa sea nuestra base de datos, mayor probabilidad de éxito tendremos, además, tendremos que incluir en la muestra las tres grandes clasificaciones del mercado, a saber, mercado alcista, bajista y lateral. Si nuestro sistema sólo se ha optimizado en un periodo bajista, cuando llegue un periodo alcista, nuestro sistema nos generará pérdidas.
Aseguraté que el sistema funciona, en un conjunto de acciones, futuros o commodities. Deberíamos sospechar de un sistema que funcione bien sólo en un producto. Si he diseñado un sistema que funciona bien con las acciones del BBVA y de Telefónica, pero que pierde mucho dinero con Repsol y Endesa, tendré más dudas sobre el futuro rendimiento de mi sistema que el caso en el que dicho sistema funcione, razonablemente bien, en estos cuatro títulos. Por lo tanto, a mayor número de pruebas con diferentes valores mayor robustez tendrá nuestro sistema. Un ejemplo de esto último estaría en el sistema ‘Aberration’ de Keith Fitschen, es un sistema multi-commoditie que utiliza los mismos parámetros para operar en diferentes mercados y productos.
Verificar los resultados mediante técnicas estadísticas y optimizaciones de prueba externa. Toda vez que hemos acabado nuestra optimización , existen métodos para evaluar la bondad de los resultados, de forma objetiva. Por un lado contamos con técnicas de inferencia estadística, que no son objeto de este artículo y por otro lado contamos con la optimización de prueba externa (Out of Sample), que consiste en optimizar sólo sobre una parte la muestra total, por ejemplo (1/3) y después aplicar el sistema con los parámetros óptimos en el resto de la muestra (2/3), para verificar el funcionamiento del sistema en un periodo no optimizado.
Verificar los resultados del sistema en un intervalo próximo al parámetro(s) optimizados(s). Vamos a ver esto mediante un ejemplo, supongamos que estamos optimizando un sistema con una media móvil exponencial y el resultado obtenido es de 23. Pero que ocurre con el resultado del sistema en un intervalo próximo, digamos de +/- 5, ¿qué resultado arroja el sistema con una media de 21 periodos? ¿y con una de 27 periodos? Si el sistema funciona bien en todo el intervalo establecido tendremos una señal de la robustez del sistema.
Si nuestro sistema tiene menos de tres parámetros podremos verificar su robustez mediante los mapas de optimización. En el siguiente apartado introduciremos esta herramienta y para más información sobre los mapas de robustez les remitimos al artículo ¿Son robustos sus resultados? de Oleg Karpushev y Konstantin Kopyrkin,
Robustez y mapas de Optimización
La Robustez de un sistema es la cualidad que nos permite esperar en el futuro un resultado similar al obtenido con los datos pasados. Un Sistema de Trading Mecánico poco robusto o inestable, es aquel que en el futuro, tras un cambio en la distribución de los precios del mercado, nos lleva a obtener unos resultados mucho peores que los obtenidos en el periodo analizado. Una forma de verificar la robustez de un sistema es mediante los mapas de optimización , que son superficies o rectas en las que se visualiza el valor que toma la variable optimizada (por ejemplo el Beneficio), en cada uno de los posibles valores de nuestro conjunto de parámetros.
A continuación veremos un ejemplo de mapa de optimización en tres y dos dimensiones, en el que en el eje Z tenemos el resultado neto y en lo ejes X e Y, tenemos el conjunto de posibles valores que toman los dos parámetros del sistema que hemos utilizamos para la explicación. A continuación, veamos algunos principios que debemos seguir en la observación de los mapas de optimización :
Cualquier pico en la superficie del mapa nos indica cierta inestabilidad y casualidad en los resultados obtenidos. De esta forma usaremos un sistema, donde el cambio de una unidad de un parámetro hace cambiar el resultado del beneficio de forma drástica, como podemos ver en la figura 1, con los tres picos que están pegados próximos al fondo del mapa.
Una superficie que descienda suavemente desde un máximo, nos indica estabilidad y por lo tanto fiabilidad de los valores que se presentan como óptimos. Esta búsqueda de mesetas en el mapa de optimización se puede hacer más objetiva mediante la medición de la pendiente de nuestro mapa en los puntos próximos a los óptimos.
Si la parte con mayor beneficio está comprendida en un espacio pequeño, aunque no se trate de un pico, puede que tanto los límites seleccionados para la optimización , como el salto entre valores para dicha optimización fueran demasiado grandes, por lo que debemos disminuir ambos para verificar la robustez de nuestro sistema.
Figura 1. Mapa de optimización en 3D de una optimización con dos parámetros, que oscilan entre 0,5 y 10. Podemos apreciar como, a medida que nos desplazamos por las diferentes posibilidades de nuestros parámetros, se crean unas montañas que constituyen el mapa de Optimización, en este ejemplo diferenciamos claramente tres picos, que son los puntos de mayor beneficio del sistema.
Figura 2. Mapa de optimización en 2D de una optimización con dos parámetros, que oscilan entre 0,5 y 10. Es el mismo mapa que en el ejemplo anterior pero ahora en dos dimensiones, distinguiendo fácilmente los tres picos mencionados en la figura anterior.
Conclusiones sobre la optimización de sistemas de trading
Como conclusión al artículo vamos a establecer unos sencillos consejos para acertar con la optimización:
- Utilice siempre pocas reglas y pocos parámetros en el desarrollo de su sistema de trading.
- Optimice los parámetros de su sistema sobre muestras grandes y representativas.
- Verifique los resultados mediante técnicas de inferencia estadística.
- Utilice una metodología de Prueba externa, sin optimizar sobre el total de la muestra, deje una parte para verificar los resultados obtenidos.