问题写在下面了,原程序比较复杂,套用了系统策略,尽量简化了,问题性质一样,但是找不出原因
求解答
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,15);
//交易条件
pk:=CROSS(MA1,MA2);//开多平空条件
pd:=CROSS(MA2,MA1);//开空平多条件
kd:=pk;
kk:=pd;
//交易系统
//VARIABLE:ss0=0;
bddw:=0.05;//mindiff,linethick0;
chsh:=1000;
date1:=1160721;
bardate1:barslast(date=date1),linethick0;
bzj:=c*chsh*0.07;
bj:=200000;
VARIABLE:hdto=0;
VARIABLE:hd0=0;
VARIABLE:hdk=0;
u00:hdto,linethick0;//如果下面红色的语句存在,全局变量hdto,读不出数
//u11:hd0,linethick0;
hdz:=(hd0+hdK)*chsh;
hdto:=hdto+hdz;
//u01:hdz,linethick0;
//u12:hdto,linethick0;
at:asset-hdto,linethick0;//减去累计的可能并不存在的盈利
setc:at-ref(at,bardate1),NOAXIS;
hd0:=0;hdk:=0;
hh0:= holding;
ss:=floor((bj+setc)/bzj);
手数:=ss;
xs0:=bddw*12;
if pk and hh0<0 then begin
平空:SELLSHORT(PK,holding,limitr,C-xs0),IGNORECHECKPRICE;
hd0:=xs0*abs(hh0);//统计可能不存在的盈利(用于回归Asset在thisclose状态下的数值)
// u1:lycs,linethick0; }
end
// u0:lycs,linethick0;
if pd and hh0>0 then begin
平多:SELL(PD,holding,LIMITR,c+xs0),IGNORECHECKPRICE;
hd0:=xs0*abs(hh0);
//u2:lycs ,linethick0;
end
// u3:lycs,linethick0;
if date=1160722 then 手数:=1;
//if date>=date1 then begin
开多:BUY(KD and 手数>0 and state<1,手数,limit,C-xs0),IGNORECHECKPRICE;
hd0:=hd0+xs0*abs(手数);//这是问题由头,如果把这句和下面红色的语句去掉,一切正常,加了,就不行
// u4:lycs,linethick0;
开空:BUYSHORT(KK and 手数>0 and state>-1 , 手数,limit,C+xs0),IGNORECHECKPRICE;
hd0:=hd0+xs0*abs(手数);
HH:=HOLDING;
明白问题所在了,谢谢