请选择 进入手机版 | 继续访问电脑版
楼主: seven_eleven77
5063 26

[源码分享] 【小波分析+MACD策略】源码分享,求指教 [推广有奖]

  • 0关注
  • 3粉丝

高中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
66 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
352 点
帖子
49
精华
0
在线时间
18 小时
注册时间
2016-10-11
最后登录
2016-11-17

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

MACD指标是量化投资策略里面较为常见的技术指标,但是LZ直接简单用MACD信号进行交易,出现进出场过于频繁的情况。受国信证券的金融工程报告启发,考虑用小波分析进行去噪处理,发现结果好多了。


LZ选用的是30min频率进行回测,选择的标的是沪深300主力合约,从策略表现看:整体还是不错的,后尾能够跑赢大盘,权益曲线在持有曲线上方,但是从交易类型看,空头表现还好,但是多头一开始表现还不错,后尾就很差了,这要怎么避免呢?


LZ刚进入量化入门,圣杯的光都没看到,请路过的各位量化老司机带带,让LZ上个车就好~


策略表现:

QQ图片20161011142231.png

单还是能跑赢大盘的

单还是能跑赢大盘的

多头比较不理想

多头比较不理想

空头表现还不错

空头表现还不错
QQ图片20161011141450.png
QQ图片20161011141446.jpg
QQ图片20161011141441.png
QQ图片20161011141436.png

  1. function wavmacd(Freq,len,len1,len2,shareNum) %基于小波消噪后的MACD策略
  2. global s1;%定义s1全局变量,记录实时的消噪后的收盘价

  3. targetList = traderGetTargetList(); %获取回测标的信息
  4. HandleList = traderGetHandleList();%获取回测账户信息
  5. marketposition=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code); %读取仓位信息
  6. lags=420;%每次的测试数据时间长度
  7. barnum=traderGetCurrentBar(targetList(1).Market,targetList(1).Code);%获取当前的bar的编号
  8. if(barnum(1)<=lags)
  9.     return;
  10. end
  11. %%
  12. %获取频率为Freq=5的标的的数据,数据长度为从当前往回找lags=420这么长
  13. [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(1).Market,targetList(1).Code,'min',Freq, 0-lags, 0,false,'NA');
  14. if(length(time)<len)
  15.     return;
  16. end
  17. %%
  18. %小波去噪
  19. if isempty(s1)
  20.     for i=1:len-1
  21.     data=close(end-len+i-101:end-len+i);
  22.    [c,l]=wavedec(data,2,'haar');  
  23.   ca2=appcoef(c,l,'haar',2);
  24.   cd1=detcoef(c,l,1);
  25. cd2=detcoef(c,l,2);
  26. cdd1=zeros(1,length(cd1));
  27. cdd2=zeros(1,length(cd2));
  28. c1=[rot90(ca2,1),cdd2,cdd1];
  29. ss=waverec(c1,l,'haar');
  30. s1(barnum(1)-len+i)=ss(end);
  31.     end
  32. end
  33. data=close(end-101:end);%对close价进行小波消噪
  34. [c,l]=wavedec(data,2,'haar');  %进行两层分解
  35. ca2=appcoef(c,l,'haar',2);%获取低频信号
  36. cd1=detcoef(c,l,1);%获取第一层高频信号
  37. cd2=detcoef(c,l,2);%获取第二层高频信号
  38. cdd1=zeros(1,length(cd1));
  39. cdd2=zeros(1,length(cd2));
  40. c1=[rot90(ca2,1),cdd2,cdd1];%小波重构
  41. ss=waverec(c1,l,'haar');%去噪后的close价
  42. s1(barnum(1))=ss(end);%s1为消噪后的实时close价
  43. %%
  44. %计算MACD入场指标
  45. [DIF,DEA,macd]=MACD(s1,12,26,9);
  46. ma1=EMA(s1,len1);
  47. ma2=EMA(s1,len2);
  48. con1= macd(end)>0 && ma1(end)>ma2(end)&&DIF(end)>DEA(end) ;%满足条件,看多,发出做多信号
  49. con2= macd(end)<0  && ma1(end)<ma2(end)&&DIF(end)<DEA(end);%满足条件,看空,发出做空信号
  50. con3= ma1(end)<ma2(end)&&macd(end)<0;%多头势头回归,平多
  51. con4=ma1(end)>ma2(end)&&macd(end)>0;%空头势头回归,平空
  52. if   marketposition(1)==0  
  53.     if con1
  54.   traderBuy(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','buy');%开多单
  55.     elseif con2
  56.    traderSellShort(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','sellshort');%开空单  
  57.     end
  58. end

  59. if  marketposition(1)>0 && con3
  60.   traderSell(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','sell');%开空单
  61. end

  62. if  marketposition(1)<0 && con4
  63.   traderBuyToCover(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','buytocover');%开空单
  64. end

  65. end

  66. function [DIF,DEA,MACDValue]=MACD(Price,FastLength,SlowLength,DEALength)
  67. DIF=zeros(length(Price),1);
  68. DEA=zeros(length(Price),1);
  69. MACDValue=zeros(length(Price),1);
  70. DIF=EMA(Price,FastLength)-EMA(Price,SlowLength);
  71. DEA=EMA(DIF,DEALength);
  72. MACDValue=2*(DIF-DEA);
  73. end


  74. function EMAValue=EMA(Price,Length)

  75. EMAValue=zeros(length(Price),1);
  76. K=2/(Length+1);
  77. for i=1:length(Price)
  78.     if i==1
  79.         EMAValue(i)=Price(i);
  80.     else
  81.         EMAValue(i)=Price(i)*K+EMAValue(i-1)*(1-K);
  82.     end
  83. end
  84. end
复制代码


二维码

扫码加我 拉你入群

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

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

关键词:小波分析 MACD 求指教 Mac ACD 金融工程 投资策略 策略回测 结果解读

回帖推荐

3862161 发表于16楼  查看完整内容

你这里面S1是什么,好像是构造出来的一个新的序列。为什么不是直接对原始序列滚动做消噪处理?

3862161 发表于2楼  查看完整内容

你这个里面都是函数,怎么执行?数据哪里来的?
已有 1 人评分经验 论坛币 收起 理由
fantuanxiaot + 22 + 22 精彩帖子

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

3862161 在职认证  发表于 2016-10-11 15:14:26 |显示全部楼层 |坛友微信交流群
你这个里面都是函数,怎么执行?数据哪里来的?

使用道具

3862161 发表于 2016-10-11 15:14
你这个里面都是函数,怎么执行?数据哪里来的?
是的,我这个提取数据就是一个函数 traderGetKData,这个函数是Auto-Trader 软件内嵌到matlab的函数,可以提供各种频率的数据,非常方便提取数据,感兴趣可以下载个玩玩~http://internet.atrader.com.cn/software.php

使用道具

3862161 发表于 2016-10-11 15:14
你这个里面都是函数,怎么执行?数据哪里来的?
是的,我的数据提取就是用一个函数 traderGetKData实现的,非常便捷,这个函数是软件Auto-Trader内嵌在matlab里,专门用于提取各种频率的数据,感兴趣可以去下一个~http://internet.atrader.com.cn/software.php

使用道具

zhouwenzi 发表于 2016-10-11 15:39:04 |显示全部楼层 |坛友微信交流群
这个策略看着好复杂啊,回测结果也好详尽,看着就觉得好厉害!!崇拜!!同上楼困惑数据提取问题,看函数里面,只有一句话涉及数据提取的,腻害!还有这个详尽的回测报告是怎么生成的呀?

使用道具

yang-cy13 发表于 2016-10-11 15:42:57 |显示全部楼层 |坛友微信交流群
大概看了一下你的代码,本质上还是一个趋势跟踪型策略。最近几个月IF的波动太小,趋势型策略都很难盈利。

使用道具

楼主用的什么软件啊,感觉没有见到过?

使用道具

pepper19921124 发表于 2016-10-11 15:45
楼主用的什么软件啊,感觉没有见到过?
对的,这是深圳数字动能新推出的Auto-Trader 软件,9月底刚出来的,没见过也是正常~感兴趣可以搜一下~

使用道具

pepper19921124 发表于 2016-10-11 15:45
楼主用的什么软件啊,感觉没有见到过?
好心人附上连接~~http://internet.atrader.com.cn/portal.php 免费下载哦,可以~~

使用道具

3862161 发表于 2016-10-11 15:14
你这个里面都是函数,怎么执行?数据哪里来的?
就是一个函数 traderGetKData就可以实现数据提取啦~这个函数是深圳数字动能新推出的Auto-Trader软件,提取各频率各标的的数据都非常便捷~

使用道具

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

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

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

GMT+8, 2024-4-18 17:30