我有两种方式引用日线数据:方式一:
variable:ld_open[]:=0,ld_high[]:=0,ld_low[]:=0,ld_close[]:=0,ld_mid[]:=0,od_close[]:=0,ld_cr[]:=0;
//ld:last_day(上日),od:old_day(前日)
if todaybar=1 then begin
ld_open:=callstock('',vtopen,6,-1);//昨开
ld_high:=callstock('',vthigh,6,-1);//昨高
ld_low:=callstock('',vtlow,6,-1);//昨低
ld_close:=callstock('',vtclose,6,-1);//昨收
ld_mid:=(ld_open+ld_high+ld_low+ld_close)/4;//昨中
od_close:=callstock('',vtclose,6,-2);//前收
ld_cr:=abs(ld_close/od_close-1)*100;
end
方式二:
先弄好一个叫STK_INFO的公式,公式内容:
OPEN0:OPEN,NODRAW;
HIGH0:HIGH,NODRAW;
LOW0:LOW,NODRAW;
CLOSE0:CLOSE,NODRAW;
VOL0:VOL,NODRAW;
AMOUNT0:AMOUNT,NODRAW;
OPENINT0:OPENINT,NODRAW;
ZCLOSE:REF(CLOSE,1),NODRAW;
然后在另一个公式里引用stk_info的数据:
variable:ld_open[]:=0,ld_high[]:=0,ld_low[]:=0,ld_close[]:=0,ld_mid[]:=0,od_close[]:=0,ld_cr[]:=0;//ld:last_day(上日),od:old_day(前日)
high0:="STK_INFO.high0##day";
low0:="STK_INFO.low0##day";
open0:="STK_INFO.open0##day";
close0:="STK_INFO.close0##day";
zclose:="STK_INFO.zclose##day";
if todaybar=1 then begin
ld_open:=open0;//昨开
ld_high:=high0;//昨高
ld_low:=low0;//昨低
ld_close:=close0;//昨收
ld_mid:=(ld_open+ld_high+ld_low+ld_close)/4;//昨中
od_close:=zclose;//前收
ld_cr:=abs(ld_close/od_close-1)*100;
end
结果显示:
方式一在运行时,因为callstock的原因,ld_cr数组的数据在前2天没有数据,而方式二有数据。
请问:
方式一和方式二,那种方式的效率更高?
谢谢!
close作为序列变量,本身就是数组。你方式一,又将其定义数组,多此一举。
跨周期引用建议你直接用函数callstock。或者通过引用符号。如 "$CLOSE##DAY"
[此贴子已经被作者于2020/6/1 13:08:48编辑过]
好的,谢谢!
之前尝试过"$CLOSE##DAY"但是好像没数据,刚才又试了一下,有数据,那就确实没有必要弄个STK_INFO的公式了。
给日线数据建数组的目的是为了方便计算。