Cómo estructurar la creación de un EA. El SPA35 como ejemplo

Cómo estructurar la creación de un EA. El SPA35 como ejemplo

Los seguidores de Metatrader se convierten en incondicionales desde el momento en que descubren la posibilidad de automatizar sus estrategias. Y eso es lo que se va a tratar en este artículo, el diseño de Expert Advisors, tal y como se conoce a los robots o sistemas automáticos de trading en la comunidad de Metatrader, plataforma de inversión de X Trade Brokers.

En primer lugar, muchos nos encontramos con un problema de gran importancia a la hora de empezar a desarrollar un EA (Expert Advisor): “Programar nuestra estrategia”.
 
Para ello vamos a sugerir aquí algunas herramientas útiles que nos ayuden a solventar este problema, sin olvidar que lo ideal es conocer el lenguaje de programación de Metatrader, es decir, el MQL4, un lenguaje muy similiar al “C”, que para muchos ingenieros, especialmente informáticos, les resultará muy familiar. Entre otras herramientas o páginas recomendaremos el Expert Advisor Builder o la librería de Sistemas Inversores, que agilizarán el desarrollo del EA. En el primer caso, nos ayudará a plasmar nuestra estrategia en el código fuente MQL4 y en el segundo caso, utilizaremos una librería muy cómoda y segura para la cual sólo será necesario “chapurrear” MQL4 para poder diseñar exitosos sistemas automáticos de trading.
 
Dentro de esta primera fase lógicamente se encuentra estructurar mentalmente nuestra estrategia si es muy simple, o en un papel-ordenador si la estrategia es de gran complejidad con multitud de algoritmos. En nuestro caso nos basaremos en el Análisis técnico y, en concreto, en el Análisis cuantitativo o de Indicadores. Seleccionaremos el activo con el que realizar nuestro estudio, en este caso será el SPA35 en gráfico diario, es decir, será un estrategia sosegada, sin muchas operaciones pero lo más consistente posible, como veremos más adelante. La razón de seleccionar el gráfico diario es también para que el cálculo sea muy preciso, ya que una de las "carencias" de Metatrader reside en tomar como unidad mínima de medida el minuto en lugar del tick, el cual será mejor calculado cuantos más timeframes incluyamos en nuestra prueba, es decir, el mejor será el mensual, ya que por debajo tiene el semanal, el diario, el 4H, el 1H... y el 1Minuto, mientras que el más deficitario será tomar 1Minuto, reflejado en la calidad del modelado al ver el Informe en una prueba de estrategia, restando fiabilidad (en el caso de los timeframes en 1Minuto) a los resultados obtenidos por sistemas que tengan incorporados Stop Loss, Take Profit o Trailing Stop especialmente, a pesar de que la construcción de la vela que hace Metatrader es muy aproximada a la realidad.  Se puede investigar más sobre este asunto en el siguiente artículo (Pinchando aquí). El método más cómodo para descargar los históricos de un determinado timeframe o periodicidad es pinchando botón derecho en el gráfico y luego en Actualizar.
 
Como se ha dicho, basándonos en Análisis técnico y seleccionando uno de los indicadores más clásicos y una de las interpretaciones más útiles en la creación de estrategias de trading, tomaremos el MACD. La señal de compra se producirá cuando el MACD quede por encima de su signal y se cerrará dicha posición larga (y se abrirá al mismo tiempo una nueva posición corta o de venta) cuando el MACD se situé por debajo de su signal -la señal siempre se produce a cierre diario y la entrada o el cierre de la posición en la apertura de la vela (o día como es nuestro caso) siguiente-.
 
En MQL4 dicha estrategia quedaría plasmada de la siguiente forma (con la ayuda de nuestros amigos de Sistemas Inversores y de su librería (ha de copiarse en Include, dentro de la carpeta de Experts), la cual se puede solicitar a X Trade Brokers o a ellos mismos directamente):

