指标编程中容易犯的几个典型错误

楼主  收藏   举报   帖子创建时间:  2019-05-05 05:29 回复:0 关注量:170
这些小问题往往很困扰开发人员,且很难发现,现列举几个:
   1、增加Buffer以后容易忘记修改关联代码。必须时刻牢记一个Buffer的成功定义需要3个部分:
      (1) 修改指标buffer总数
          #property indicator_buffers 5
      (2) 定义buffer数组,要求double类型;
          double ExtEABuffer[];  //专门用来给EA传送信号,返回值1-4跟上面4个Buffer作用相同。
      (3) 绑定buffer到一个序列上,并设置输出形式
          SetIndexBuffer(4,ExtEABuffer);
          SetIndexStyle(4,DRAW_NONE);
    2、很多时候需要比较两个均线之间的距离为7点,很容易写成ma5-ma10>10。而正确的写法应该为ma5-ma10>10*Point
    3、容易把检查是否相等写成赋值,例如
       if(a==true)写成了if(a=true),避免的方式可以写为if(true==a),因为true是不能作为变量所赋值的,但是却可以放在==的左边。
    很多时候,我们仅需要输出2-3个bar相关的数据来进行验证编程中是否出现了错误。怎么做呢?这里有一个测试的小技巧,既控制打印的开始和结束时间来实现。
  1. ---------------------------------------------------------------------------------
  2.   int currentTime = Hour() * 100 + Minute();
  3.   int targetTime = 17*100 + 32;
  4.   int targetEndTime = 17*100 + 36;
  5.   
  6.   if(currentTime>targetTime && currentTime<targetEndTime)
  7.   {
  8.     Print("currentTime=" + DoubleToStr(Hour(), 0) +":"+DoubleToStr(Minute(),0));
  9.     Print("ma5x=" + DoubleToStr(ma5x, 4));
  10.     Print("ma10x" + DoubleToStr(ma10x, 4));
  11.     Print("ma5y=" + DoubleToStr(ma5y, 4));
  12.     Print("ma10y=" + DoubleToStr(ma10y, 4));
  13.   }
  14. ---------------------------------------------------------------------------------
打赏