//求助:可以开仓,但平不了仓。不知道哪里出了问题。附图 //代码如下: ma5:ma(c,5); ma10:ma(c,10); ma20:ma(c,20); CONDX:=CROSS(C,ma5); CONDY:=CROSS(C,ma10); CONDZ:=CROSS(C,ma20); VARIABLE:mark[3]:=0;//长度为3的数组,记录三个数值表示3个条件是否开过仓 maxHd:=X1+X2+X3;//最大持仓数量 //1.上穿均线分别开仓 if CONDX and holding<maxHd and mark[1]=0 then //条件X begin buy(1,X1,market); mark[1]:=1; //记录某个条件是否开过仓了 end if CONDY and holding<maxHd and mark[2]=0 then //条件Y begin buy(1,X2,market); mark[2]:=1; end if CONDZ and holding<maxHd and mark[3]=0 then //条件Z begin buy(1,X3,market); mark[3]:=1; end //2.平仓 //2.1 单一持仓情况平仓 //2.1.1 单一持仓情况平仓1 if cross(ma5,c) and holding=X1 and mark[1]=1 and mark[2]=0 and mark[3]=0 then begin sell(1,X1,market); mark[1]:=0; //记录某个条件是否开过仓了 end //2.1.2 单一持仓情况平仓2 if cross(ma10,c) and holding=X2 and mark[2]=1 and mark[1]=0 and mark[3]=0 then begin SELL(1,X2,market); mark[2]:=0; end //2.1.3 单一持仓情况平仓3 if cross(ma20,c) and holding=X3 and mark[3]=1 and mark[1]=0 and mark[2]=0 then begin SELL(1,X3,market); mark[3]:=0; end //2.2 两个持仓情况的平仓 //2.2.1 两个持仓情况的平仓1 if cross(ma5,c) and holding=X1+X2 and mark[1]=1 and mark[2]=1 and mark[3]=0 then begin sell(1,X1+X2,market); mark[1]:=0; mark[2]:=0; end //2.2.2 两个持仓情况的平仓2 if cross(ma10,c) and holding=X2+X3 and mark[1]=0 and mark[2]=1 and mark[3]=1 then begin sell(1,X2+X3,market); mark[2]:=0; mark[3]:=0; end //2.3 三个持仓情况的平仓 if cross(ma5,c) and holding=X1+X2+X3 and mark[1]=1 and mark[2]=1 and mark[3]=1 then begin sell(1,X1+X2+X3,market); mark[1]:=0; mark[2]:=0; mark[3]:=0; end if holding=0 then begin mark[1]:=0;//平仓后 mark里的记录重置,这一步很重要必不可少 mark[2]:=0; mark[3]:=0; end 持仓手数:holding,nodraw;
|