#property copyright "PABLO"
#property link      "http://www.flash-de-bolsa.com"
// Variables que necesitamos para que funcione la librería
extern int StopLoss = 100;
extern int TakeProfit = 0;
bool DEBUG_MSG = false;
extern int Slippage = 1;
string NombreDelEA = "ExpertLibreria1";
extern int SegundosParaReintentarOperar = 20;
extern double Lots = 0.1;
extern string macd = "*** CONFIG MACD***";
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
#include <stdlibSIv1.26.mqh>
int start()
{
   int señal = getSeñal();
  
   if(ordenesTotalesEA()!=0 && señalInversa?(señal))
      cerrarPosiciones();
  
   if(ordenesTotalesEA()==0 && señal != -1){ 
      abrirPosicion(señal);
   }
}
int getSeñal()
{
   static int ultimaseñal = -1;
   int señal = -1;
   double valorGRIS
   = iCustom(Symbol(),0,"MACD",FastEMA,SlowEMA,SignalSMA,0,1);
  
   double valorROJO
   = iCustom(Symbol(),0,"MACD",FastEMA,SlowEMA,SignalSMA,1,1);
   if(valorGRIS > valorROJO) señal = OP_BUY;
   else if(valorGRIS < valorROJO) señal = OP_SELL;
  
   // Transforma la señal de continua a discreta.
   // ---------------------------------+++++++++++++++++++-------------------------- CONTINUA
   // -                                +                  -                          DISCRETA
  
   if (ultimaseñal!=señal)
   {
      ultimaseñal=señal;
   }
   else
   {
      return (-1);
   }
   return(señal);
}
 
Dicho código podría copiarse y pegarse directamente en un nuevo EA creado desde el Metaeditor, dentro de la misma plataforma Metatrader. Como se puede ver, la estrategia no es difícil en sí y lógicamente podría hacerse mucho más compleja combinando más indicadores, reduciendo el timeframe (periodicidad) o probando diferentes parámetros para el MACD y el signal (asunto que luego trataremos con la “optimización de variables”).
 
Podríamos aprovechar para recordar tres factores especialmente importantes a la hora de diseñar nuestra estrategia de trading:
 
1. El timeframe será clave para optimizar los otros dos factores. Hemos de tener en cuenta que si operamos con estrategias de velas de 1 minuto no tendrá nada que ver con estrategias de velas diarias, ya que el número de operaciones será mucho mayor cuanto menor sea el timeframe siendo a su vez más difícil diluir el efecto comisiones o spread. Por otro lado, si el sistema es rentable normalmente vendrá acompañado de un gran número de operaciones, lo que le convertiría en un sistema consistente y fiable a largo plazo con altas probabilidades de repetir los buenos resultados. Sin embargo, si el timeframe es más alto, en diario por ejemplo , el número de operaciones se reducirá y podría restar consistencia al sistema, aunque a su vez le permitirá diluir el efecto comisiones o spread al entrar y salir menos veces.
 
2. Además del timeframe, el número de indicadores combinados en nuestra estrategia también influirá considerablemente. Para lo que hay que tener claro que a mayor número de indicadores, menor número de operaciones se cruzarán al funcionar como filtros de señales falsas, y al contrario.
 
3. Por último, los parámetros de los indicadores serán fundamentales. En la mayoría de los casos, valores altos suponen una visión u operativa a más largo plazo. En definitiva, este será uno de los puntos más importantes en nuestro análisis. Dichos parámetros tienen que optimizarse para saber cuáles son los más adecuados para una combinación de indicadores y para un timeframe preestablecidos.
 
Volviendo a nuestra sencilla pero eficaz estrategia, como veremos al final del artículo, vamos a pasar al proceso de la optimización. Para lo cual abriremos la ventana de “prueba de estrategia” y rellenaremos los campos indicados, seleccionando nuestro sistema automático creado (en nuestro caso: Cruce MACD a Signal), el símbolo (SPA35), el periodo (Diario), utilizar datos (desde el 1 de enero de 2000 hasta el 1 de enero de 2010) y seleccionar la casilla de optimización, así como “Sólo precios de apertura”, ya que no necesitamos que Metatrader dedique más tiempo a perfeccionar la formación de la vela recalculando los periodos intermedios que van desde el minuto hasta la vela diaria, ya que a nosotros sólo nos interesa el precio de cierre y el de apertura, y eso es lo que precisamente recoge dicho Modelo.

 

Entrando en las Propiedades del Experto, debemos seleccionar EUR como divisa con la que el sistema operará y no seleccionar la casilla del Algoritmo genético. Aquí podríamos detenernos a comentar un par de cosas.

