Descargar MetaTrader 5

Un ayudante para el trader basado en un análisis MACD ampliado

6 enero 2016, 10:02
Genkov
0
185

Introducción

El histograma de MACD es uno de los mejores indicadores de tendencia del precio. Como indica el Dr. A. Elder, la tendencia del precio queda determinada por las dos últimas barras del periodo de tiempo en cuestión. Sin embargo, cuando utilizamos esas dos barras no podemos decir nada más. Aunque claro, un trader con experiencia analizando histogramas será capaz de ver un poco más allá gracias a su imaginación e intuición. Bien, si tomamos las tres últimas barras para hacer nuestro análisis, la información que obtendremos mejorará considerablemente tanto en cantidad como en calidad.

El algoritmo de nuestro script compara las diferencias entre los incrementos de las barras cero, primera y segunda del histograma MACD.. Por ejemplo, si la diferencia de las barras anterior y actual supera la diferencia existente entre la barra anterior y la precedente, entonces la tendencia es alcista y tiene una aceleración positiva. Si la diferencia es menor, significa que el crecimiento de la tendencia se ralentiza (tendencia amortiguada), y debería pensar en cerrar su posición larga.

Una mirada rápida a la secuencia de comandos:

El script se puede utilizar por lo menos en dos direcciones.

En primer lugar, sirve como ayudante de trading porque puede definir los puntos de entrada y salida del mercado, y toma decisiones sobre la cantidad de lotes empleados (volumen) en las posiciones, así como la dirección y la aceleración positiva o negativa del volumen del histograma.

En segundo lugar, también sirve para analizar los datos históricos. Cuando adjunte el script al gráfico aparecerá la ventana de propiedades donde puede especificar (cambiar) el número de barras iniciales y el marco temporal. Si utiliza el script para hacer trading en tiempo real, debe establecer el número de barras iniciales a cero (la barra actual más reciente) o a uno (como desee el usuario), y también tiene que especificar el marco temporal que desee para abrir o mantener posiciones.

//+------------------------------------------------------------------+
//|                                                 TrendMACD v5.mq4 |
//| Análisis del histograma MACD en las tres últimas barras   Genkov |
//|                                                     genkov@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Genkov"
#property link      "genkov@bk.ru"
// si comenta las líneas siguientes, la ventana de propiedades no se mostrará
#property show_inputs   
extern int a = 0;            // aquí puede especificar la barra inicial
//extern int period = 1;     //  1 minuto 
//extern int period = 5;     //  5 minutos 
//extern int period = 15;    // 15 minutos 
extern int period = 30;      //  30 minutos
//extern int period = 60;    // marco temporal
//extern int period = 240;   // 4 horas
//extern int period = 1440;  // día
//extern int period = 10080; // semana
//extern int period = 43200; // mes
//+------------------------------------------------------------------+

La variable principal 'a' es para el número inicial de barras y la variable global 'period' es para los marcos temporales. La variable interna para hacer los cálculos y las comparaciones se define después de lanzar la función:

int start()
  {
    int b,c;
    b=a+1; c=b+1;
//----
double Macd_h1_a= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,a);
double Macd_h1_b= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,b);
double Macd_h1_c= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,c);

Ponga aquí el operador Print() para controlar visualmente los cálculos, esto puede ser útil para analizar eventos pasados (en el historial). El multiplicador "*1000" sirve para facilitar la lectura de los resultados obtenidos. Puede utilizar cualquier otro valor.

Print("   Macd_h1_c= ",Macd_h1_c*1000,"   Macd_h1_b= ",
          Macd_h1_b*1000,"   Macd_h1_a= ",Macd_h1_a*1000);

Si desea desactivar las alertas sustituya el uno por el cero en el operador "int Message = 1;". Del mismo modo, para visualizar la información, comente los operadores "int Message = 1;" y "Message == 1;" y sustituya todos los operadores Alert() con operadores Print(), entonces podrá ver la información en la pestaña "Asesores Expertos" del terminal cliente.

El programa brinda la posibilidad de calcular el tiempo de operación del script con la función GetTickCount(). Con este objetivo, escriba el siguiente operador al principio del programa:

int start=GetTickCount();
//…
//…, y al final del programa:
Alert("   Tiempo de cálculo  ", GetTickCount()-start," milisegundo"); 

El código principal del script está formado por bloques que comparan los estados, la posición y el tamaño de los ratios de las diferencias de los valores del histograma en las barras analizadas.

Se analizan los posibles estados transitorios (situaciones). Por ejemplo:



En total, hay 6 bloques de comparación: los bloques 1-2 para MACD debajo el eje:

// ----------------------MACD debajo del eje-------------------------1--&
  if(Macd_h1_c<0.0&&Macd_h1_a<0.0&&Macd_h1_a<0.0) 
   {
     // incremento de la barra "0" en relación con la primera
     double r1=MathAbs(MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b));
     // incremento de la barra "1" en relación a la "2" 
     double r2=MathAbs(MathAbs(Macd_h1_b)-MathAbs(Macd_h1_c));
// -- MACD está debajo - la tendencia es bajista
   if(Macd_h1_c>Macd_h1_b&&Macd_h1_b>Macd_h1_a)
    {
     if(r1>r2) 
     {
     Alert("En la barra ",a," MACD<0 = ",Macd_h1_a,
           "  La tendencia es bajista con aceleración");
     }
    if(r1<r2) 
     {
     Alert("En la barra ",a," MACD<0 = ",Macd_h1_a,
           "  La tendencia es bajista con retraso");
     }
    if((r1==r2)||MathAbs(r1-r2)<0.000015)
     {
     Alert("En la barra ",a," MACD<0 = ",Macd_h1_a,
           "  La tendencia es bajista con aceleración constante");
     }
    }
// -- MACD está debajo - la tendencia es alcista
   if(Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
    if(r1>r2) 
     {
     Alert("En la barra ",a," MACD<0 =",Macd_h1_a,
           "  La tendencia es alcista con aceleración");
     }
    if(r1<r2) 
     {
     Alert("En la barra ",a," MACD<0 = ",Macd_h1_a,
           "  La tendencia es alcista con retraso");
     }
    if((r1==r2)||MathAbs(r1-r2)<0.000015)
     {
     Alert("En la barra ",a," MACD<0 = ",Macd_h1_a,
           "  La tendencia es alcista con aceleración constante");
     }
    }
// --- MACD está debajo - la tendencia se invierte hacia abajo    
   if(Macd_h1_c<Macd_h1_b&&Macd_h1_b>Macd_h1_a)
    {
    if(r1>r2) 
     {
     Alert("En la barra ",a," MACD<0 = ",Macd_h1_a,
           "  La tendencia se invierte hacia abajo con aceleración");
     }
    if(r1<r2)
     {
     Alert("En la barra ",a," MACD<0 = ",Macd_h1_a,
           "  La tendencia se invierte hacia abajo con retraso");
     }
    }
// --- MACD está debajo - la tendencia se invierte hacia arriba
   if(Macd_h1_c>Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
    if(r1>r2)
     {
     Alert("En la barra ",a," MACD<0 = ",Macd_h1_a,
           "  La tendencia se invierte hacia arriba con aceleración");
     }
     if(r1<r2) 
     {
     Alert("En la barra ",a," MACD<0 = ",Macd_h1_a,
           "  La tendencia se invierte hacia arriba con retraso");
     }
    }
   if(MathAbs(MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b))<0.0002 && 
      MathAbs(MathAbs(Macd_h1_c)-MathAbs(Macd_h1_b))<0.0002)
    {
    Alert("En la barra ",a,", es plano! dentro del rango de:  ",Macd_h1_c,
          "   ",Macd_h1_b,"   ",Macd_h1_a);
    }
   }

El bloque 2-3 es muy parecido: MACD por arriba del eje (ver los archivos adjuntos).

El bloque 3-4 es para cruzar el eje por arriba:

// ------------cruce del eje por arriba------------------3--&
   if(Macd_h1_c<0.0 && Macd_h1_b<0.0 && Macd_h1_a>0&&  // c<0 b<0
      Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)  
    {
     r1=MathAbs(Macd_h1_a)+MathAbs(Macd_h1_b);
     r2=MathAbs(Macd_h1_c)-MathAbs(Macd_h1_b);
    if(MathAbs(r1)>MathAbs(r2))
     {
     Alert("En la barra ",a," la tendencia cruza el eje por arriba con aceleración ");
     }
    if(MathAbs(r1)<MathAbs(r2))
     {
     Alert("En la barra ",a," la tendencia cruza el eje por arriba con retraso ");
     }
    }
