DeepAlpha-DNN对高频双股轮仓策略的应用分析
由liuhooly创建,最终由liuhooly 被浏览 261 用户
作者:liuhooly
前言
首先感谢平台给了和众位大神一起学习和实践DNN的机会,我应该是这次里面经验比较浅的,因为一直以来使用的都是
StockRanker,因此本文的使用体验上会有一定的两种学习方法的对比理解。不一定准确,大家参考即可。
策略构建
标注
因为是高频轮仓,所以主要是用的第二日收盘价与第一日开盘价的比值来做收益标注(shift(close, -2) / shift(open, -1)-1),同时,将所有股票按照100个区间进行标注区分。其实再过往经验中,该方法不一定是最好的,因为有出现过使用第3日或第5日收盘价反而表现更好,但是这点为什么无法解释清楚。
训练时间
训练时间上我选择了是20年1月1日到22年1月1日,选择该训练时间的原因有两个:
1、根据不完全观测,大部分的策略在20年前有效的,20年后都失效了,可以认为随着市场竞争加剧,针对量化交易的手段变多,简单的策略越来越无法取得正收益。因此如果训练模型和大多数模型一样,使用过去较长的时间,可能会趋同于大部分策略,这样也有可能被反向狙击。
2、大家都知道滚动训练是一种比较有效的方法,滚动训练一般是按照2~3年的周期进行滚动,认为选择近2年,相当于手动滚动。也可以按照半年或者1个季度进行人工滚动。
数据过滤
数据过滤方面,我常用的有两个,股票池和条件过滤。
股票池一定是会剔除ST、停牌、创业板之类的。偶尔会区别的是大盘股或中证500,喜欢中证500是因为大部分时候中证500是所有股票池综合表现最好的,好中选好么。
条件过滤通常会使用的有两个,一种是今日跌,明日买入,一种是只买入有市盈率的(或企业净收入为正)。原因纯粹个人偏好,不一定准确。在本次实验中,发现这2个条件都不怎么好,特别是过滤了之后来喂数据,无论如何调整,换因子,都无法取得好的收益,所以后来就放弃了。最终本次实验剩下的都是没有条件过滤的。这带来一个思考,DNN是否应该彻底摒弃一些人为条件,而完全信赖它呢?
因子
本次尝试了按照模板的98个因子,也有缩减因子,增加因子的对比,但是因子可能不是影响最大的,基础策略高频轮仓本身就会对策略的影响很大。后面对比之后再细说。
回测
回测就不多说了,是主要策略的高频轮仓,2只股票,每只都是今天买入次日收盘卖出,所以其实一直都是满仓状态,需要注意的是,做这个策略大家需要再一定程度上用仓位+现金平衡,所以不能卖多少第二天就买入多少,这样容易出现很快不是均分仓的情况。
时间上,回测的主要是22年1月1日到6月多的数据。
训练和固化
这个是DNN最无法解释的,我多次出现了不改进入数据,但是出现过隔几天,或者隔一周,只是重新跑策略,结果完全不一样的问题,固化虽然能解决这个问题,但是为什么,没法解释总是让心里很没安全感。
回测结果
1、34个因子, 中证500
模拟盘
3、25各因子,中证500
模拟盘
3、131个因子,中证500
模拟盘
4、378个因子,全市场
总结和展望
1、不知道大家注意到没有,这些回测都有一个问题:在大盘跌的时候涨,在大盘涨的时候跌,仿佛是做空的感觉,但是实际上是全仓买入的。因此,如果要继续下去,这些策略可能更适合大盘下跌做一些风险。。。
2、模拟盘的表现都不如大盘,特别是最近大盘都是上涨情况,加剧了第一个观测点。造成这个问题的思考:
使用了排序,因为DNN输出的不是像StockRanker那样的分数,而是pred_label,也就是标注区间预测,因此,按照分数最好的来买入这个逻辑不太存在,特别是本次测试中通常是用的升序才有较好的排序(区间最低),对此和因子测试的时候有点像,怎么解释,也没了解透彻。期待有大神能解惑吧
3、DNN是否适合高频策略呢?高频策略的逻辑是,既然可以预测更赚钱的股票,那只要投入这一支来获取超额收益就行了。根据我的测试,DNN在高频轮仓策略上是有潜力的,但是如何优化,可能需要更牛的大神来处理。
最后,实盘这几周,基本跑到了垫底,不知道确实是跑出了几个适合跌盘时候的策略,还是高频轮仓的哪个地方有问题。希望资源啥时候能让我支持1000因子的测试就好了,现在超过400就要崩溃。。。已经是最好的服务器了,大宽加油吧~
\