求助,帮忙看看这个方法的条件判断有问题,但是找不出来原因

 

主要是参考这篇文章   面向对象法建立多时间表及多货币面板 - MQL5文章  改写的指标,主要修改的是 CPriceChangeRow  这个类及文件里面的方法。有问题的是下面的代码

//+------------------------------------------------------------------
string CPriceShapeRow::CheckKShape(double kopen,double khigh,double klow,double kclose,double masm,double mabig)
   {
    string   shape;
//--- 空头趋势
    if(masm<mabig)
       {
        if(kclose>kopen && (kopen-klow)>=longshadow2*(kclose-kopen) && (kopen-klow)>=longshadow2*(khigh-kclose))
            shape="逆势超级看多";
        else
            if(kclose>kopen && (kopen-klow)>=longshadow1*(kclose-kopen)  && (kopen-klow)>=longshadow1*(khigh-kclose))
                shape="逆势看多";
            else
                if(kopen>kclose && (khigh-kopen)>=longshadow2*(kopen-kclose) && (khigh-kopen)>=longshadow2*(kclose-klow))
                    shape="顺势超级看空";
                else
                    if(kopen>kclose && (khigh-kopen)>=longshadow1*(kopen-kclose) && (khigh-kopen)>=longshadow1*(kclose-klow))
                        shape="顺势看空";
                    else
                        return "---";
       }
    else
       {
        if(kclose>kopen && (kopen-klow)>=longshadow2*(kclose-kopen) && (kopen-klow)>=longshadow2*(khigh-kclose))
            shape="顺势超级看多";
        else
            if(kclose>kopen && (kopen-klow)>=longshadow1*(kclose-kopen)  && (kopen-klow)>=longshadow1*(khigh-kclose))
                shape="顺势看多";
            else
                if(kopen>kclose && (khigh-kopen)>=longshadow2*(kopen-kclose) && (khigh-kopen)>=longshadow2*(kclose-klow))
                    shape="逆势超级看空";
                else
                    if(kopen>kclose && (khigh-kopen)>=longshadow1*(kopen-kclose) && (khigh-kopen)>=longshadow1*(kclose-klow))
                        shape="逆势看空";
                    else
                        return "---";
       }
    return shape;
   }

上面的方法是在下面的方法中调用的:


string CPriceShapeRow::GetValue(string symbol,ENUM_TIMEFRAMES tf)
   {
    double smallvalue[1];
    double bigvalue[1];
    double close[2];
    double open[2];
    double high[2];
    double low[2];

//--- 获取 MA 指标句柄
    int handle_small=GetSmallHandle(symbol,tf);
    int handle_big=GetBigHandle(symbol,tf);

    if(handle_small==INVALID_HANDLE || handle_big==INVALID_HANDLE)
        return("err");

//--- 取最后 MA 数值
    if(CopyBuffer(handle_small,0,1,1,smallvalue)<0)
        return("-");
    if(CopyBuffer(handle_big,0,1,1,bigvalue)<0)
        return("-");
//--- 取最近收线的2个柱线的开盘价、收盘价、最高价、最低价
    if(CopyClose(symbol, tf,1, 2, close) < 0)
        return("-");
    if(CopyOpen(symbol, tf, 1, 2, open) < 0)
        return("-");
    if(CopyHigh(symbol, tf, 1, 2, high) <0)
        return("-");
    if(CopyLow(symbol, tf, 1, 2, low) < 0)
        return("-");

//--- 是否吞没,即阴包阳;阳包阴
    if(ishape==2)
       {
        if(CheckTunm(open[1],close[1],high[1],low[1],open[0],close[0],high[0],low[0],smallvalue[0],bigvalue[0]))
            return("Yes");
        else
            return("No");
       }
//--- 是否顺势Pinbar
    else
        if(ishape==1)
           {
            return (CheckKShape(open[1],high[1],low[1],close[1],smallvalue[0],bigvalue[0]));
           }
        else
           {
            //---检查当前条件: small<big  死叉;small>big  金叉
            if(smallvalue[0]<bigvalue[0])
                return("死叉");
            else
                return("金叉");
           }
   }


显示出来的结果是下图:



第一段代码中的这个CheckKShape方法里面的条件判断有问题,但是找不到原因,求助大神帮忙看看

面向对象法建立多时间表及多货币面板
面向对象法建立多时间表及多货币面板
  • www.mql5.com
本文讲述如何利用面向对象编程创建 MetaTrader 5 多时间表与多货币面板。主要目标在于建立一个可用于显示多种不同类型数据(比如价格、价格变动、指标值或自定义买/卖条件)、且无需修改面板本身代码的通用面板。