欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]循环递增取值问题求助。

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有6946人关注过本帖树形打印复制链接

主题:[求助]循环递增取值问题求助。

帅哥哟,离线,有人找我吗?
cthlj
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:29 积分:115 威望:0 精华:0 注册:2011/2/21 19:58:55
[求助]循环递增取值问题求助。  发帖心情 Post By:2012/7/3 0:25:09    Post IP:114.135.13.33[显示全部帖子]

公式如下,需要在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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:29 积分:115 威望:0 精华:0 注册:2011/2/21 19:58:55
  发帖心情 Post By:2012/7/3 0:45:05    Post IP:114.135.13.33[显示全部帖子]

貌似上面在逐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;

 回到顶部
帅哥哟,离线,有人找我吗?
cthlj
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:29 积分:115 威望:0 精华:0 注册:2011/2/21 19:58:55
  发帖心情 Post By:2012/7/3 12:21:17    Post IP:114.135.13.33[显示全部帖子]

不是这个原因,主要是这句 bb:=ref(value2,i1);中的bb在循环判断语句中调用时,不能更新i1值,造成死循环。

 回到顶部
帅哥哟,离线,有人找我吗?
cthlj
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:29 积分:115 威望:0 精华:0 注册:2011/2/21 19:58:55
  发帖心情 Post By:2012/7/3 16:43:17    Post IP:58.42.31.36[显示全部帖子]

版主,初看下面的语句肯定有问题,但是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;

 回到顶部
帅哥哟,离线,有人找我吗?
cthlj
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:29 积分:115 威望:0 精华:0 注册:2011/2/21 19:58:55
  发帖心情 Post By:2012/7/4 10:38:42    Post IP:58.42.31.36[显示全部帖子]

以下是引用王锋在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;

 


 回到顶部
帅哥哟,离线,有人找我吗?
cthlj
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:29 积分:115 威望:0 精华:0 注册:2011/2/21 19:58:55
  发帖心情 Post By:2012/7/5 12:25:50    Post IP:114.135.13.33[显示全部帖子]

以下是引用just在2012-7-4 10:58:31的发言:

但在if语句内,不能使用ref函数的解决办法

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=130

 

问题是将ref函数放在if外,bb值不会变化,造成死循环!

 回到顶部