WHILE运行结果异常

我想编一段程序,求出最近多少根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
 

 

长时间运行的策略异常
关于序列值的计算结果异常
优化后同参数策略运行结果与优化结果差异大
登录异常
MarketPosition 相同的代码不同的品种 运行结果不一样
数据中心异常
官网显示异常
在策略研究可以运行跑出结果,而模拟策略交易时却总不开仓
同一个模型在不同机子上运行结果迥异,如何解决?
A_GetOpenOrderCount()返回值异常

不能回溯GD,DD的吧,因为每来到一根bar,都要先根据我的逻辑,计算出N值,然后根据N值,才能计算出相应的GD,DD。所以这个看似简单的问题,其实有点不简单。我实在改不出来,能否麻烦老师给我改一下,谢谢!

你按照我说的试过了么?

试了,没有用。主要我这个逻辑比较独特,每一根bar都是先确定N值,然后再计算高点,低点。

在循环累加,确定N值的过程中,每累加出一个新的N值,都要重新计算一下相应的高点,低点。所以是不是只能在循环体内部赋值?

老师在吗?

你这个问题可能是序列类型常见问题,一般不建议把含有序列类型的计算放在分支及循环结构里运行

highset和lowest就是一种序列类型

具体原因可以看视频区的视频 搜索序列类型关键字

建议你换一种算法 不要把highest和lowest放在循环里

 

好的,我再试试。

建议你把gd定义成series类型 然后赋值放在while循环外面 while循环里面只要用回溯读取就行了 不要用函数计算

好像不能,您看下我发的评论,不熟悉这个新的服务平台,应该给您发回复,结果发到评论去了,结果也不能删除,也不能把同样的内容贴在这里。