外汇EA
这段RSI的代码怎么读呀?
回复:0  浏览:320
  • 楼主admin 圈主
  • 2019-05-05 07:39
int start()
    {
     int    i,counted_bars=IndicatorCounted();
     double rel,negative,positive;
     if(Bars=RSIPeriod) i=Bars-counted_bars-1;</strong>
     //--这句意思:如果已加载的K线为大于等于RSIPeriod时(已加载的K线已经超过RSIPeriod数时),i的值等于Bars-counted_bars-1.    请教:这句是否跟前面两句" i+Bars-RSIPeriod-1"重复了?是不是可以不需要这句呀,因为前一句时i已经=Bars-RSIPeriod-1了嘛。另外,这里的counted_bars它是会自动往后计算的么,它的值是会自动变化的么?
     while(i>=0)
       {
        double sumn=0.0,sump=0.0;
        if(i==Bars-RSIPeriod-1)
          {
           int k=Bars-2;
            while(k>=i)
             {
              rel=Close[k]-Close[k+1];
              if(rel>0) sump+=rel;
              else      sumn-=rel;
              k--;
             }
           positive=sump/RSIPeriod;
           negative=sumn/RSIPeriod;
          }
            //这一段,到这里我都还能理解。意思为计算当i==Bars-RSIPeriod-1的情况下,第i这条K线的positive和negative的值的情况。当执行完K=i之后,累计所有以计算额度值,并跳出循环。
              ?
疑问:这里的i并没有出现i++或者i--的情况,那也就是说这个循环就只是计算从k=bars-2一直到k=i时,第 i根k线的positive和negative数据(此时i==Bars-RSIPeriod-1)。也就是说,这个循环只能得到当i>RSIPeriod时的第一根K线(i==Bars-RSIPeriod-1)的数据了?
        else      //接下来这段我就完全不明白了,这里esle对应上面的if语句应为if(i==Bars-RSIPeriod-1),我这里不明白在什么情况下 会出现  i 不等于  !==Bars-RSIPeriod-1 的情况?(因为这里并没有出现i++或者i--之类的情况,i的值怎么会变呢?)
         {
           rel=Close-Close[i+1];
           if(rel>0) sump=rel;
           else      sumn=-rel;
           positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
           negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;
          }
        PosBuffer=positive;
        NegBuffer=negative;
        if(negative==0.0) RSIBuffer=0.0;
        else RSIBuffer=100.0-100.0/(1+positive/negative);
        i--;
       }
  //----
     return(0);
    }
  
  
       我是个新手,还在学习当中,这礼拜下班后连续的看了bull老大的教学视频,今天正好看到第12课,刚好讲到如何解读RSI指标这一课,课后复习我发现对这些代码解读不到位,几经考虑还是决定发上来,请教各前辈。希望最好能把 counted_bars和 if  else循环这两个部分能彻底弄清楚是怎么运作的。
  谢谢了。