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

[源码分享] 【每日一策】Matlab量化交易策略之 volbreak [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

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

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

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略思路:

开盘30分钟内不交易。
取开盘价上下0.5*atr为上下轨,突破上轨做多,突破下轨做空。
Atr止盈止损

回测曲线(由Auto-trader提供回测报告)

volbreak.png


策略源码:

  1. function volbreak(Freq,ShareNum,StartTime,thr)

  2. % ------------ Retrace Strategy-------------------%

  3. % Freq 为输入时间频率
  4. % StartTime 计算开盘多少分钟的最高点

  5. %---------------------策略初始化与是否日内平仓---------------%

  6. global daynum;
  7. global newday;

  8. traderDailyCloseTime(145500);     
  9. targetList = traderGetTargetList();
  10. HandleList = traderGetHandleList();
  11. barnum=traderGetCurrentBar(targetList(1).Market,targetList(1).Code);
  12. if(barnum==1)
  13.     daynum = 1;
  14. end
  15. [~,~,~,~,Dclose,~,~,~] = traderGetKData(targetList(1).Market,targetList(1).Code,'day',1, 1-barnum, 0,true,'FWard');
  16. if daynum<length(Dclose)  
  17.     daynum = daynum+1;
  18.     newday = 1;
  19. else
  20.     newday = newday+1;
  21. end
  22. [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code);

  23. %---------------------策略提取数据---------------%

  24. global s;
  25. n = length(targetList);
  26. for j = 1:n
  27.     end
  28.     len = 500;
  29.     [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(1).Market,targetList(1).Code,'min',Freq, 0-len, 0,false,'FWard');
  30.     if length(close)<len+1
  31.         return
  32.     end
  33.     dlen = 10;
  34.     [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(1).Market,targetList(1).Code,'day',1, 0-dlen, 0,false,'FWard');
  35.     if length(Dclose)<dlen+1
  36.         return
  37.     end
  38.     [atr,~] = traderATR(10,targetList(1).Market,targetList(1).Code,'day',1,0-dlen,0,false,'FWard'); % 日ATR
  39.    
  40. %---------------------策略计算与基本逻辑---------------%
  41.    
  42.     p = newday;
  43.     p
  44.     s(j).condition = 0;
  45.     if p*Freq>=StartTime
  46.         if close(end)-close(end-p+1)>thr*atr(end)
  47.             s(j).condition = 1;
  48.         end
  49.         if close(end)-close(end-p+1)<-thr*atr(end)
  50.             s(j).condition = -1;
  51.         end
  52.    
  53. %----------------------策略主体-------------------------------%
  54.    
  55.     % 入场
  56.     if marketposition==0
  57.         if s(j).condition == 1
  58.             OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
  59.             if OrderID~=0
  60.                 s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);
  61.                 s(j).peak=0;
  62.             end
  63.         elseif s(j).condition == -1
  64.             OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
  65.             if OrderID~=0
  66.                 s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);
  67.                 s(j).peak=0;
  68.             end
  69.         end
  70.     end

  71.     % 出场
  72.     if marketposition>0
  73.         if close(end)<s(j).openprice-0.5*atr(end) || close(end)-s(j).openprice>0.8*atr(end) % 止盈止损
  74.             traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
  75.         end
  76.         if s(j).condition==-1
  77.              traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,-ShareNum,0,'market','close'); % 反手开空
  78.         end
  79.         if s(j).peak==0 && (close(end)-s(j).openprice)>0.3*atr(end) % 上移止损线到开仓位置
  80.             s(j).peak = s(j).openprice;
  81.         end
  82.         if s(j).peak>0
  83.             if close(end)<s(j).peak
  84.                 traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
  85.             end
  86.         end
  87.     end
  88.     if marketposition<0
  89.         if close(end)>s(j).openprice+0.5*atr(end) || close(end)-s(j).openprice<-0.8*atr(end)
  90.             traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
  91.         end
  92.         if s(j).condition==1
  93.              traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','close');
  94.         end
  95.         if s(j).peak==0 && (s(j).openprice-close(end))>0.3*atr(end) % 上移止损线到开仓位置
  96.             s(j).peak=s(j).openprice;
  97.         end
  98.         if s(j).peak>0
  99.             if close(end)>s(j).peak
  100.                 traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
  101.             end
  102.         end
  103.     end
  104.     end
  105. end
复制代码

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




二维码

扫码加我 拉你入群

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

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


已有 1 人评分经验 论坛币 收起 理由
fantuanxiaot + 55 + 55 精彩帖子

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

lightnight_lee 发表于 2017-3-29 17:04:49 来自手机 |显示全部楼层 |坛友微信交流群
挖矿专家 发表于 2017-3-29 16:44
策略思路:

开盘30分钟内不交易。
不知道收益如何

使用道具

目前没有实盘

使用道具

ghjktdf 发表于 2017-4-10 11:47:15 |显示全部楼层 |坛友微信交流群
回测时间段了点

使用道具

65425856 发表于 2017-4-11 18:41:23 |显示全部楼层 |坛友微信交流群
感谢分享

使用道具

挖矿专家 发表于 2017-4-17 14:10:29 |显示全部楼层 |坛友微信交流群
65425856 发表于 2017-4-11 18:41
感谢分享
感谢支持

使用道具

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

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

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

GMT+8, 2024-3-29 08:12