序列模式下面
按照下面的程序,测试时发现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编辑过]
我意思是,针对当前最后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值
按照今天收盘后的1分数据测试,就卡在最近那个分形那里

对啊,每一根K的datan是不一样,但对最后1k,必然是一个定值,进入最后那个循环的时候datan必然也是固定的。
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编辑过]