Primero, el periodo de estudio, ¿por qué diez años? Sencillamente porque la finalidad de este artículo no es complicar el procedimiento y porque 10 años para un sistema que opera en velas diarias es sensato. Distinto sería si el sistema operara en velas de un minuto o de 1 hora, para lo cual bastaría con analizar unos meses o unos pocos años probablemente. La dificultad residiría en buscar el equilibrio, al igual que en el caso de los tres factores mencionados anteriormente (timeframe, número de indicadores y parámetros), ya que los datos históricos más antiguos pueden no tener nada que ver con la realidad del momento y falsearnos nuestro estudio y al revés, si seleccionamos un periodo breve de información histórica puede que lo sucedido recientemente no vuelva a repetirse por la escasez de información, haciendo el sistema poco fiable. Existen algunas ideas al respecto, algunas de ellas apuntan a optimizar una serie de datos históricos que por ejemplo recojan del 1995 al 2005 y hacer backtesting individual del mejor para 2006, luego otra vez optimizar de 1996 a 2006 y realizar la prueba de estrategia del mejor en 2007 y así sucesivamente para comprobar que el periodo seleccionado es óptimo y al año siguiente los resultados son buenos. Aquí os recomiendo estas dos perlas como consejo, pinchando en la primera y pinchando en la segunda.

El segundo asunto, sería seleccionar, o no, el Algorítmo genético. Lo cual tiene sus pros y sus contras. Dicho algoritmo consiste en una serie de cálculos que Metatrader realiza para abreviar el proceso de optimización y seleccionar los mejores parámetros en un proceso de cálculo mínimo. La plataforma puede tardar casi dos horas para el proceso aquí mostrado si no se selecciona dicha casilla, frente a los dos minutos que tarda con el Algoritmo genético seleccionado. Lógicamente se consigue un ahorro importantísimo en tiempo aunque en algunas ocasiones se suprimen resultados que serían mejores de los mostrados cuando se selecciona la casilla. Podéis leer el siguiente artículo (Pinchando aquí).
 

En la siguiente pestaña habrá que seleccionar las tres variables a optimizar. La Media móvil exponencial rápida (FastEMA), la lenta (SlowEMA) y la media simple del propio MACD (SignalSMA). En todos los casos se inicia con el parámetro 1 y se avanza de 1 en 1. En los dos primeros casos Metatrader nos dirá las mejores combinaciones desde 1 a 100 y para el último caso las mejores de 1 a 75. ¿Por qué es importante no caer en la trampa de la sobreoptimización? Os recomendaría el siguiente artículo (Pinchando aquí).
 
 
Tras casi dos horas de optimización el programa nos presenta los siguientes resultados:
 

Siendo los más rentables, lo cual no significa que sean los mejores, los ubicados en la esquina inferior izquierda por debajo de la diagonal y los de la zona central hacia la izquierda por encima de la diagonal, al ser las zonas con un verde más intenso. En este caso sólo hemos comprobado las combinaciones entre la EMA rápida y la lenta, pero sería necesario comprobar también las combinaciones entre la EMA rápida y el signal, y entre la EMA lenta y el signal, ofreciéndonos información más completa para adoptar nuestra decisión de selección de las mejores variables.
 
En el siguiente cuadro tenemos los resultados de los primeros sistemas uno por uno y ordenados según la rentabilidad obtenida en el periodo analizado. Contrastando con el gráfico anterior podemos observar cómo el primero en la tabla podría ser uno de los mejores, junto con el seleccionado en azul, en la parte de abajo pero también ofreciendo unas rentabilidades de consideración. En ambos casos estarían rodeados de franjas de verde intenso, por lo que a pesar de que se produjeran ciertos cambios y mutaciones en el comportamiento del SPA35, los resultados podrían menguar en alguna medida pero podríamos seguir confiando en dichos sistemas con una seguridad envidiable, ya que si hacemos la misma prueba en otros subyacentes pocos muestran unos resultados tan claramente favorables, con un cuadro prácticamente entero de verde, exceptuando la parte inferior de la diagonal, en la que se pierde intensidad, como es lógico por otra parte y que más tarde explicaremos, basándonos en la teoría del MACD.
 

Es ahora el momento de detenerse en el análisis individual. Realizaremos dos “backtesting” o pruebas de estrategia individuales y estudiaremos los resultados obtenidos (rentabilidad, consistencia y riesgo).

Empezando por el caso marcado en azul, en el que la FastEMA es 29, la SlowEMA es 30 y el SignalSMA es 25 tenemos los siguientes resultados:
 
 

Analizando paso por paso, llagamos a una conclusión muy positiva por varias razones.


