公式如下,需要在while循环语句中根据i值递增循环判断,但用如下公式貌似bb数值不会变,一直是1,不会进入循环?求教,怎么写能实现类似功能。
是要用在逐K线模式下。
variable:i1=1;
value2:=(Close-llv(L, 4))/(Hhv(H, 4)-llv(L, 4)) * 100;
bb:=ref(value2,i1);
while bb<=75 and bb>=25 DO
begin
i1:=i1+1;
end;
i:i1;
x:value2;
[此贴子已经被作者于2012-7-3 0:26:02编辑过]
貌似上面在逐K线下,可以运行了,但为什么这个公式要陷入死循环,bb值不会随i值变化:Input: RISK(8);
Variable:i1=0;
value10:=3 + RISK*2 ;
x1:=67 + RISK;
x2:=33 - RISK;
value11:=value10;
value12:=BARSLAST(abs(o-ref(c,1))>= ma((h-l),10)*2);
if value12<=9 then value11:= 3;
else value11:=value10;
value13:=BARSLAST(abs(ref(c,3)-c)>= ma((h-l),10)*4.6);
if value13<=6 then value11:=4;
else value11:=value10;
value2:=(Close-llv(L, value11))/(Hhv(H, value11)-llv(L, value11)) * 100;
aa:=High+ma((h-l), 10)*0.5;
aa1:=l-ma((h-l), 10)*0.5;
bb:=ref(value2,i1);
if value2 < x2 then begin
i1:=1;
while bb>=x2 and bb<=x1 DO
begin
i1:=i1+1;
end;
end;
i:i1;
在逐k线模式里你用递增,这个软件要卡死的。运算的太多了
i1:=1;
while bb>=x2 and bb<=x1 DO
begin
i1:=i1+1;
end;
这句话肯定是有问题的,因为循环内部,你没有跳出循环的条件
版主,初看下面的语句肯定有问题,但是while判断里面的bb是等于
ref(value2,i1)的,也就死随i1值的增加,不断取前i1天的value2的值。也就是说bb的值按想法是要随i1的累加变化,实际却不变化,造成死循环。暂时没有想到解决的办法。
bb:=ref(value2,i1);
if value2 < x2 then begin
i1:=1;
while bb>=x2 and bb<=x1 DO
begin
i1:=i1+1;
end;
end;
while bb>=x2 and bb<=x1 DO
begin
i1:=i1+1;
end;
仔细看看这个代码,用单步跟踪自己看看吧。
循环内部你只对i1做了赋值,i1的变化对bb>=x2 and bb<=x1 这个条件是没有任何作用的,会直接导致在循环里无法跳出来
以下是引用王锋在2012-7-3 22:04:01的发言:
while bb>=x2 and bb<=x1 DO
begin
i1:=i1+1;
end;
仔细看看这个代码,用单步跟踪自己看看吧。
循环内部你只对i1做了赋值,i1的变化对bb>=x2 and bb<=x1 这个条件是没有任何作用的,会直接导致在循环里无法跳出来
感谢大大回复,实际我要实现的是这样的功能,但在if语句内,不能使用ref函数,请问有折中的方法没有?
while ref(value2,i1)>=x2 and ref(value2,i1)<=x1 DO
begin
i1:=i1+1;
end;