我想编一段程序,求出最近多少根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循环里面只要用回溯读取就行了 不要用函数计算
好像不能,您看下我发的评论,不熟悉这个新的服务平台,应该给您发回复,结果发到评论去了,结果也不能删除,也不能把同样的内容贴在这里。