mt4 rsi 超买超卖提醒不了

 

RT哪位大佬能帮忙看看以下代码那里有问题吗?第一次做这个mt4的指标不大理解这个。很简单的一个需求就是外部输入超卖超买的点,然后穿过就提示。

但是现在不提示。排查了半天不知道哪里有问题


#property indicator_separate_window

#property indicator_buffers 5

//----

#property indicator_color1 Lime

#property indicator_color2 Red

#property indicator_color3 Lime

#property indicator_color4 Red

#property indicator_color5 Gold

//----

#property indicator_level1 72

#property indicator_level2 50

#property indicator_level3 25

//----

int       BBPrd=20;

double    BBDev=2.0;

int       SBPrd=13;

int       SBATRPrd=21;

double    SBFactor=2;

int       SBShift=1;

extern int       RSIPeriod=14;

extern int       BullLevel=72;

extern int       BearLevel=25;

extern bool      AlertOn=true;

//----

double RSI[];

double DnRSI[];

double Buy[];

double Sell[];

double Squeeze[];

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int init()

  {

   IndicatorBuffers(5);

  // SetIndexStyle(0,DRAW_LINE);

   SetIndexBuffer(0,RSI);

  // SetIndexStyle(1,DRAW_LINE);

   SetIndexBuffer(1,DnRSI);

 //  SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID);

  // SetIndexArrow(2,159);

   SetIndexBuffer(2,Buy);

  // SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID);

  // SetIndexArrow(3,159);

   SetIndexBuffer(3,Sell);

  // SetIndexStyle(4,DRAW_ARROW,STYLE_SOLID);

   //SetIndexArrow(4,159);

   SetIndexBuffer(4,Squeeze);

   IndicatorShortName("RSI("+RSIPeriod+")");

   IndicatorDigits(2);

//----

   return(0);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int start()

  {

   int counted_bars=IndicatorCounted();

   int shift,limit;

   double BuyNow, BuyPrevious, SellNow, SellPrevious;

   static datetime prevtime=0;

   if (counted_bars<0) return(-1);

   if (counted_bars>0) counted_bars--;

   limit=Bars-31;

   if(counted_bars>=31) limit=Bars-counted_bars-1;

   for(shift=limit;shift>=0;shift--)

     {

      RSI[shift]=iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,shift); 

      if(RSI[shift]>=BullLevel && RSI[shift]>50)

        {

         Sell[shift]=BullLevel;

         Buy[shift]=EMPTY_VALUE;

        }

      else if( RSI[shift]<=BearLevel && RSI[shift]<50 )

        {

         Sell[shift]=EMPTY_VALUE;

         Buy[shift]=BearLevel;

        }

         

      else

        {

         Buy[shift]=EMPTY_VALUE;

         Sell[shift]=EMPTY_VALUE;

        }

     }

   if(AlertOn)

     {

      if(prevtime==Time[0])

        {

         return(0);

        }

      prevtime=Time[0];

      BuyNow=Buy[0];

      BuyPrevious=Buy[1];

      SellNow=Sell[0];

      SellPrevious=Sell[1];

      if((BuyNow ==BearLevel) && (BuyPrevious ==EMPTY_VALUE) )

        {

         Alert(Symbol(), " M", Period(), " Buy Alert");

        }

      else

         if((SellNow ==BullLevel) && (SellPrevious ==EMPTY_VALUE) )

           {

            Alert(Symbol(), " M", Period(), " Sell Alert");

           }

      IndicatorShortName("RSI("+RSIPeriod+") (Alert on)");

     }

   // ======= Alert Ends =========

   return(0);

  }

//+------------------------------------------------------------------+

 
【如何防止机器人误判】讨论代码时请使用代码表述功能
【如何防止机器人误判】讨论代码时请使用代码表述功能
  • 2023.06.13
  • www.mql5.com
大家好,我是官网版主。 官网内部有机器人辅助管理,目的是自动下架一些有误导性的内容。 内容过长,或同一个IP多次注册,容易导致机器人误判,而被无辜删帖。 如果您被无故删帖,我们对这种体验感到万分抱歉。 为了防止机器人误判,请在讨论代码的时候使用代码表述功能。(如图) 感谢您的配合...