以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- [求助]关于采用BARSLAST作为循环起点存在的问题 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=53619) |
-- 作者:沙隆巴斯 -- 发布时间:2013/7/4 12:41:17 -- [求助]关于采用BARSLAST作为循环起点存在的问题 序列模式下面 按照下面的程序,测试时发现i一直是等于累计,而不是按照每循环一次i值增加1 datan:=BARSLAST(FXDD=1 or FXDD=-1); aaaa:=DATACOUNT; macd4:=0; 累计:=aaaa-datan; for i=累计 to DATACOUNT DO BEGIN macd1:=macd1+macd[i]; END; 必须加入i:=i+1,修改成如下i值才会递增 datan:=BARSLAST(FXDD=1 or FXDD=-1); aaaa:=DATACOUNT; macd4:=0; 累计:=aaaa-datan; for i=累计 to DATACOUNT DO BEGIN macd1:=macd1+macd[i]; i:=i+1 END; 如果放在飞狐中编译,则直接提示“累计:=aaaa-datan;”这句有问题,编译通不过。 版主,为什么会出现这个情况? [此贴子已经被作者于2013/7/4 12:42:16编辑过]
|
-- 作者:jinzhe -- 发布时间:2013/7/4 13:23:55 -- 1,代码请帖全 2.飞狐的问题请咨询飞狐的相关工作人员 |
-- 作者:沙隆巴斯 -- 发布时间:2013/7/4 15:09:18 -- 我意思是,针对当前最后1k,BARSLAST获取的不应该是一个常数吗?代入到循环里,是什么原因导致i值固定不变。 拿飞狐过来对比,主要是指出同样是BARSLAST导致这个循环不能执行。 源代码太长了, 用这两句代替吧 P:=26;S:=12;M:=9 DIFF := EMA(CLOSE,S) - EMA(CLOSE,P); DEA := EMA(DIFF,M); MACD := 2*(DIFF-DEA), COLORSTICK; xx:=(ref(h,2)<ref(h,1) and ref(h,1)>h) or (ref(l,2)>ref(l,1) and ref(l,1)<l); datan:=BARSLAST(xx=1); aaaa:=DATACOUNT; macd1:=0; 累计:=aaaa-datan;//飞狐提示这句有问题 for i=累计 to DATACOUNT DO//金字塔在这句i不会自动累加,除非在循环内加上i:=i+1这句 BEGIN macd1:=macd1+macd[i]; //i:=i+1 END; 最终问题原因指向datan:=BARSLAST(xx=1);这句赋值 大意,就是找出前面最近一个成立的分形,计算该分形到目前的macd值 |
-- 作者:沙隆巴斯 -- 发布时间:2013/7/4 15:14:40 -- 按照今天收盘后的1分数据测试,就卡在最近那个分形那里 |
-- 作者:沙隆巴斯 -- 发布时间:2013/7/4 15:17:01 -- |
-- 作者:jinzhe -- 发布时间:2013/7/4 15:35:03 -- 每根k线的datan都不一样啊,这个怎么能固定的 |
-- 作者:沙隆巴斯 -- 发布时间:2013/7/4 15:50:19 -- 对啊,每一根K的datan是不一样,但对最后1k,必然是一个定值,进入最后那个循环的时候datan必然也是固定的。 |
-- 作者:沙隆巴斯 -- 发布时间:2013/7/4 17:32:31 -- 搞不明白,为什么必须得加i:=i+1才能累加出如下效果 |
-- 作者:王锋 -- 发布时间:2013/7/4 22:17:37 -- P:=26;S:=12;M:=9 你目前代码在于将一个序列变量赋值到FOR循环中,飞狐自然提示无效,而金字塔由于编译时未对此情况做处理故会出现问题,你可以加上CONST强制变为常数,下个金字塔升级版会针对此情况对变量进行强制转换。 [此贴子已经被作者于2013/7/4 22:19:11编辑过]
|
-- 作者:沙隆巴斯 -- 发布时间:2013/7/5 22:06:17 -- 原来如此,谢谢指导 |