//---     
   if(Macd_h1_c<0.0 && Macd_h1_b>0.0 && Macd_h1_a>0&&  // b>0 a>0
      Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
     r1=MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b);
     r2=MathAbs(Macd_h1_c)+MathAbs(Macd_h1_b);
    if(MathAbs(r1)>MathAbs(r2))
     {
     Alert("En la barra ",a," la tendencia cruza el eje por arriba con aceleración");
     }
    if(MathAbs(r1)<MathAbs(r2))
     {
     Alert("En la barra ",a," la tendencia cruza el eje por arriba con retraso");
     }
    }

De igual modo, el bloque 4-5 se utiliza para cruzar el eje por debajo (ver los archivos adjuntos).

El bloque 5-6 gestiona la inversión de la tendencia por debajo del eje, y el bloque 6-7 lo hace por encima del eje. Estos bloques están comentados y son de utilidad para aquellos/as que quieran analizar los datos históricos (ver los archivos adjuntos).


Este es un ejemplo del script trabajando sobre el historial:





Si desea utilizar el script para hacer trading, la cabecera tiene que tener este aspecto:

//+------------------------------------------------------------------+
//|                                                 TrendMACD v6.mq4 |
//|     para hacer trading                                           |
//+------------------------------------------------------------------+
 
#property copyright "Genkov"
#property link      "genkov@bk.ru"
extern int a = 0;      // especifique aquí la barra inicial
extern int period = 30;       // establezca aquí el valor de periodo
//+------------------------------------------------------------------+
int start()
  { 
   int b,c; b=a+1; c=b+1;
//----
  double Macd_h1_a= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,a);
  double Macd_h1_b= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,b);
  double Macd_h1_c= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,c);
…
….

Los otros bloques de comparación son los mismos que los de la versión básica.

A continuación se muestra un ejemplo del script para hacer trading:





¡Obsérvese que los valores de las variables 'a' y 'period' se tienen que establecer antes de comenzar el script! En la versión de trading, es más razonable establecer la barra inicial a uno, puesto que la barra cero puede estar incompleta cuando se están solicitando datos, por ejemplo, al principio o a la mitad de un período.

En conclusión, espero que este script sirva de ayuda tanto a los traders principiantes como a los más experimentados, y que la cantidad de errores disminuya por lo menos un 10 por ciento. ¡Feliz trading a todo el mundo!

Traducción del ruso hecha por MetaQuotes Software Corp.
Artículo original: https://www.mql5.com/ru/articles/1519

Archivos adjuntos |
TrendMACD_v5.mq4 (11.36 KB)
TrendMACD_v6.mq4 (9.63 KB)
MetaTrader 5 - ¡Más de lo que puedas imaginar! MetaTrader 5 - ¡Más de lo que puedas imaginar!

El terminal de cliente de MetaTrader 5 ha sido desarrollado desde cero y mejora con creces a su predecesor. La nueva plataforma ofrece oportunidades ilimitadas para operar en cualquier mercado financiero. Además, se ha ampliado su funcionalidad para ofrecer aún más características y facilidad de uso. Todo ello hace que sea muy difícil la enumeración de todas las ventajas de MetaTrader 5. Hemos intentado describir brevemente todas estas ventajas en un único artículo y nos ha sorprendido ver que el resultado ¡no ha sido nada breve!

Aumente la velocidad de los cálculos con la red en la nube de MQL5 Aumente la velocidad de los cálculos con la red en la nube de MQL5

¿Cuántos procesadores tiene tu ordenador? ¿Cuántos ordenadores puedes usar para optimizar una estrategia de trading? Aquí mostraremos cómo usar la red en la nube de MQL5 para acelerar los cálculos recibiendo la capacidad de procesamiento a través de la red mundial con solo el clic de un ratón. La frase "el tiempo es dinero" se hace más evidente aun con el paso de los años, y no podemos permitirnos esperar para realisar cálculos importantes durante decenas de horas o incluso días.

Trabajando con cestas de parejas de divisas en el mercado fórex Trabajando con cestas de parejas de divisas en el mercado fórex

En el artículo se analizan cuestiones relacionadas con la división en grupos de las parejas de divisas, las cestas; también sobre cómo obtener datos sobre el estado de estas cestas (por ejemplo, sobrecompra o sobreventa); qué indicadores pueden proporcionar estos datos; y al fin, sobre cómo se puede aplicar la información obtenida en el trading práctico.

Red neuronal profunda con Stacked RBM. Auto-aprendizaje, auto-control Red neuronal profunda con Stacked RBM. Auto-aprendizaje, auto-control

El artículo es la continuación de artículos anteriores sobre neuroredes profundas y elección de predictores. En este veremos las particularidades de una neurored iniciada con Stacked RBM, así como su implementación en el paquete "darch".