矩形未绘制看涨吞没形态

Rectangle is not drawing the bullish engulfing pattern

我编写了以下代码来查看最后 100 个烛台并围绕看涨吞没烛台模式绘制一个矩形。我希望也将其扩展为看跌吞没形态。我不知道为什么,但矩形不绘制。请看下面的代码

bool isBullishEngulfing(int current)  {

   if((iClose(_Symbol,0,current) > iOpen(_Symbol,0,current)) && (iClose(_Symbol,0,current + 1) < iOpen(_Symbol,0,current + 1))  && 
      (iOpen(_Symbol,0,current) < iClose(_Symbol,0,current + 1)) && (iClose(_Symbol,0,current) > iOpen(_Symbol,0,current + 1)))
         return true;
      return false;         

}

void showRectangles() {

   for (int i=100;i<=1;i--)   {
      if(isBullishEngulfing(i)) {

        drawBullRectangle(i,iHigh(_Symbol,0,i),iLow(_Symbol,0,i));
    }
   }
}

bool drawBullRectangle(int candleInt,const double top,const double bottom)
{
    const datetime starts=iTime(_Symbol,0,candleInt); 
    const datetime ends=starts+PeriodSeconds()*Numbars; //Numbars shows how long the rectangle should draw
    const string name=prefix+"_"+(candleInt>0?"DEMAND":"SUPPLY")+"_"+TimeToString(starts);

    if(!ObjectCreate(0,name,OBJ_RECTANGLE,0,0,0,0,0))
    {
        printf("%i %s: failed to create %s. error=%d",__LINE__,__FILE__,name,_LastError);
        return false;
    }
    ObjectSetInteger(0,name,OBJPROP_TIME1,starts);
    ObjectSetInteger(0,name,OBJPROP_TIME2,ends);
    ObjectSetDouble(0,name,OBJPROP_PRICE1,top);
    ObjectSetDouble(0,name,OBJPROP_PRICE2,bottom);

    ObjectSetInteger(0,name,OBJPROP_COLOR, clrAqua);

   ObjectSetInteger(0,name,OBJPROP_STYLE, STYLE_SOLID);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);

   ObjectSetInteger(0,name,OBJPROP_FILL, true);

    return true;
}

void OnDeinit(const int reason){ObjectsDeleteAll(0,prefix);}
void OnTick()
{
    if(!isNewBar())
        return;     //not necessary but waste of time to check every second


    showRectangles();
}

bool isNewBar()
{
   static datetime lastbar;
   datetime curbar = (datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
   if(lastbar != curbar)
   {
      lastbar = curbar;
      return true;
   }
   return false;
}

如果能帮助解决这个问题,我将不胜感激。

错误主要在循环,应该是for (int i=100;i>=1;i--)

另一个"possible"错误在isBullishEngulfing()函数的逻辑中。

通常,前一根柱线的收盘价等于当前柱线的开盘价,因此以下条件不满足(大部分时间)

iOpen(_Symbol,0,current) < iClose(_Symbol,0,current + 1)

(所以,我建议删除这一行,但这只是一个建议,请注意,有时您的条件也会得到满足)