一种简化的截面动量组合测试[Python&MATLAB]
下面的例子来源书籍<Python for Data Analysis>
策略比较简单,使用N只股票构建投资组合,计算每只股票的过去LookBack(参数)日的动量,并作标准化处理作为股票权重,持有Holding(参数)日,其中权重允许为负数,即允许做空股票。简要说来就是做过过去表现强势的股票,做空过去表现弱势的股票。虽然策略比较简单,但整体的测试流程和框架很明了清晰,对类似策略的回测实现具有参考意义,整体的流程框架为:
数据获取(基于付费或者免费的数据源)——》
数据的时间轴对齐以及缺失数据填充——》
子函数编写:特定回顾期的动量计算并作标准化——》
子函数编写:给定回顾期和持有期,组合的夏普比例计算——》
计算不同回顾期和持有期下组合的夏普比例值——》
进行策略参数分布图形展示
一、Python下的实现测试。
(1)主要用到numpy、pandas、matplotlib等几个包
(2)数据的获取基于pandas包
(3)数据的时间轴对齐以及缺失数据填充
(4)子函数编写:特定回顾期的动量计算并作标准化
当然这里是做了排序后把排序变量做标准化后返回。
(5)子函数编写:给定回顾期和持有期,组合的夏普比例计算
(6)计算不同回顾期和持有期下组合的夏普比例值
通过上图可以看到在此例下,大概回顾期为55-60日,持有期为35-40日,会获取较高的夏普比率。
总结:可以看到在Python下使用pandas包整体的实现测试过程很简单明了。Pandas是个进行数据分析处理很赞的包。
二、MATLAB下的实现测试。
下面在来看下在MATLAB下的实现测试过程,不同的语言各有利弊,并无本质上哪个好,那个坏之说,本例中,由于Python下的pandas包的帮助,在Python下的代码更加简洁明了,MATLAB下代码稍显臃肿,当然也可以仿照Python下的pandas包,实现一个MATLAB下的pandas包,让相关的数据处理更加简洁方便。虽然MATLAB下的金融工具箱有fints(financial time series类)、timeseries类,但相关的实现和处理在效率和使用上并不是特别好,所以时序相关的处理我还是自己实现的,并没有全部使用MATLAB自带的一些包。
注:MATLAB的实现测试使用的A股的数据,数据的获取基于FQuantToolBox
(1)函数说明
(2)数据的获取基于FQuantToolBox
(3)数据的时间轴对齐以及缺失数据填充
(4)子函数编写:特定回顾期的动量计算并作标准化
当然这里与Python下稍有不同,就使用标准化后的动量值返回。
(5)子函数编写:给定回顾期和持有期,组合的夏普比例计算
通过上图可以看到在此例下,大概回顾期为25-35日,持有期为60日,会获取较高的夏普比率。
总结
本文给出了一个简化的截面动量组合测试,虽然策略比较简单,但整体的测试流程和框架很明了清晰,对类似策略的回测实现具有参考意义,整体的流程框架为:
数据获取(基于付费或者免费的数据源)——》
数据的时间轴对齐以及缺失数据填充——》
子函数编写:特定回顾期的动量计算并作标准化——》
子函数编写:给定回顾期和持有期,组合的夏普比例计算——》
计算不同回顾期和持有期下组合的夏普比例值——》
进行策略参数分布图形展示
在Python下pandas是个数据处理非常不错的一个包,另外在Python下免费的A股数据可以通过tushare 包(作者Jimmy)获取,tushare 包下载地址:http://tushare.waditu.com/。
在MATLAB下,虽然此例的实现测试稍显臃肿,但也不是非常复杂。在MATLAB下免费的A股数据可以通过FQuantToolBox(作者faruto)获取,FQuantToolBox下载地址:
https://bbs.pinggu.org/thread-3567352-1-1.html
更多内容请点击“阅读原文” 本公众号由李洋(微信faruto)维护。
更多量化投资、MATLAB应用内容可以关注:MATLAB技术论坛:
http://www.matlabsky.com/
李洋(faruto)的微博、博客
http://weibo.com/faruto
http://blog.sina.com.cn/faruto
===分享给朋友===
点击右上角,在弹出菜单中选择“发送给朋友”或“分享到朋友圈”
===订阅FQuantStudio公众号===
https://bbs.pinggu.org/thread-3567352-1-1.html