以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://www.weistock.com/bbs/list.asp?boardid=4)
----  请教老师逐k模式周期内调用数据的问题  (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=139401)

--  作者:daviwang
--  发布时间:2016/9/9 11:35:37
--  请教老师逐k模式周期内调用数据的问题
 

请教老师,我在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;

 


--  作者:jinzhe
--  发布时间:2016/9/9 13:04:18
--  

哪一句是“开盘第5分钟的价格在创新高/新低”


--  作者:daviwang
--  发布时间:2016/9/9 16:00:31
--  
这几句是: If time=010500 and (c>=h-3*MINDIFF or c<=l+3*MINDIFF )then begin; fk:=1; End;
--  作者:jinzhe
--  发布时间:2016/9/9 16:03:52
--  
因为15分钟第一根k线就是011500,所以你上面一大段在011500之前时间段的计算,都是无效的
--  作者:daviwang
--  发布时间:2016/9/9 16:25:20
--  
我用的是15分钟线,间隔1分钟轮询模式,系统不能识别开盘第5分钟的收盘价吗? 那我只能用5分钟线来做这个交易系统?
--  作者:jinzhe
--  发布时间:2016/9/9 16:37:14
--  

time反映的不是行情时间或者说本地时间,time反映的是k线时间,实际时间010000到011500这一段反映出来的time,都是011500.所以上面一堆010500 时间在15分钟k线上,是没有的。

所以用5分钟周期比较好