马尔科夫性
HMM由来
RHmm包介绍
应用(训练样本是2007-2009年)
黑的是HMM模型的收益,红的是基准。
模型的输出并不让人满意。
HS300测试
去除数据比较少的9支,剩291支股票。
–训练数据:上证指数(2007:2009) –回测数据:沪深300成分股( 2010:2015)
平均下来收益率比银行里的一些理财(一般5-6%)好一些。但是人家的风险比这个的低啊!而且前面几年的都一直亏损状态,后面回本靠的是2013年底开始的一波牛市。 观众:老王你(模型)不行啊! 老王:heng!!! 男人不能说‘不行’的 !
那么问题来了,如何改进HMM模型?
更一般来说一个模型如何改进?(一个模型包括:输入、样本筛选/过滤、拟合参数、拟合函数、模型的参数、目标函数等等等等。这么多东西需要测试, oh my god!)
改进
这里还是只讲HMM模型吧!
HMM的问题2:给定观察序列O=O1,O2,…OT以及模型λ,如何选择一个对应的状态序列S = q1,q2,…qT,使得S能够最为合理的解释观察序列O?
看看上证的Hidden states,和对应的收益率
好像和预期不相符!
应用到沪深300成分股试试。
训练数据:上证指数的2007~2009
测试数据:沪深300成份股2010~2015
交易规则:longmode在样本内收益最大对应的隐状态 & shortmode在样本内收益最大对应的隐状(交集)
测试50次(舍弃年化收益率>10的)
收益率和夏普率还能接受,但是最大回撤还是不能令人满意!!!
(注:横向的数据没有意义!)
同时,如何避免使用某一次比较差的模型?!
这里老王使用的是投票模式。(同时使用50个HMM模型)
先看看数据:
红圈内的数字表示2010-01-12,有4个HMM投票给600005。
这样就可以使用了2种方案。
第一,每一行的投票结果0-1化权重,然后分配资金投资。
结果如下:
(注:红线是上证指数的收益,黑线是测试的收益。下同)
第二,入选投票结果>n票(n随意!),然后在每天入选的股票中平均分配资金
(注:0票就相当于平均分配资金在投票>0的股票上)
n=5
n=15
50个HMM模型里10-18个投票,结果都挺理想了!
同样,回撤比较大的问题还是不能避免。看来需要寻找其他的方式来避免大的回撤。
(当然,需要更多的测试,比如在全股票市场或者在商品/期货/外汇/黄金上,或者更长的数据上测试)
(ps:在291支股票上测试一次HMM大概需要8-10分钟,50次差不多要一个后半夜!!!)