分享

十大经典日内策略之RangeBreak(附源码分享)

 乌商汇富 2021-01-27
朱淋靖老师曾指出十种日内趋势跟踪的交易方法,其中RangeBreak为他提及的第一个策略。该策略是波动区间突破策略,其中range(波动区间)主要由昨日的最高和最低价格之差决定,这个比例作为参数,可由个人或者行情决定。获得range后,再利用今天的开盘价格,即可构造今天的交易的上下通道。
      LZ选择的通道为:上轨=今日开盘价+0.25*range;下轨=今日开盘价-0.25*range。与其他突破类策略一样,价格突破上轨做多,价格突破下轨做空。(当然,你也可以选择进行反趋势交易)
      而出场条件同样由上下轨决定,多头出场条件为:价格下跌上轨-0.25*range;空头出场条件为:价格上穿下轨+0.25*range。如果不能主动出场,那么在收盘前,也会进行强制平仓操作。下为源代码:
  1. %-------------------------------------------------------主体函数------------------------------------------------%
  2. function RangeBreak(freq)%

  3. targetList = traderGetTargetList();
  4. %获取目标资产信息
  5. HandleList = traderGetHandleList();
  6. %获取账户句柄
  7. global state;
  8. for k=1:length(targetList);
  9.    
  10.     %--------------------仓位、K线、当前bar的提取-----------------------------%
  11.     %获取当前仓位
  12.     [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code);
  13.     %策略中每次取数据的长度
  14.     lags=40;
  15.     dlags=31;
  16.     barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code);
  17.     %数据长度限制
  18.     if(barnum<lags)
  19.         continue;
  20.     end
  21.     %获取K线数据
  22.     [time,open,high,low,close,volume,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq, 0-lags, 0,false,'FWard');
  23.     [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'day',1, 0-dlags, 0,false,'FWard');
  24.     if length(close)<lags || length(Dclose)<dlags
  25.         continue;
  26.     end;
  27.     %设置交易时间-----------%
  28.     gettime=datevec(time);
  29.     numtime=gettime(end,4)*100+gettime(end,5);
  30.     cont=0;
  31.     if numtime>=0900&&numtime<1400||numtime>=2100&&numtime<=2400||numtime>0000&&numtime<0100
  32.         cont=1;
  33.     end
  34.     %--------------------- 止损/入场条件计算 ------------------------------------%
  35.     range=Dhigh(end-1)-Dlow(end-1);%昨日震荡幅度
  36.     upline=Dopen(end)+0.25*range;%今日上轨
  37.     dnline=Dopen(end)-0.25*range;%今日下轨
  38.     buycon=close(end)>upline &&cont; % 突破range上轨道做多
  39.     sellshortcon=close(end)<dnline && cont; % 突破 range下轨道做空
  40.     buycon0=close(end)<upline-0.25*range;
  41.     sellcon0=close(end)>dnline+0.25*range;
  42.     shareNum=10;%交易手数的设置
  43.     %--------------------------------------仓位操作-----------------%
  44.     if cont~=0
  45.         if  marketposition==0
  46.             if buycon
  47.                 traderBuy(HandleList(1),targetList(k).Market,targetList(k).Code,shareNum,0,'market','buy');%开多单
  48.             elseif sellshortcon
  49.                 traderSellShort(HandleList(1),targetList(k).Market,targetList(k).Code,shareNum,0,'market','sellshort');%开空单
  50.             end
  51.         end
  52.         
  53.         if  marketposition>0 && buycon0
  54.             traderSell(HandleList(1),targetList(k).Market,targetList(k).Code,shareNum,0,'market','sell');%平多单
  55.         end
  56.         
  57.         if  marketposition<0 && sellcon0
  58.             traderBuyToCover(HandleList(1),targetList(k).Market,targetList(k).Code,shareNum,0,'market','buytocover');%平空单
  59.         end
  60.     end
  61.     if cont==0
  62.         traderPositionTo(HandleList(1),targetList(k).Market,targetList(k).Code,0 ,0,'market','out');
  63.     end
  64. end
  65. end

  66. function ATRValue=ATR(High,Low,Close,Length)
  67. ATRValue=zeros(length(High),1);
  68. TRValue=zeros(length(High),1);
  69. TRValue(2:end)=max([High(2:end)-Low(2:end) abs(High(2:end)-Close(1:end-1)) abs(Low(2:end)-Close(1:end-1))],[],2);
  70. ATRValue=MA(TRValue,Length);
  71. end

  72. function MAValue=MA(Price,Length)
  73. MAValue=zeros(length(Price),1);
  74. for i=Length:length(Price)
  75.     MAValue(i)=sum(Price(i-Length+1:i))/Length;
  76. end
  77. MAValue(1:Length-1)=Price(1:Length-1);
  78. end
  79. %--------------------------------------------------------------------------分割线,下面是另一个.m文件---------------------%
  80. %策略回测函数
  81. clear
  82. clc;
  83. %-----------获取targetList-----------------%

  84. targetList(1).Market = 'CFFEX';
  85. targetList(1).Code = 'IF0000';
  86. targetList=targetList(1);
  87. %指定交易频率
  88. freq=3;

  89. %-----------------------回测----------------------------------%
  90. % 在回测时设置初始资本10000000000元、手续费率0.000026、无风险利率0.02、滑价0、默认1下一个bar的开盘价、默认0成交价、默认0直接成交
  91. % traderSetBacktest(1000000,0.000026,0.02,0,1,0,0);
  92. AccountList(1) = {'FutureBackReplay'};
  93. traderRunBacktest('rangebreak',@RangeBreak,{freq},AccountList,targetList,'min',freq,20150101,20160815,'FWard');
复制代码
策略的相关表现:
利润靠前的交易资料:
收益率靠前的交易资料
多头&空头&权益曲线的表现
多头表现
空头表现
权益曲线
2016-11-10 15:06:22 上传
下载附件 (83.1 KB)
权益曲线

策略绩效表现:
策略绩效指标表现
策略绩效分析





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多