指标: MACD_Flat_Trend

 

MACD_Flat_Trend:

MACD 横盘趋势指标

MACD_Flat_Trend

作者: Scriptor

 
这是一个很好的指标。它在图表上不占空间。如果能给它添加一个警报,那就更好了。
 
我想在这个(MACD 平滑趋势指标)中设置警报,可以吗?如果可以,我需要在 .mq5 代码中做哪些修改?
 
我想在这个(MACD 平滑趋势指标)中设置警报,这可能吗?如果可以,我需要在 .mq5 代码中做哪些修改?
 
VIJAY JADAV MACD 平滑趋势指标)中设置警报,这可能吗?如果可以,我需要在 .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 #:
谢谢你,先生,你帮我完成了这项工作,但其中有一个小问题
您所做的修改使音频持续播放、
我想要这样的警报:当绿线开始时,我应该只在第一根蜡烛上收到警报,之后的蜡烛不应该收到警报
只有当最高价线和信号线交叉时才会收到警报,否则不会收到警报、
绿线的第二根蜡烛不应发出警报、
谢谢您,先生

 
VIJAY JADAV #:
谢谢你,先生,你帮我完成了这项工作,但其中有一个小问题
您所做的修改会使音频持续播放、
我想要这样一个警报:当绿线开始时,我应该只在其第一根蜡烛上收到警报,而不应该在其后的蜡烛上收到警报。
只有当最高价线和信号线交叉时才会收到警报,否则不会收到警报、
绿线的第二根蜡烛不应发出警报、
谢谢您,先生

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

我添加了一个变量,将警报限制为每次交叉一个警报。

 

如果您仍然收到栏内警报,下面的代码会根据栏打开时间 额外限制警报。不能使用历史缓冲区值,因为它们是空值。请注意,我还没有编译或测试过这段代码,但我相信你会做完后再发回。

// 将这两行放在全局变量作用域的最上面
   datetime lastOpenTime;
   ulong uLastOpenTime;

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

// 将这两行放在 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;
           }
        }
     }