以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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
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=CONST(累计) to DATACOUNT DO//金字塔在这句i不会自动累加,除非在循环内加上i:=i+1这句
     BEGIN
           macd1:=macd1+macd[i];
           //i:=i+1
     END;

你目前代码在于将一个序列变量赋值到FOR循环中,飞狐自然提示无效,而金字塔由于编译时未对此情况做处理故会出现问题,你可以加上CONST强制变为常数,下个金字塔升级版会针对此情况对变量进行强制转换。

[此贴子已经被作者于2013/7/4 22:19:11编辑过]

--  作者:沙隆巴斯
--  发布时间:2013/7/5 22:06:17
--  
 原来如此,谢谢指导