インディケータ: MACD_Flat_Trend

 

MACD_Flat_Trend:

MACD フラットトレンドインジケータ

MACD_Flat_Trend

作者: Scriptor

 
素晴らしいインジケーターだ。チャート上でも場所を取りません。アラートを追加できれば最高です。
 
このインジケーター(MACD Flat Trend Indicator)にアラートを 設定したいのですが、可能でしょうか?もし可能であれば、.mq5コードのどこを変更すればよいのでしょうか?
 
このインジケーター(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ラインとシグナルラインがクロスしたときのみアラートを受信し、それ以外はアラートを受信しない、
グリーンラインの2本目のローソク足からアラートが出ることはないはずです、
ありがとうございます

 
VIJAY JADAV #:
ありがとうございます。でもちょっと問題があります。
あなたが行った修正では、オーディオが再生され続けています、
私は、緑色の線が始まったら、最初のローソク足だけにアラートが出るようにしたいのですが、それ以降のローソク足にはアラートが出ないようにしたいのです。
maCdラインとシグナルラインがクロスした時のみアラートを受信し、それ以外はアラートを受信しない、
グリーンラインの2本目のローソク足からはアラートが出ないはずです、
ありがとうございます

//--- Расчёт индикатора
   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;
           }
        }
     }

アラートを1回のクロスオーバーにつき1回に制限する変数を追加しました。

 

それでもバー内アラートが発生する場合は、以下のコードでバーのオープン 時間でアラートを制限してください。ヒストリカルバッファの値は空なので使えません。私はこのコードをコンパイルもテストもしていないことに注意してください。

// この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;
           }
        }
     }