我来掏家底了。。请各位大佬围观,如能提出一些改进意见,在下感激不尽。。。[噗通]
基于HMM的择时策略在各大量化平台的社区中可以说也看到了相当多的研究了,然而反观这些研究,虽然已经在最原始的HMM研究上做了各种改进,例如:从In-Sample测试到后来的Out-of-Sample测试、输入数据的选择和扩展、输入数据的正态性检验以及状态数的增加。但是依旧存在许多的问题。在这里提出几个问题,供大家思考。
1. 输入数据的选择
很多帖子中的输入数据选择是直接由人工给定的,比如日对数收益率、5日对数收益率等,但是没有说明选择这些属性作为输入数据的依据。
在我的研究中,首先抽取出大量候选属性,由于选取的交易标的目前主要是指数,因此候选属性主要是各类技术指标。随后,可以采用特征选择或者特征抽取的方法进行有效属性的选择,可以使用PCA、ICA或是随机森林等方法,总之在特征选择这一步,可以尝试很多种方法,从冗余属性的去除和有效属性的提取两个角度去进行候选属性的筛选。当然,也可以不使用机器学习中的方法,通过一些更加简单有效地方式进行属性的优胜劣汰。比如,可以粗暴地验证各种技术指标作为输入时,HMM在训练集和测试集上的收益率表现,进而选取其中表现最好的若干个属性作为模型输入。
2.状态数的选择
先前大多数的研究中对于状态数的选择没有进行充分的实验,一般是按照人对于市场状态的理解给定状态,例如:一般认为,市场中存在上涨、下跌、震荡,则赋予状态数为3。
首先要说明的是,状态数可以算作是HMM模型中唯一的参数,状态数对于这个模型的性能表现影响是相当大的。但是也要思考,在模型中的状态,未必表示的是涨跌状态,它有可能反映了市场的其他状态,换句话说,模型中的状态不一定是我们所想要的,用模型的状态来表征涨跌可能只是我们自己的一厢情愿。我的一个思考是,HMM中的状态与前一步的输入属性是相关的。很显然,如果输入数据都是成交量相关的属性,那么HMM输出的状态值很可能表征的也是成交量相关的状态。从这个角度来看,在第一问中输入收益率属性是有其逻辑在的。在我的研究中,也采用了最为暴力的尝试手段,即在训练集和验证集上测试各种不同的状态数,取表现最优的状态数作为最终模型的状态参数值。
3.未来数据
早先的一些研究,由于采用的是一次性传入未来预测,因此实际上利用到了未来数据,更加符合真实情况的方式应该是每天递归地预测后一天的状态。在本次的回测研究中,就采用了按照每个交易日迭代预测后一个交易日的市场状态的方式,因此完全不存在任何未来数据。
4.状态选择
所谓状态选择,就是要能够辨别哪些状态是代表了强势的市场状态,而哪些代表了弱势。关于这点,不做详细阐述,只提供一点简单的思路。状态的选择我们只能通过观察某个状态在训练集上的表现来选择。这里需要我们给定一个选取的标准。比如,在训练集上年化收益10%以上的状态才能被认为是“强势”状态。
在我的研究中,跟踪标的是沪深300指数,使用指数数据的好处是不需要考虑复权、停牌等因素,交易标的则选择了300ETF,市场上有两只300ETF,分别是159919(嘉实沪深300ETF)和510300(华泰柏瑞沪深300ETF),随意选择即可,从目前回测上来看,前者的表现更好一些,但是差异不是特别显著。如果预测得到的后一交易日状态是“正向”的,则全仓买入或者继续持有300ETF,反之,则清仓或者保持空仓。
展望。。。
研究没有展望,跟咸鱼有什么差别?!。。。
有空的小伙伴可以各自选择感兴趣的方向做一下研究。。
1.在不同的指数标的上的择时效果
后续打算在不同的指数上面跑一下结果,看看不同的指数性能表现出来会有什么差异,比如开挂了的上证50。。或许HMM更加适合小波动,长周期标的的中长期择时也说不定。
2.高频择时
目前来看,个人认为HMM不适合短期择时,不过能不能走极端做分钟级的高频一些的择时也说不好。
3.个股择时
目前还没有做HMM在个股上面的择时,难点应该在于需要为每只个股训练专有的模型,且个股的波动性大,对于HMM这样的中长期择时模型来说可能并不合适(之前曾经试着跑过个股,貌似结果惨不忍睹。。)