Indicadores: MACD_Flat_Trend

 

MACD_Flat_Trend:

Indicador MACD Flat Trend

MACD_Flat_Trend

Autor: Scriptor

 
Es un gran indicador. No ocupa mucho espacio en el gráfico. Si pudiéramos añadirle una alerta, sería genial.
 
Quiero poner una alerta en este ( Indicador MACD Tendencia Plana ) , es esto posible? Si es posible ¿que tengo que cambiar en el codigo .mq5? si me lo dice lo hare , GRACIAS SIR
 
Quiero poner una alerta en este ( MACD Flat Trend Indicator ) , ¿es posible? Si es posible ¿que tengo que cambiar en el codigo .mq5? si me lo dice lo hare ,GRACIAS SIR
 
VIJAY JADAV MACD Flat Trend Indicator ) , ¿es posible? Si es posible ¿que tengo que cambiar en el codigo .mq5? si me lo dice lo hare ,GRACIAS SIR
//--- Расчёт индикатора
   for(int i=limit; i>=0 && !IsStopped(); i--)
     {
      BufferNL[i]=BufferDN[i]=BufferUP[i]=EMPTY_VALUE;
      if(BufferMACD[i]>0 && BufferSignal[i]<BufferMACD[i])
        {
         BufferUP[i]=0.5;
         BufferNL[i]=BufferDN[i]=EMPTY_VALUE;
         Alert("Buy ", _Symbol);
        }
      else
        {
         if(BufferMACD[i]<0 && BufferSignal[i]>BufferMACD[i])
           {
            BufferDN[i]=0.5;
            BufferNL[i]=BufferUP[i]=EMPTY_VALUE;
            Alert("Sell ", _Symbol);
           }
         else
           {
            BufferNL[i]=0.5;
            BufferDN[i]=BufferUP[i]=EMPTY_VALUE;
           }
        }
     }
 
Ryan L Johnson #:
Gracias Señor usted hizo esto para mí, pero hay un pequeño problema en esto
La modificación que has hecho mantiene el audio reproduciéndose continuamente,
Quiero una alerta tal que cuando la línea verde se inicia, debo recibir una alerta sólo en su primera vela, no debo recibir una alerta en las velas después de que
La alerta debe ser recibida sólo cuando la línea maCd y la línea de señal se cruzan, de lo contrario la alerta no debe ser recibida,
No debe haber alertas de la segunda vela de la línea verde,
GRACIAS SEÑOR

 
VIJAY JADAV #:
Gracias Señor usted hizo esto para mí, pero hay un pequeño problema en este
La modificación que has hecho mantiene el audio reproduciéndose continuamente,
Quiero una alerta tal que cuando la línea verde se inicia, debo obtener una alerta sólo en su primera vela, no debo obtener una alerta en las velas después de que
La alerta debe ser recibida sólo cuando la línea maCd y la línea de señal se cruzan, de lo contrario la alerta no debe ser recibida,
No debería recibir alertas en la segunda vela de la línea verde,
GRACIAS SEÑOR

//--- Расчёт индикатора
   int lastAlert = 0; // 0 es plano, 1 es compra, 2 es venta

   for(int i=limit; i>=0 && !IsStopped(); i--)
     {
      BufferNL[i]=BufferDN[i]=BufferUP[i]=EMPTY_VALUE;
      if(BufferMACD[i]>0 && BufferSignal[i]<BufferMACD[i])
        {
         BufferUP[i]=0.5;
         BufferNL[i]=BufferDN[i]=EMPTY_VALUE;

         if(lastAlert != 1)
           {
            Alert("Buy ", _Symbol);
            lastAlert = 1;
           }
        }
      else
        {
         if(BufferMACD[i]<0 && BufferSignal[i]>BufferMACD[i])
           {
            BufferDN[i]=0.5;
            BufferNL[i]=BufferUP[i]=EMPTY_VALUE;

            if(lastAlert != 2)
              {
               Alert("Sell ", _Symbol);
               lastAlert = 2;
              }
           }
         else
           {
            BufferNL[i]=0.5;
            BufferDN[i]=BufferUP[i]=EMPTY_VALUE;
            lastAlert = 0;
           }
        }
     }

He añadido una variable para limitar la alerta a una alerta por cruce.

 

Si sigue recibiendo alertas intrabarra, el código siguiente limita adicionalmente las alertas por la hora de apertura de la barra. Los valores históricos del buffer no se pueden usar porque tienen valores vacíos. Sólo ten en cuenta que no he compilado ni probado este código pero estoy seguro de que lo harás y volverás a publicar.😉

// poner estas 2 líneas arriba en el ámbito de las variables globales
   datetime lastOpenTime;
   ulong uLastOpenTime;

//////////////////////////////////////////////////

// pon estas 2 líneas en la función OnInit()
      lastOpenTime = 0;
      uLastOpenTime = ulong(lastOpenTime);

//////////////////////////////////////////////////

//--- Расчёт индикатора
   int lastAlert = 0; // 0 es plano, 1 es compra, 2 es venta

   for(int i=limit; i>=0 && !IsStopped(); i--)
     {
      BufferNL[i]=BufferDN[i]=BufferUP[i]=EMPTY_VALUE;
      if(BufferMACD[i]>0 && BufferSignal[i]<BufferMACD[i])
        {
         BufferUP[i]=0.5;
         BufferNL[i]=BufferDN[i]=EMPTY_VALUE;

         if(lastAlert != 1 && uLastOpenTime < ulong(iTime(_Symbol, PERIOD_CURRENT, 1))
           {
            Alert("Buy ", _Symbol);
            lastAlert = 1;
            uLastOpenTime = ulong(iTime(_Symbol, PERIOD_CURRENT, 1);
           }
        }
      else
        {
         if(BufferMACD[i]<0 && BufferSignal[i]>BufferMACD[i])
           {
            BufferDN[i]=0.5;
            BufferNL[i]=BufferUP[i]=EMPTY_VALUE;

            if(lastAlert != 2 && uLastOpenTime < ulong(iTime(_Symbol, PERIOD_CURRENT, 1))
              {
               Alert("Sell ", _Symbol);
               lastAlert = 2;
               lastOpenTime = ulong(iTime(_Symbol, PERIOD_CURRENT, 1);
              }
           }
         else
           {
            BufferNL[i]=0.5;
            BufferDN[i]=BufferUP[i]=EMPTY_VALUE;
            lastAlert = 0;
           }
        }
     }