Индикаторы: MACD_Flat_Trend

 

MACD_Flat_Trend:

Индикатор MACD Flat Trend

MACD_Flat_Trend

Автор: Scriptor

 
Замичательный индикатор. Не занимаем много места на графике. Вот бы ещё к нему алерт приделать, цены бы ему небыло.
 
I want to set an alert in this ( MACD Flat Trend Indicator ) , is this possible? If this is possible then what do I have to change  in the .mq5 code? you tell me i will do it ,THANK YOU SIR
 
Я хочу установить алерт в этом индикаторе ( MACD Flat Trend Indicator), возможно ли это? Если это возможно, то что я должен изменить в коде .mq5? Если вы скажете мне, я сделаю это, СПАСИБО ВАМ, СЕРДЦЕ.
 
VIJAY JADAV MACD Flat Trend Indicator), возможно ли это? Если это возможно, то что я должен изменить в коде .mq5? Если вы скажете мне, я сделаю это, СПАСИБО ВАМ, СЕРДЦЕ.
//--- Расчёт индикатора
   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 #:
Спасибо, сэр, вы сделали это для меня, но есть небольшая проблема в этом.
Модификация, которую вы сделали, сохраняет непрерывное воспроизведение звука,
Я хочу такой алерт, чтобы при появлении зеленой линии, я получал алерт только на первой свече, на последующих свечах алерт не должен появляться
Алерт должен поступать только при пересечении maCd линии и сигнальной линии, в противном случае алерт не должен поступать,
Не должно быть никаких оповещений от второй свечи зеленой линии,
СПАСИБО, СЭР

 
VIJAY JADAV #:
Спасибо, сэр, вы сделали это для меня, но есть небольшая проблема в этом
В результате внесенных вами изменений звук воспроизводится непрерывно,
Я хочу такое оповещение, чтобы при появлении зеленой линии, я получал оповещение только на первой свече, на последующих свечах оповещение не должно появляться
Алерт должен быть получен только при пересечении maCd линии и сигнальной линии, в противном случае алерт не должен быть получен,
Не должно быть алертов от второй свечи зеленой линии,
СПАСИБО, СЭР

//--- Расчёт индикатора
   int lastAlert = 0; // 0 - плоский, 1 - купить, 2 - продать

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

Я добавил переменную, чтобы ограничить оповещения одним оповещением на пересечение.

 

Если вы все еще получаете внутрибарные оповещения, приведенный ниже код дополнительно ограничивает оповещения по времени открытия бара. Исторические значения буферов не могут быть использованы, так как они имеют пустые значения. Имейте в виду, что я не компилировал и не тестировал этот код, но я уверен, что вы сделаете это и отпишитесь снова.😉

// поместите эти 2 строки вверху в область видимости глобальных переменных
   datetime lastOpenTime;
   ulong uLastOpenTime;

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

// поместите эти 2 строки в функцию OnInit()
      lastOpenTime = 0;
      uLastOpenTime = ulong(lastOpenTime);

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

//--- Расчёт индикатора
   int lastAlert = 0; // 0 - плоский, 1 - купить, 2 - продать

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