以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://www.weistock.com/bbs/list.asp?boardid=4) ---- [求助]循环递增取值问题求助。 (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=12748) |
-- 作者:cthlj -- 发布时间:2012/7/3 0:25:09 -- [求助]循环递增取值问题求助。 公式如下,需要在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编辑过]
|
-- 作者:cthlj -- 发布时间:2012/7/3 0:45:05 -- 貌似上面在逐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; |
-- 作者:rushtaotao -- 发布时间:2012/7/3 8:47:29 -- 在逐k线模式里你用递增,这个软件要卡死的。运算的太多了 |
-- 作者:cthlj -- 发布时间:2012/7/3 12:21:17 -- 不是这个原因,主要是这句 bb:=ref(value2,i1);中的bb在循环判断语句中调用时,不能更新i1值,造成死循环。 |
-- 作者:王锋 -- 发布时间:2012/7/3 12:32:07 -- i1:=1; while bb>=x2 and bb<=x1 DO
begin
i1:=i1+1;
end;
这句话肯定是有问题的,因为循环内部,你没有跳出循环的条件 |
-- 作者:王锋 -- 发布时间:2012/7/3 12:33:10 -- http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=332 参考问题4,里面的调试技巧,使用断点及单步跟踪来调试你的代码 |
-- 作者:cthlj -- 发布时间:2012/7/3 16:43:17 -- 版主,初看下面的语句肯定有问题,但是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; |
-- 作者:王锋 -- 发布时间: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 这个条件是没有任何作用的,会直接导致在循环里无法跳出来 |
-- 作者:cthlj -- 发布时间:2012/7/4 10:38:42 -- 以下是引用王锋在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;
|
-- 作者:just -- 发布时间:2012/7/4 10:58:31 -- 但在if语句内,不能使用ref函数的解决办法 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=130
|