En primer lugar, se obtienen unos beneficios de más de 9.000 Euros en los 10 años de estudio, lo que supone una media de casi 1.000 Euros anuales de beneficio partiendo de los 10.000 iniciales y operando con 0.1 LOTES, cantidad que habíamos visto en el código de programación anteriormente plasmado.
 
Por otro lado, el factor de beneficio es de 1.76, es decir, que por cada Euro que perdemos ganamos 1.76 Euros. Es un factor de beneficio aceptable, aunque un objetivo bueno para marcarnos sería que rondara 2 ó 3. Aquí se podría discutir también cuál es el factor de beneficio óptimo, ya que niveles exageradamente altos pueden aparejar un número de operaciones muy pequeño, engañándonos a nosotros mismos si pensamos que el sistema es bueno, ya que para que sea consistente y, por tanto, eficaz en el futuro ha de realizar un número de operaciones razonable.

El número de operaciones que precisamente realiza nuestro sistema es de 78 en el periodo de estudio. Es decir, no llega a las 10 operaciones al año, por lo que podríamos decir que el sistema no es muy activo pero ejecuta un número de órdenes que podríamos considerar mínimamente aceptable y extrapolable al futuro sin que los resultados que se vayan a dar disten mucho de los producidos durante el periodo de estudio. Este sería otro tema objeto de debate y aquí solamente vemos para este caso concreto en velas diarias, mientras que para un sistema que, por ejemplo, operara en velas de una hora podríamos considerar un intervalo de al menos 50-100 operaciones anuales para que fuera consistente en el tiempo frente a las 6-12 que se deberían exigir para un sistema basado en velas diarias, como es nuestro caso.

La disminución relativa (el famoso "draw down") de más del -21% sería un aspecto espinoso, ya que significa que la mayor distancia entre los máximos y los mínimos que se puede apreciar en el gráfico siguiente supone unas pérdidas del -21% desde el máximo hasta el mínimo de esa máxima distancia de entre todas las estudiadas en dicho periodo. Aprovechamos para comentar que el gráfico tiene una apariencia bastante atractiva, con subidas suaves y constantes que añadirían valor a dicho sistema (a excepción de ese "draw down" que puede percibirse fácilmente).
 
 
Volviendo al informe, apreciamos también que en torno al 43% de las operaciones son ganadoras frente al 57% de las operaciones en pérdidas, lo cual no significa que el sistema pierda sino todo lo contrario. Este sería un caso claro de sistema tendencial, es decir, que se basa en buscar una tendencia de mercado (las tendencias se producen en la menor parte del tiempo) y en sufrir los periodos laterales (que son la mayoría), consiguiendo compensarse las pérdidas registradas en los rangos laterales con los momentos tendenciales, donde los beneficios son cuantiosos. Si la proporción se invirtiera normalmente supone que el sistema busca más aprovechar los rangos laterales, lo que sería una especie de scapling, en detrimento de los periodos de tendencia, ya sean alcistas o bajistas.

También hemos de considerar otro factor de riesgo (además del "draw down" visto un poco más arriba), como son las pérdidas consecutivas, produciéndose la peor racha con 9 operaciones seguidas en pérdidas y suponiendo casi -3.000 Euros de pérdidas, lo cual tiene que considerarse y muy especialmente por aquellos que tengan cuentas pequeñas. En nuestro caso, con 10.000 Euros de partida, podríamos concluir que podría merecer la pena perder en algún momento -3.000 Euros buscando casi duplicar el capital inicial en 10 años según nos muestran los resultados del sistema, o al menos esa debería ser la pregunta que debemos hacernos todos a la hora de valorar el riesgo que implica operar con un sistema automático, además de la rentabilidad y de la consistencia del mismo.

Por último, aunque se debería analizar antes incluso que el informe, deberíamos contrastar las operaciones que se han realizado, las cuales podemos ver en el siguiente cuadro, con el gráfico diario del SPA35 y el MACD correspondiente, para comprobar que el sistema está bien diseñado y confirmar que las entradas y las salidas las realiza correctamente.
 
Para profundizar en cada uno de los resultados del Informe podéis leer el siguiente artículo (Pinchando aquí).
 

