¿Cómo no caer en las trampas de la optimización?
Shashev Sergei | 15 febrero, 2016
Sin embargo, siendo realistas, el desarrollo de una estrategia de trading rentable
es una actividad de prueba y error en la que algunas formas de optimización siempre desempeñan una función.
Siempre hay un optimizador en algún lugar si no está visible en la tabla, si no acechando en las sombras.
J. Katz, D. Mccormick. La enciclopedia de las estrategias de trading.
¿Qué es la optimización de un sistema de trading?
La creación de un sistema de trading, en primer lugar, consiste en formular las reglas para la apertura y el cierre de una posición larga o corta. Estas reglas suelen contener algunos indicadores y parámetros. Si estos cambian, la rentabilidad del sistema de trading también cambiará. La pregunta surge con mucha frecuencia: ¿Es necesario optimizar los sistemas de trading o se trata solo de adaptar el sistema a los datos históricos?
Esto tiene que ver probablemente con el hecho de que cada persona puede considerar distintos procedimientos bajo la "optimización de un sistema de trading". Por tanto, vamos a definir primero qué es la optimización.En primer lugar, podemos definir la "optimización" como la selección o creación de un sistema de trading que resolvería mejor nuestros problemas que otros sistemas. Por ejemplo, estamos buscando un sistema que lograra el mayor beneficio en el par YEN/US dólar en dicho momento. Para ello, elegiremos un sistema con unos parámetros fijos entre varios sistemas. Esta puede ser, por ejemplo, una elección hecha entre sistemas basados en distintos indicadores. Llamémosla la "optimización del primer tipo".
En segundo lugar, podemos definir la "optimización" como el hallazgo de dichos parámetros para el sistema de trading seleccionado que nos permitiría obtener los mejores resultados. Esta puede ser la selección del período para calcular el promedio o el período para calcular las estructuras estocásticas. Llamémosla la "optimización de segundo tipo".
Supongo que nadie tiene dudas sobre que los traders que crean una estrategia de trading, explícita o implícitamente, usan ambos tipos de optimización. De hecho, tan pronto como seleccionamos un sistema de trading con el que trabajar, asumimos que vamos a usar el mejor sistema de trading que tengamos. Es decir, usamos la optimización de primer tipo. No obstante, como cualquier sistema tiene algunos parámetros, intentamos buscar valores para estos parámetros de tal forma que obtengamos los mejores resultados. Esta es, obviamente, la optimización de segundo tipo. Además, es imposible separar estos dos tipos de optimización cuando se crea un sistema de trading. Por esta razón, la respuesta a la pregunta sobre si se debe usar la optimización cuando se crea un sistema de trading es clara: Debe utilizarse la optimización. Otra cuestión es cómo hacerlo. Hay varias etapas en la creación de un sistema de trading:- comenzar con la idea sobre qué hay detrás del sistema de trading;
- selección de los criterios o reglas de decisión;
- definir los parámetros del sistema;
- probar el sistema; y
- volver a las cláusulas anteriores si es necesario para realizar cambios en el sistema.
Problemas de la optimización de segundo tipo
Cuando creamos un sistema de trading automatizado, todos los desarrolladores usan la optimización de primer tipo y la de segundo tipo. La búsqueda de los criterios y reglas de decisión es una tarea para los sistemas heurísticos como las redes neuronales, los algoritmos genéticos y, por supuesto, los cerebros humanos, el sistema más potente que existe actualmente. Esta es la optimización de primer tipo, por tanto, toda la responsabilidad de esta optimización recae en los traders.La optimización de segundo tipo es la búsqueda de los mejores parámetros. Es aquí donde se surgen los problemas ya que es muy fácil adaptar los datos al historial y obtener "grandes beneficios". Por desgracia, esto solo funciona con el historial. Tal "sobreoptimización" es difícil evitarla, por lo que algunos traders empiezan a tener sensaciones negativas hacia ella. ¿Por qué?
¿Cómo puede resolverse el problema de la sobreoptimización?
¿Qué debemos hacer? No podemos renunciar a la optimización ya que omitiremos la mejor solución o una estrategia potencialmente rentable por haber encontrado parámetros erróneamente. No obstante, la sobreoptimización dará serios problemas también. Tenemos que encontrar el punto medio.Vamos a analizar la optimización matemáticamente. En general, cuando hay bastantes parámetros a optimizar, buscamos un hiperplano en el que el beneficio sea estable y cambie más o menos de igual forma cuando los parámetros se modifiquen ligeramente. En la optimización, intentamos encontrar la solución en la que los beneficios sean los mayores y que las insignificantes desviaciones de la solución óptima no den lugar a cambios bruscos en el beneficio.
Por desgracia, aún no hay un algoritmo incluido en MetaTrader que busque las soluciones óptimas por sí mismo. Uno de los algoritmos más potentes que resuelven dicho problema es KRAB. Se describe en el libro de N. Zagoruyko, Applied Methods of Data and Knowledge Analysis. Novosibirsk: Institute of Mathematics Press, 1999 (en Ruso). Sería genial si se implementara en las próximas versiones...¡Pero no todo es malo!
MetaTrader puede construir un gráfico de optimización para uno o dos parámetros a optimizar. Esto significa que proyectando los resultados de la optimización sobre un plano, en teoría, podemos encontrar la solución óptima. En otras palabras, al optimizar dos parámetros por dos encontramos la región de la mejor solución.Para tres parámetros, tendremos que repetir este procedimiento.
No obstante, para cinco parámetros, este será
Cuando optimizamos dos parámetros, obtenemos un gráfico de optimización como el siguiente:
El gráfico siguiente no es tan ambiguo. Podemos ver dos áreas que contienen máximos en este gráfico. ¿Qué debemos elegir?
Un ojo experto se dará cuenta de la región de la solución en la esquina inferior derecha ya que la zona de cuadrados colindantes muestra una caída de beneficios completamente menor que la del comienzo del gráfico. Por tanto, le recomendaría que analizara los gráficos atentamente para poner a salvo su depósito.
//+------------------------------------------------------------------+ //| SP.mq4 | //| Copyright © 2006, MetaQuotes Software Corp. | //| https://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "https://www.metaquotes.net" //---- input parameters extern int TakeProfit=50; extern int StopLoss=30; extern int RsiLen=4; extern int KLen=8; extern int Momlength=10; extern int Lots=1; extern int rsi_oversold=39; extern int stoc_oversold=29; extern int rsi_overbought=60; extern int stoc_overbought=70; extern int Mom_Sell=-2; extern int Mom_Buy=2; int expertBars; double RSIlevel; double Stoclevel; double MomLevel; double DLen=3; //+------------------------------------------------------------------+ //| returns true if a new bar has come, otherwise returns false | //+------------------------------------------------------------------+ bool isNewBar() { //---- bool res=false; if (expertBars!=Bars) { expertBars=Bars; res=true; } //---- return(res); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double price; double stop; double profit; //---- if ((isNewBar())&& (OrdersTotal()==0)&& (AccountBalance()>5000)) { RSIlevel=iRSI(NULL,0,RsiLen,PRICE_CLOSE,0); Stoclevel=iStochastic(NULL,0,KLen,DLen,3,MODE_SMA,0,MODE_MAIN,0); MomLevel=100 - iMomentum(NULL,0,Momlength,PRICE_CLOSE,0); /*if (AccountBalance()>50000) {Lots=NormalizeDouble( AccountBalance()/10000,0)-4;} else Lots=1;*/ if ((RSIlevelrsi_oversold)&&(Stoclevelstoc_oversold)&&(MomLevel>Mom_Sell)) { price=Ask; stop=NormalizeDouble(price-StopLoss*Point,Digits); profit=NormalizeDouble(price+TakeProfit*Point,Digits); OrderSend(Symbol(),OP_BUY,Lots,price,3,stop,profit,NULL,0,0,Green); //Print(AccountBalance()); } if ((RSIlevel>rsi_overbought)&&(Stoclevel>stoc_overbought)&&(MomLevelMom_Buy)) { price=Bid; stop=NormalizeDouble(price+StopLoss*Point,Digits); profit=NormalizeDouble(price-TakeProfit*Point,Digits); OrderSend(Symbol(),OP_SELL,Lots,price,3,stop,profit,NULL,0,0,Green); //Print(AccountBalance()); } } //---- return(0); } //+------------------------------------------------------------------+
Después de haberlos optimizado, obtenemos tres gráficos:
Dependencia de los beneficios de RSI y StopLoss.
Las mejores regiones son:
- Gráfico 1 – (4;5) y (3;6);
- Gráfico 2 – (80;90) y (3;6);
- Gráfico 3 – (80;90) y (4;5);
Combinándolas obtenemos la mejor solución: (5,4,80).
Debe recordarse que StopLoss tiene un mayor paso de diez en la optimización. Si es necesario, la solución obtenida puede ser analizada con un paso menor también.Conclusión
Es muy bueno, desde luego, que la saturación del color verde de una celda nos permita juzgar sobre la rentabilidad de una región. No obstante, sería aún mejor si las regiones de pérdidas estuvieran coloreadas en rojo de forma proporcional. Esto nos ayudaría a estimar la estrategia a otro nivel. De hecho, obtenemos la totalidad de la imagen tridimensional de la optimización.Por último, algunas recomendaciones para la optimización:
- La muestra de datos para la optimización debe ser representativa. Debe superar los 3 años para el marco temporal diario.
- Pruebe su estrategia fuera de la muestra de optimización: esto le permitirá estimar los parámetros seleccionados.
- No optimice demasiados parámetros al mismo tiempo, la probabilidad de adaptación al historial será demasiado alta.
- Aumente el paso para reducir el tiempo de optimización. No renunciará a la mejor región. El grupo obtenido puede ser analizado con mayor detalle posteriormente (técnica de cribado).
- No dedique horas a la optimización, mejor actualice el algoritmo del asesor experto.