这样试下,但是要把你这里的自行加入的滑点去掉,否则回溯你自己计算的盈亏不是很方便,直接用NUMPROFIT好实现算法:
[PEL] 复制代码 INPUT:NMIN(10,1,100,1),手数(1,1,100,1),滑点数(1,1,100,1);
VARIABLE:SMP:=0;
HD1:=HOLDING;
//系统代码举例(可更换其他系统)
ma5:=MA(c,5);
ma10:=MA(C,10);
ma30:=MA(c,30);
//交易条件
开多条件:=CROSS(ma5,ma30)and holding=0;
收盘平仓:=TIME>=CLOSETIME(0)-NMIN*100;//收盘平仓
平多条件:=(CROSS(ma5,ma10) OR 收盘平仓) and holding>0,COLORWHITE;
//交易系统
开多:BUY(开多条件 ,手数,MARKET);
平多:SELL(平多条件,手数,MARKET);
HD2:=HOLDING;
//单笔盈利计算
交易次数:sum(HOLDING<>0 AND ref(HOLDING=0,1),0);//系统自带函数不包含强平,这个包含强平
开仓价:=ENTERPRICE;
平仓价:=EXITPRICE;
开仓手续费:=GEGCHARGE(stklabel,开仓价,1,0);
平仓手续费:=GEGCHARGE(stklabel,平仓价,1,1);
最小变动价位:=MINDIFF;
合约乘数:=MULTIPLIER;
开仓滑点成本:=最小变动价位*合约乘数*滑点数;
平仓滑点成本:=最小变动价位*合约乘数*滑点数;
多单笔平利润点数:=(平仓价-开仓价);
多单笔利润:多单笔平利润点数*合约乘数-开仓手续费-平仓手续费;
IF HD1<>0 AND HD2=0 THEN
BEGIN
SMP:=SMP+多单笔利润;
X1:SMP/交易次数;//均值
sum1:=0;
FOR I=1 TO 交易次数 DO
BEGIN
P:NUMPROFIT(I);
sum1:=sum1+pow(P-X1,2);
END
END
result:SQRT(sum1/交易次数); |