楼主: 挖矿专家
1350 2

[源码分享] 【每日一策】Matlab量化交易策略之 奔跑的小牛 [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

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

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略思路:

构造RSI指标与RSI指标的均匀化处理,在当前价格高于10天前的价格的时候作为过滤条件,并根据均匀化处理的RSI数值在某一个区域同时RSI高于均匀化的RSI的时候考虑进场做多,空头的条件与之相反。在沪深300股指期货与螺纹钢期货里面按照1:6的标准进行投资。测试时间段:2011年1月1日到2017年1月1日。

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

奔跑的小牛.png

策略源码:

  1. function RsiT(freq,len1,len2)%
  2. targetList = traderGetTargetList();
  3. %获取目标资产信息
  4. HandleList = traderGetHandleList();
  5. %获取账户信息
  6. shareNum=50*[1,6];
  7. for i = 1:length(targetList)
  8.     [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(i).Market,targetList(i).Code);
  9.     %获取当前仓位
  10.     lags=30;
  11.     %策略中每次取数据的长度
  12.     barnum=traderGetCurrentBar(targetList(i).Market,targetList(i).Code);
  13.     if(barnum<lags)
  14.         continue;
  15.     end
  16.     %         数据长度限制
  17.     [time0,~,~,~,~,volume,~,~] = traderGetKData(targetList(i).Market,targetList(i).Code,'day',1, 0-lags, 0,true,'FWard');
  18.     if volume(end)==0
  19.         continue;
  20.     end
  21.     [time,open,high,low,close,volume0,turnover,openinterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'day',freq, 0-lags, 0,false,'FWard');
  22.     if length(close)<len1+1|| length(close)<len2+1
  23.         continue;
  24.     end
  25.    
  26.     RSIValue=RSI(close,len1);
  27.     mvRsi=tsmovavg(RSIValue,'e',len2,1);
  28.     if close(end)>close(end-10)
  29.         if RSIValue(end)>mvRsi(end)&& mvRsi(end)>40&&mvRsi(end)<60
  30.             if marketposition ==0
  31.                 traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum(i),0,'market','buy0');%开多单
  32.             elseif marketposition<0
  33.                 traderBuyToCover(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum(i),0,'market','buy1');%平空单
  34.             end
  35.         end
  36.         
  37.         
  38.     elseif close(end)<close(end-10)
  39.         if RSIValue(end)<mvRsi(end)&& mvRsi(end)>40&&mvRsi(end)<60
  40.             if marketposition ==0
  41.                 traderSellShort(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum(i),0,'market','sell0');%开多单
  42.             elseif marketposition>0
  43.                 traderSell(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum(i),0,'market','sell1');%平空单
  44.             end
  45.         end
  46.     end
  47. end
  48. end


  49. function RSIValue=RSI(Price,Length)
  50. %----------------------------------基本用法------------------------------
  51. %1)RSI在 50以上表示市场为多头市场,否则为空头市场.RSI 还可以分为 4 个区域,当
  52. %市场处于极弱(RSI 小于20)或强势状态(RSI在50~80 之间)时,可介入。当市场处于
  53. %极强(RSI大于 80)或弱势(RSI在 20~50之间)状态时卖出
  54. %2)当短期RSI上穿长期RSI买入,当短期 RSI下穿长期RSI卖出
  55. %----------------------------------调用函数------------------------------


  56. RSIValue=zeros(length(Price),1);
  57. DiffofPrice=zeros(length(Price),1);
  58. DiffofPrice(2:end)=Price(2:end)-Price(1:end-1);
  59. RSIValue(1:Length)=50;
  60. for i=Length+1:length(Price)
  61.     Temp=DiffofPrice(i-Length+1:i);
  62.     RSIValue(i)=sum(Temp(Temp>0))/sum(abs(Temp))*100;%注:查看文献可知,RSI有几种算法,这是其中一种
  63. end
  64. end
复制代码


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


二维码

扫码加我 拉你入群

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

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


沙发
ghjktdf 发表于 2017-4-18 11:38:54 |只看作者 |坛友微信交流群
感谢分享

使用道具

藤椅
挖矿专家 发表于 2017-4-26 10:35:55 |只看作者 |坛友微信交流群
ghjktdf 发表于 2017-4-18 11:38
感谢分享
感谢分享

使用道具

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

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

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

GMT+8, 2024-4-28 07:22