请教老师,我在15分钟线运行交易系统,运行模式为逐k模式,其中有一个开仓条件为开盘第5分钟的价格在创新高/新低,回测没有发生交易。没有发生交易的原因是不是开盘第5分钟的价格在创新高/新低在15分钟周期没办法被程序识别?在历史回测时是否不能用固定轮询模式?应该如何解决?
附:程序代码
逐k模式,轮循模式(1分钟间隔),15分钟线
//参数
Input:n1(15,5,50,1);
Input: 每手交易数量(5,1,10000);
//变量准备
M15:=ma(c,n1);
M15a:=ref(ma(c,n1),1);
M15b:=ref(ma(c,n1),2);
C1:=ref(c,1);
C2:=ref(2,1);
H2:=ref( hhv(h,2),1);
L2:= ref(llv(l,2),1);
N:=2*MA(TR,n1);
Cm15:= cross(c,m15);
M15c:= cross(m15,c);
How:= INTPART( CASH(0)*0.01/n/每手交易数量);
//申明变量
Variable:fk=0;
//第一根线
If time=010500 and (c>=h-3*MINDIFF or c<=l+3*MINDIFF )then begin;
fk:=1;
End;
//开仓
If time>010500 and time<011500 then begin;
1k开多条件:=holding=0 and fk=1 and m15a> 0.999*M15b and o>H2 and ((o>= C1*1.002 and o<= C1*1.015) or (o< C1*1.002 and c>1.003* C1 and o<= C1*1.015) or Cm15=1);
1k开空条件:=holding=0 and fk=1 and m15a< 1.001*M15b and o<l2 and ((o<= C1*0.998 and o<= C1*0.985) or (o> C1*0.998 and c<0.997* C1 and o>= C1*0.985) or M15c=1);
Buy(1k开多条件,how,market);
buyshort(1k开空条件,how,market);
End;
//止损
多仓止损条件:= c< ENTERPRICE*0.996 or c<2/3*n or cross(m15,c);
空仓止损条件:= c> ENTERPRICE*1.004 or c>2/3*n or cross(c,m15);
If holding<>0 and BARSLAST(holding<>0)=0 then begin;
Sell(多仓止损条件,0,market);
Sellshort(空仓止损条件,0,market);
End;
//止盈
多仓止盈条件:=(isdown=1 and c/c1<0.998 and c1/c2<0.998) or(c/c2<0.995) or M15c=1;
空仓止盈条件:= (isup=1 and c/c1>1.002 and c1/c2>1.002) or(c/c2>1.005) or Cm15=1;
If holding<>0 then begin;
Sell(多仓止盈条件,0,market);
Sellshort(空仓止盈条件,0,market);
End;
If time>011500 then fk:=0;
//收盘前平仓
If time=185700 and holding<>0 then begin;
Sell(1,0,market);
Sellshort(1,0,market);
End;
哪一句是“开盘第5分钟的价格在创新高/新低”
time反映的不是行情时间或者说本地时间,time反映的是k线时间,实际时间010000到011500这一段反映出来的time,都是011500.所以上面一堆010500 时间在15分钟k线上,是没有的。
所以用5分钟周期比较好