日内交易之开盘区间突破

来自tradeStar帮助系统
跳转到: 导航, 搜索

智能交易攻略(3)-日内交易之开盘区间突破

作者:仁心慧能


日内交易常用的一类策略是开盘区间突破,它与前例的通道突破策略相似,其基本公式是:

   //-------智能交易公式--------------
   //例3_1 开盘区间突破策略
   //用于分钟线周期
   {策略:
   1.当日开盘价加减指定价差形成区间
   2.突破区间高点做多,跌破区间低点做空
   3.当天仅做多1次,做空1次
   4.日内交易,收盘前清仓
   }
   input:                                       
     Rng(10),        //区间范围
     EndTime(1400);  //下午14:00以后不开仓
   RngH: OpenD(0) + Rng;
   RngL: OpenD(0) - Rng;
   if Time < EndTime*100 then begin
     if EntriesToday(Date,MP_LONG)<1 then
       Buy(' ', 2, RngH, -1, OT_STOP);
     if ExitsToday(Date,MP_SHORT)<1 then
       SellShort(' ', 2, RngL, -1, OT_STOP);
   end;
   SetExitOnClose;
   {
   注解:
   1.OpenD(0)返回当日开盘价,这套函数在日内交易时方便常用;
   2.EntriesToday(Date,MP_LONG)取得当天多头开仓次数,MP_LONG 是值为1的宏;
   3.ExitsToday (Date,MP_SHORT)取得当天空头平仓次数,MP_SHORT 是值为-1的宏;
   4.SetExitOnClose用于在收市时清仓,历史测评时以收盘价作为平仓价,自动交易时在收市前若干秒平仓,
   可在【策略设置】中设置,默认在收市前60秒清仓。
   }

Kpqjtp1.gif


如图所示,该策略以当日开盘价加减由Rng参数指定的范围,形成一个区间,当价格突破区间时进场交易,收盘时清仓不过夜。


上例的区间范围Rng是个常数,不能适应市场变动,所以Rng通常用各种算法得到,例如,

著名的Dual Thrust系统曾长期在交易系统排行榜名列三甲,其原始公式应用于日线周期,不太能如实反映日内波动,

我们把它改造为应用于分钟周期的策略:

   //-------智能交易公式--------------
   //例3_2 Dual Thrust日内策略
   //用于1分钟-15分钟周期
   {策略:
   1.根据前几日的波动范围动态调整开盘区间
   2.突破区间高点做多,跌破区间低点做空
   3.可选是否持仓过夜
   }
   input:
     K1(0.5),K2(0.5),Mday(1),Nday(1),
     ExitOnClose(1);
   variable:
     BarsPerDay(48), BuyRange(1000), SellRange(1000);
   if BarPos = 1 then begin  //只需计算1次
     switch DataPeriod begin   //沪深300股指期货日周期数
       case 1: BarsPerDay:=270; //1分钟周期数/每日
       case 2: BarsPerDay:=54;  //5分钟周期数/每日
       case 3: BarsPerDay:=18;  //15分钟周期数/每日
     end
   end
   Bars:= Mday*BarsPerDay;
   MHH := HHV(H,Bars)[1];
   MHC := HHV(C,Bars)[1];
   MLL := LLV(L,Bars)[1];
   MLC := LLV(C,Bars)[1];
   Bars:= Nday*BarsPerDay;
   NHH := HHV(H,Bars)[1];
   NHC := HHV(C,Bars)[1];
   NLL := LLV(L,Bars)[1];
   NLC := LLV(C,Bars)[1];
   
   if Date <> Date[1] then begin  //新交易日开始,计算区间范围
     BuyRange := Max(MHH - MLC, MHC - MLL);
     SellRange := Max(NHH - NLC, NHC - NLL);
   end
   RngH: OpenD(0) + K1*BuyRange;
   RngL: OpenD(0) - K2*SellRange;
   
   if SessionLastBar = 0 then begin
     Buy(' ', DEFAULT, RngH, -1, OT_STOP,OB_NEXTBAR);
     SellShort(' ', DEFAULT, RngL, -1, OT_STOP,OB_NEXTBAR);
   end
   if ExitOnClose then SetExitOnClose;
   {  
   注解:
   1.用不同的参数分别设置买卖区间的幅度
   2.BarsPerDay为1天的K线数量,只需在第1根K线时计算1次
     用switch语句根据周期类型赋值,公式中是股指期货的每日周期数量
   3.HHV(H,Bars)[1]表示取用前一周期的指标值
     可以把之前的:=改为:进行调试
   4.SessionLastBar函数用于判断是否是当日最后一个周期
   5.外部参数ExitOnClose控制是否做日内交易或持仓过夜
   }

如图所示:

Kpqjtp2.gif

可见,在同一时间段,本例的区间与上例相比较是动态变化的,各位可以修改公式参数看看运行结果。

在实际交易中,分批开平仓是常用的技巧,如何实现呢?


且听下回分解!

个人工具
名字空间

变换
操作
导航
工具箱