Analizando el segundo caso, que consistiría en el backtesting individual para la FastEMA 9, SlowEMA 2 y SignalSMA 4, vemos que llegamos a los siguientes resultados en el Informe:
 
 
Hay diferencias significativas con el anterior que lo hacen menos atractivo, siendo las más importantes el menor factor de beneficio, aunque también influido por el alto número de operaciones realizado, lo cual lo haría más consistente aunque quizá algo menos interesante. Tanto la disminución relativa como la máxima pérdida consecutiva nos ofrecen unos niveles soportables, por lo que el riesgo que conlleva esta estrategia no parece muy alto en comparación con la rentabilidad que ofrece. La pega más importante, por tanto, ¿cuál sería? En este caso el MACD es invertido al ser la FastEMA mayor que la SlowEMA, lo cual choca con la teoría de trading con el MACD, y no es algo que podamos pasar por alto ya que lo que implica es que opera contra tendencia, lo cual es muy peligroso y arriesgado. Por otros estudios realizados en otros subyacentes y otras periodicidades lo que suele suceder es que cuando el sistema falla suele hacerlo de manera muy violenta, sin posibilidad de reoptimizar el sistema o mejorarlo para seguir aplicándolo, lo cual es algo muy negativo para valorar la fiabilidad futura de dicha estrategia o sistema.

Para finalizar, lo ideal sería probar el mismo sistema en diferentes activos para comprobar su eficacia y llegar a conclusiones sensatas, a veces fuera de los propios números, como hemos concluido en el caso anterior. “La experiencia es la madre de la ciencia” y nuestra curva de aprendizaje se disparará desde el momento en que hagamos muchos estudios de este tipo.

El objetivo debería ser llegar a una cesta de sistemas y activos descorrelacionados entre sí para disminuir el riesgo al mínimo posible y mantener las rentabilidades esperadas de todos los sistemas sumados. Esa descorrelación se consigue con diferentes activos, diferentes timeframes y diferentes combinaciones de indicadores para cada sistema. Como todo en la vida, el que parte con mayor capital también parte con ventaja sobre los demás ya que tendrá menos dificultades en aplicar dicho consejo (frente al de aumentar el volumen en un solo sistema, “no pongas todos los huevos en la misma cesta”).
 
Y por supuesto, aquí no acaba la aventura dentro del apasionante mundo de los sistemas automáticos, sino que es sólo el comienzo, ya que a partir de este momento el sistema ha de ser revisado periódicamente, preferiblemente cada año (o seis meses también por ejemplo, éste sería otro debate y objeto de estudio, que ya hemos mencionado) y reoptimizado con un estudio de diez años nuevamente, es decir, de Enero de 2001 a Enero de 2011.
 
¿Eres de los que busca obtener rentabilidades en los mercados independientemente de la dirección que tomen y con la operativa bajo control, eres de los que el trading automático se lo toma como un reto intelectual? Los sistemas suponen, sin duda, una oportunidad en los mercados, aún desconocida para muchos, y un nuevo campo donde poder destinar nuestros ahorros para cumplir con una de las premisas de todo inversor, la diversificación.
 
Puedes empezar descargando una cuenta Demo para probar la plataforma de inversión más potente del mercado y poder solicitar nuestra ayuda pinchando aquí
 
Para aprender mucho más asistiendo a nuestros cursos inscríbete gratis aquí
 
Pablo del Barrio Quintana  

X-Trade Brokers

tel: +34 915 706 705

http://www.xtb.es

  1. en respuesta a Daniel Bravo
    #2
    27/07/10 18:09

    Hola Daniel, todo tiene sus pros y sus contras. El Algoritmo genético ahorra muchísimo tiempo en las otimizaciones de sistemas, pero ofrece sólo algunos de los mejores resultados, ocultando algunos otros que podrían ser no sólo mejores, sino también más robustos y consistentes que sí podrían funcionar en el futuro, por lo cual sólo sería deseable utilizarlo cuando nuestro sistema incluye numerosas variables que para optimizarlas se necesitarían meses con el ordenador trabajando.
    Un saludo y gracias por participar!

  2. #1
    27/07/10 16:58

    El algoritmo genético es un peligro si no se sabe utilizar con cuidado ya que ofrece unos sistemas con unos parámetros que nos hubieran hecho ricos en el pasado pero que dejan de funcionar nada más comienzan a funcionar.

    Un saludo

Cookies en rankia.com

Utilizamos cookies propias y de terceros con finalidades analíticas y para mostrarte publicidad relacionada con tus preferencias a partir de tus hábitos de navegación y tu perfil. Puedes configurar o rechazar las cookies haciendo click en “Configuración de cookies”. También puedes aceptar todas las cookies pulsando el botón “Aceptar”. Para más información puedes visitar nuestra política de cookies.

Aceptar