请选择 进入手机版 | 继续访问电脑版
楼主: 挖矿专家
8953 20

[交易策略] 波动率突破+简单过滤 附源码 [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

威望
0
论坛币
2016 个
通用积分
5.2622
学术水平
21 点
热心指数
21 点
信用等级
21 点
经验
6055 点
帖子
403
精华
0
在线时间
151 小时
注册时间
2017-2-8
最后登录
2017-6-27

挖矿专家 发表于 2017-3-16 13:36:36 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
策略思路:

策略基本概念是基于区间突破, 当前close突破n天前的均值+m倍的标准差,就long或short。加了一个过滤器,另外收盘价在均线之上。 然后利用移动止损, n天前的ATR,滚动式的获利方式。 策略的概念其实很简单, 核心是回望窗口n天。 n不是固定值, 是实时根据当前市场的状态(波动性等等)计算的。本策略采用60分钟,每隔10分钟进行一次采样。

测试时间较长,从2011年到2017年,绩效曲线相对稳定。

回测曲线(由Auto-Trader提供回测报告):
波动率突破.png


策略代码:
function RBtry(bInit,bDayBegin,cellPar)%%% 函数说明%  上面的三个参数是一种固定结构。%  当在调用该函数如 RBtry(a1,a2,a3,a4,a5,...).所有的参数都会被赋值给cellPar,即cellPar={a1,a2,a3,a4,a5,...}%  bInit,在策略逻辑运行前为1,类似优矿等平台的initialize函数。当开始判断是否下单后,该变量为0.%  bDayBegin 在一天的第一根Bar为1,其他时刻为0%% 外部和全局参数声明,这是一个固定结构.    global g_idxKDay; % 注册日数据的index.日数据是分钟数据的合成.如在日中获取,当日的数据仅是当日已出现数据的合成,不包含之后的数据。        global g_idxKMin; %    global g_idxSignal;    global openPrice; %记录开盘价    global histExtre; %记录历史达到的极值点,用于跟踪止盈    global TLen;    N=cellPar{1};                                m=cellPar{2};    Freq = cellPar{3};    stoploss = cellPar{4};                       stopprofit = cellPar{5};                     trailinggap = cellPar{6};                                  %% 初始化回测帐户    if bInit%         traderSetParalMode(false);%默认是true,因子计算函数并行执行,速度快,不能调试,false串行执行可以设断点调试        g_idxKDay = traderRegKData('day',1);% 只有注册之后才能获取数据。分钟数据的获取方法为 traderRegKData('min',1)。后面的数字是刷新频率。        g_idxKMin = traderRegKData('min',Freq);%        TLen = length(g_idxKDay(:,1));        g_idxSignal = traderRegUserIndi(@getSignal,{g_idxKMin,N,m}); %计算因子。调用需要函数如getRange,大括号内是输入参数        openPrice = nan(1,TLen);        histExtre = nan(1,TLen);%% 交易逻辑    else        dSignal = traderGetRegUserIndi(g_idxSignal,1);        [mp,~,~]=traderGetAccountPositionV2(1,1:TLen);        % ――――――――――――――――――调仓―――――――――――――――――――        for i=1:TLen           dataDay = traderGetRegKData(g_idxKMin(i,:),1,false);           % 数据长度足够;数据非空;当日的成交价不为0;当日高低不同           if isempty(dSignal(i,:)) || isempty(dataDay) || dataDay(6,end) ==0 || dataDay(3,end)- dataDay(4,end)==0                continue;           end                       %% 记录历史达到的最大有利值               if mp(i)>0                   histExtre(i) = max(histExtre(i),dataDay(3,end));               elseif mp(i)<0                   histExtre(i) = min(histExtre(i),dataDay(4,end));               end           %%平仓,信号依次为反转平仓、止损平仓、跟踪止损平仓           %多单           closeBuy1 = mp(i)>0 && dataDay(5,end)<openPrice(i)-stoploss*dSignal(i,end);           closeBuy2 = mp(i)>0 && histExtre(i)>openPrice(i)+stopprofit*dSignal(i,end) && dataDay(5,end)<histExtre(i)-trailinggap*dSignal(i,end);           %空单           closeSell1 = mp(i)<0 && dataDay(5,end)>openPrice(i)+stoploss*dSignal(i,end);           closeSell2 = mp(i)<0 && histExtre(i)<openPrice(i)-stopprofit*dSignal(i,end) && dataDay(5,end)>histExtre(i)+trailinggap*dSignal(i,end);             if closeBuy1 + closeBuy2 + closeSell1 + closeSell2>0               traderPositionToV2(1,i,0,0,'market','close');           end                      % 开仓           amount = 2000;           if mp(i) == 0 && dSignal(i+TLen,end)>0 %&& dSignal(i+2*TLen,end)>0               traderDirectBuyV2(1,i,amount,0,'market','buy1');%开多单               openPrice(i) = dataDay(5,end);               histExtre(i) = dataDay(5,end);           elseif  mp(i) == 0 && dSignal(i+TLen,end)<0% && dSignal(i+2*TLen,end)<0               traderDirectSellV2(1,i,amount,0,'market','sell1');%开空单               openPrice(i) = dataDay(5,end);               histExtre(i) = dataDay(5,end);           end        end    end   end%% 计算因子的自定义函数function value=getSignal(cellPar,bpPFCell)%调用该函数的参数将会全部被赋给cellPar%bpPFCell为一个时间序列,标记特定的刷新时刻%%%参数声明    idxK =cellPar{1};    N = cellPar{2};    m = cellPar{3};%%%函数计算     [targetNum,~]=size(idxK);      value = nan(1,3*targetNum);%第一个ATR,第三个均值突破    for i=1:targetNum        regKMatrix = traderGetRegKData(idxK(i,:),N+10,false,bpPFCell);        regKMatrix(:,any(isnan(regKMatrix),1))=[];        [~,KLen]=size(regKMatrix);        if KLen>=N+2            value1  =  abs(regKMatrix(3,end-N+1:end) - regKMatrix(4,end-N+1:end));%  当日最高价减去当日最低价            value2  =  abs(regKMatrix(3,end-N+1:end) - regKMatrix(5,end-N:end-1));%  当日最高价减去前日收盘价的绝对值            value3  =  abs(regKMatrix(4,end-N+1:end) - regKMatrix(5,end-N:end-1));%    当日最低价减去前日收盘价的绝对值            TRlist=max(value1,max(value2,value3));            value(i) = mean(TRlist);            stds = std(regKMatrix(5,end-N+1:end));            means = mean(regKMatrix(5,end-N+1:end));                        if regKMatrix(5,end)>stds*m + means                value(i+targetNum) = 1;            elseif  regKMatrix(5,end)<-stds*m + means                 value(i+targetNum) = -1;            else                 value(i+targetNum) = 0;            end            stds = std(regKMatrix(5,end-13:end));            means = mean(regKMatrix(5,end-13:end));             value(i+2*targetNum) = (regKMatrix(5,end)-means)/stds/.015;        end    endend


更多免费策略下载请登录DigQuant社区-策略资源下载~



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 2 人评分经验 论坛币 收起 理由
fantuanxiaot + 33 + 33 精彩帖子
kongqingbao280 + 40 精彩帖子

总评分: 经验 + 73  论坛币 + 33   查看全部评分

本帖被以下文库推荐

lwell20 发表于 2017-3-16 15:28:27 |显示全部楼层 |坛友微信交流群

使用道具

ghjktdf 发表于 2017-3-16 17:27:11 |显示全部楼层 |坛友微信交流群
11年开始回测?感觉曲线还行

使用道具

挖矿专家 发表于 2017-3-16 20:44:20 |显示全部楼层 |坛友微信交流群
ghjktdf 发表于 2017-3-16 17:27
11年开始回测?感觉曲线还行
社区有完整代码可以下载~

使用道具

ghjktdf 发表于 2017-3-17 10:47:33 |显示全部楼层 |坛友微信交流群
挖矿专家 发表于 2017-3-16 20:44
社区有完整代码可以下载~
o( ̄▽ ̄)d

使用道具

twoods9876 在职认证  发表于 2017-3-18 17:30:21 |显示全部楼层 |坛友微信交流群
Thanks!

使用道具

EddieChiu 发表于 2017-3-18 18:09:05 |显示全部楼层 |坛友微信交流群

使用道具

挖矿专家 发表于 2017-3-20 14:53:16 |显示全部楼层 |坛友微信交流群
感谢支持~

使用道具

65425856 发表于 2017-3-20 17:56:45 |显示全部楼层 |坛友微信交流群
感谢楼主

使用道具

ghjktdf 发表于 2017-3-21 12:21:22 |显示全部楼层 |坛友微信交流群
感谢楼主分享~

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-16 18:54