Últimamente nos encontramos
con buen número de clientes y potenciales clientes que se acercan a nosotros
diciéndonos que han desarrollado un sistema automático de trading, o que están
en el proceso de hacerlo.
Hace unos días, hablando
con uno de ellos, me acordé de un artículo que había publicado nuestro
colaborador José Ramón Díaz Serrano y decidí “rescatarlo” para facilitar al cliente una
serie de conceptos que entendía que le podían ser útiles.
Hoy lo reproducimos aquí.
Espero que tenga también utilidad para vosotros.
LA OPTIMIZACIÓN DE LOS SISTEMAS AUTOMÁTICOS DE TRADING
Cuando desarrollamos un
sistema automático de trading lo que pretendemos es encontrar una ineficiencia
en el mercado que podamos seguir explotando en el futuro. El mercado tiende a
corregir sus ineficiencias con el tiempo, por lo que lo normal será que el fallo
del mercado del que queremos aprovecharnos no sea eterno y por eso es muy
importante intentar desarrollar sistemas simples, con pocos parámetros.
¿Por qué pocos parámetros?
Supongamos que estamos
desarrollando un sistema con las siguientes reglas:
- Compramos si el precio
supera hacia arriba el máximo de los “N” últimos periodos.
- Vendemos si el precio rompe
hacia abajo el mínimo de los “N” últimos periodos.
Este “N” se considera un
parámetro del sistema y dependiendo de su valor, el sistema hará unas operaciones
u otras. Tras programar la idea original, el desarrollador piensa que sería
mejor establecer un número distinto de periodos para las compras que para las
ventas. Es decir, se modifican las reglas del sistema por estas otras:
- Compramos si el precio
supera hacia arriba el máximo de los “N” últimos periodos.
- Vendemos si el precio rompe
hacia abajo el mínimo de los “M” últimos periodos.
Vamos a llamar a este
sistema, “Sistema Ejemplo”. Como vemos, ahora ya tenemos dos parámetros, “N” y
“M”. Y así, el desarrollador podría seguir incorporando reglas a su sistema y
con cada regla añadir un nuevo parámetro. Añadir parámetros es un arma de doble
filo ya que por un lado conseguimos corregir “errores” del sistema y así
obtenemos mejores resultados en datos históricos/simulación, pero por otro lado
es más complicado que el mercado en el futuro repita los mismos errores y a
mayor número de parámetros existe un mayor riesgo de sobreoptimización del
sistema.
¿En qué consiste la optimización
de un sistema automático de trading?
Una vez que tenemos
definidas las reglas del sistema procedemos a optimizar el mismo. La
optimización consiste en determinar que combinación de valores de los
parámetros son los que maximizan una determinada función objetivo, durante un periodo
de tiempo determinado. Siguiendo con nuestro sistema de ejemplo, si la función
objetivo fuese la ganancia neta (descontadas comisiones), la optimización
consistiría en determinar que combinación de valores de los parámetros “N” y
“M” maximizan la ganancia del sistema en un periodo de tiempo determinado.
El hecho de conseguir unos
buenos resultados de nuestro sistema durante el proceso de optimización del
mismo no significa que el sistema sea bueno sin más y vaya a ganar dinero en el
futuro. La optimización lo único que nos dice es qué juego de parámetros
maximiza una determinada función en datos pasados, pero no tiene ningún
carácter predictivo.
¿Para qué sirve entonces la
optimización? Fundamentalmente para determinar el potencial del sistema en el futuro,
aplicando siempre que sea posible exhaustivos análisis de prueba externa (Walk
Forward Optimization o WFO).
¿En qué consiste la Optimización en
Prueba Externa o WFO?
En la optimización en
prueba externa lo que hacemos es optimizar el sistema en un conjunto de datos
históricos determinados y aplicar los parámetros optimizados a otros conjuntos
de datos que no habían sido tenidos en cuenta en nuestra optimización inicial.
De esta manera enfrentamos los juegos de parámetros óptimos a datos de mercado
futuro y así podemos analizar si el sistema es capaz de ganar dinero a futuro,
siendo nuestras estadísticas mucho más reales que las obtenidas por la mera
optimización del conjunto de datos global.
Veamos un caso práctico,
utilizando nuestro “Sistema Ejemplo”. Lo vamos a aplicar al futuro del DAX, en
datos diarios y en la optimización buscamos maximizar la función “Ganancia
Neta”.
Primero optimizamos todo el
periodo (desde 01/01/2001 hasta el 31/03/2013) y estos son los resultados que
obtenemos:
La línea verde se ha
incluido intencionadamente, para mostrar en el gráfico donde comienza el año
2011. Como vemos desde la línea verde hacia la derecha (periodo que va desde
enero 2011 hasta marzo 2013) la gráfica de resultados sigue siendo creciente y el
sistema ha seguido ganando dinero en ese periodo (unos 30 mil euros
aproximadamente). A la vista de estos resultados podemos pensar que
estamos ante un sistema ganador. No obstante, es necesario recordar que todos
estos datos son fruto de una optimización en todo el periodo, incluyendo en el
proceso de optimización el periodo enero 2011 a marzo 2013 también.
Pero veamos qué ocurre si llevamos a cabo una Optimización en Prueba
Externa. La siguiente tabla resume el estudio realizado:
En este caso
hemos optimizado un periodo de 10 años y los parámetros óptimos los hemos
aplicado al año siguiente.
Y a continuación el gráfico
de todo el periodo completo, resaltando en verde el periodo analizado en prueba
externa:
Como podemos observar, en prueba
externa el sistema es incapaz de hacernos ganar dinero. Las diferencias
respecto al gráfico que mostraba los resultados del sistema optimizado son
evidentes.
Conclusión
Si bien el hecho de que un
sistema no haya superado los análisis de prueba externa no es motivo suficiente
para decir que ese sistema no es bueno, si es cierto que con los análisis de
prueba externa conseguimos una imagen más real de lo que podemos esperar de
nuestro sistema, y sobre todo evitamos que nuestro sistema se haya simplemente
ajustado a la curva de precios histórica como consecuencia de una
sobreoptimización.
Aunque el proceso de
realización de la prueba externa puede llegar a convertirse en algo bastante
tedioso, es recomendable que realicemos este tipo de pruebas a nuestros
sistemas antes de comenzar a operar con ellos y determinar posteriormente los
capitales necesarios para la misma en función de los Análisis de Montecarlo
efectuados a la secuencia de operaciones en prueba externa.
En la práctica, los resultados en prueba externa de un sistema es como
si hubiéramos estado auditando los resultados del sistema, por lo que los
resultados en prueba externa de un sistema al que se le haya aplicado de manera
rigurosa dicha prueba externa tienen prácticamente las mismas garantías que los
de un sistema que hubiéramos estado auditando durante dicho periodo.