我想编一段程序,求出最近多少根bar,组成的区间,其高点,低点之间的振幅,达到我设定的参数。比如近100根bar组成的区间,才能满足高低点相差5%的要求,则返回值100。编完了之后,运行出bug,在有的bar上运行结果是正确的,在大多数bar上又是不正确的。找不到原因。。。求老师指导。
代码:
Params
    Numeric FD(2);//振幅
    
        
Vars
    NumericSeries BARNO(0);//bar编号
    Numeric N(0);//bar根数
    Numeric GD(0);// 区间高点
    Numeric DD(0);// 区间低点 
    Numeric ZDF(0);//涨跌幅
    
     
Begin
//BARNO 编号:
 
      if (BarStatus==0 )   BARNO=0;  
      
      else 
              BARNO=BARNO+1;
    
  Commentary("BARNO="+Text(BARNO));
  
      
   
    While (ZDF<FD )
    
 { GD=Highest(high,N);
  
   DD=Lowest(low,N);
 
   ZDF=(GD/DD-1)*100;
   
    N=N+1;
  
     If(N>BARNO or ZDF>=FD)
    
     Break;
     
    
 }
 
      GD=Highest(high,N); 
  
      DD=Lowest(low,N);
 
      ZDF=(GD/DD-1)*100; 
   
  
      Commentary("GD="+Text(GD));
   
      Commentary("DD="+Text(DD));
   
      Commentary("ZDF="+Text(ZDF));
      
      Commentary("N="+Text(N));
     
    
End
 
不能回溯GD,DD的吧,因为每来到一根bar,都要先根据我的逻辑,计算出N值,然后根据N值,才能计算出相应的GD,DD。所以这个看似简单的问题,其实有点不简单。我实在改不出来,能否麻烦老师给我改一下,谢谢!
你按照我说的试过了么?
试了,没有用。主要我这个逻辑比较独特,每一根bar都是先确定N值,然后再计算高点,低点。
在循环累加,确定N值的过程中,每累加出一个新的N值,都要重新计算一下相应的高点,低点。所以是不是只能在循环体内部赋值?
老师在吗?
你这个问题可能是序列类型常见问题,一般不建议把含有序列类型的计算放在分支及循环结构里运行
highset和lowest就是一种序列类型
具体原因可以看视频区的视频 搜索序列类型关键字
建议你换一种算法 不要把highest和lowest放在循环里
好的,我再试试。
建议你把gd定义成series类型 然后赋值放在while循环外面 while循环里面只要用回溯读取就行了 不要用函数计算
好像不能,您看下我发的评论,不熟悉这个新的服务平台,应该给您发回复,结果发到评论去了,结果也不能删除,也不能把同样的内容贴在这里。