Indicadores: MACD_Flat_Trend

 

MACD_Flat_Trend:

Indicador MACD Flat Trend (tendência lateral)

MACD_Flat_Trend

Autor: Scriptor

 
É um ótimo indicador. Ele não ocupa muito espaço no gráfico. Se pudéssemos adicionar um alerta a ele, seria ótimo.
 
Quero definir um alerta nesse indicador (MACD Flat Trend Indicator), isso é possível? Se for possível, o que devo alterar no código .mq5? Se me disser, farei isso, OBRIGADO SENHOR
 
Quero definir um alerta nesse indicador ( MACD Flat Trend Indicator), isso é possível? Se for possível, o que devo alterar no código .mq5? Se me disser, farei isso, OBRIGADO, SENHOR
 
VIJAY JADAV MACD Flat Trend Indicator), isso é possível? Se for possível, o que devo alterar no código .mq5? Se me disser, farei isso, OBRIGADO, SENHOR
//--- Расчёт индикатора
   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 #:
Obrigado, senhor, você fez isso para mim, mas há um pequeno problema
A modificação que você fez mantém o áudio sendo reproduzido continuamente,
Quero um alerta tal que, quando a linha verde começar, eu receba um alerta apenas em sua primeira vela, e não receba um alerta nas velas depois disso.
O alerta deve ser recebido somente quando a linha principal e a linha de sinal se cruzarem; caso contrário, o alerta não deve ser recebido,
Não deve haver alertas a partir do segundo candle da linha verde,
OBRIGADO SENHOR

 
VIJAY JADAV #:
Obrigado, senhor, você fez isso para mim, mas há um pequeno problema
A modificação que você fez mantém a reprodução contínua do áudio,
Quero um alerta tal que, quando a linha verde começar, eu receba um alerta apenas em sua primeira vela, e não receba um alerta nas velas posteriores
O alerta deve ser recebido somente quando a linha principal e a linha de sinal se cruzarem; caso contrário, o alerta não deve ser recebido,
Não deve haver alertas a partir do segundo candle da linha verde,
OBRIGADO SENHOR

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

   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;
           }
        }
     }

Adicionei uma variável para limitar o alerta a um alerta por crossover.

 

Se você ainda estiver recebendo alertas intrabarras, o código abaixo limita adicionalmente os alertas por tempo de abertura da barra. Os valores históricos do buffer não podem ser usados porque têm valores vazios. Esteja ciente de que não compilei nem testei esse código, mas tenho certeza de que você o fará e postará novamente.

// coloque essas duas linhas no topo do escopo das variáveis globais
   datetime lastOpenTime;
   ulong uLastOpenTime;

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

// coloque essas duas linhas na função OnInit()
      lastOpenTime = 0;
      uLastOpenTime = ulong(lastOpenTime);

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

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

   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;
           }
        }
     }