一、产品背景
股票投资的逻辑是基于市场信息对股价驱动需要经历一个过程,投资者通过信息的感知或者基于行情的经验观察进行投资决策。市场信息分为公共信息和私有信息,但对于普通投资者,所能够获得的大部分是公共信息。如果通过海量的公共信息以及之间的相互关系挖掘出有效的投资指标或者因子,帮助投资者进行决策是券商研究、投顾所亟需解决的问题。
目前我们的智能产品或者策略都遇到类似问题,产品仅仅是一些简单指标或者市场标准化逻辑研发而来,并不能保证效果,市场竞争力不足。而券商现在大都需要进行回测比较验证产品效果。鉴于此,我们需要采用更加科学的方法对目前产品升级。可行的途径是:从目前已有的因子挖掘新的且有效的因子,然后基于这些因子进行产品研发或者形成策略,从而在根源上解决该问题。我们目前设计了一套可以进行因子挖掘、因子检验和可视化展示,提供整个从数据到产品的解决方案。
二、系统架构
从市场上获取基础数据进行清洗后存入基础因子库,后端运用机器学习、数据挖掘、异常值处理、指标归一化等方法对数据进行清洗后存入选股因子库,用户输入选股条件后系统自动推荐股票池,后续会进行因子扩展挖掘出更多有效因子及策略组合进行回测方便用户及时调整持仓策略。
三、数据处理
因子的本质就是股票某种数量化的特征,其过程可以理解为就是一个函数计算的过程。
因此我们针对现有因子进行因子挖掘的过程可以理解如下:构建量化指标作为函数的输入,经过函数计算的过程,最终函数输出得到新的因子。数据处理如下图所示:
整个过程可以分为以下几步:
-
数据层:
对于数据来说,目前我们以股票时序数据,包括行情价量数据、基本面因子、level2因子作为原始数据,经过数据预处理(缺失值处理,去极值等)操作,最终数据流入到算法层;
算法层:
引入机器学习思想,将其数据进入分为训练集和验证集,并支持用户自定义算子和适应度,采用ML+遗传规划框架进行因子挖掘,其中过程采用网格参数调参进行超参数优化,最终得到满足条件的因子表达式(子代因子),存入DB,为了防止过拟合,我们引入交叉验证环节,计算生成的子代因子在验证集上面的适应度得分,以此得到子代因子的样本外表现;
- 模拟验证:
为了进一步保证挖掘算法的稳定性,对因子进行样本外实时模拟计算,然后检验有效性,真正保证样本外测试。将模拟表现与历史回测对比,仅将二者都稳定的上架都正式环境;
4)应用层:
对于C端用户,我们为客户提供因子选股服务,从而让用户能够从多个维度进行选股;对于B端用户,我们做有效性检验展示,将生成的因子在真实数据上的回测结果进行区分展示,从而让用户对其股票投资进行辅助决策。
四、因子挖掘
目前我们已挖掘了105个条件因子可供选择,用户自己选择选股因子后系统会根据大数据算法的语义分析进行识别,最终选出符合用户需求的股票。多因子选股涵盖市场上所有主流因子, 后期会从公司层面、外部环境、市场表现等其他维度挖掘出新的选股因子,不断丰富因子库。
1)因子分类
包括选股范围、技术指标、K线形态、行情量价、主力行为、公告研报、财务数据等,在确定几大类因子之后,又将大类因子进行细分。
a.选股范围:市场、行业板块、地区板块、概念板块等;
b.技术指标:MACD、MA 、KDJ 、RSI 、BOLL等;
c.K线形态:底部红三兵、多方炮、深跌回弹、阶段新高、小步上扬等;
d.行情量价:涨跌幅、成交量、换手率、股价、强势股等;
e.主力行为:龙虎榜、高管增持、股东户数、人均持股、机构净买入等;
f.公告研报:机构关注最多、评级预测调高、盈利预测调高等;
g.财务数据:市盈率、每股收益、流通市值、业绩预增、流动比率等。
2)因子来源
因子指标主要根据金融理论构造或者机器学习算法挖掘训练得到,在获取到基础元数据后会经过一系列的处理包括有效因子筛选与二次衍生计算等。其中市场部、行情和技术数据来源于最新的行情数据,基本面与财务类数据来源于上市公司最新发布的财务报告。我们运用因子间的相关性矩阵对因子进行数据清洗与挖掘,衍生计算出符合条件的筛选因子。
序号 | 描述 | 来源 |
---|---|---|
1 | 市场行情基础数据 | 数据中心、行情中心 |
2 | 基本面财务数据 | 财务报告 |
3 | 扩展因子 | 金工计算 |
3)因子更新频率
不同因子指标更新频率不同,为保证展示最新最全的数据我们对每个因子的最小时间颗粒度进行划分,如行情数据实时更新精确到秒,主力行为、K线形态日频更新展示最新交易日数据,财务指标季度更新按财务报告披露时间来展示,股本股东、分红送转等事件触发类不定期更新
序号 | 描述 | 备注 |
---|---|---|
1 | 行情类数据 | 实时更新 |
2 | 日频类数据 | 按日更新 |
3 | 季频类数据 | 按季度更新 |
4 | 除权类、股本类、状态类 | 不定期更新 |
4)因子挖掘算法流程设计:
1.使用ML+遗传规划思想进行因子挖掘:
a.使用原始价量数据因子和自定义函数集,生成大量公式,按照遗传规划的思想进行公式的进化和筛选,由于模型给参数的变化敏感,为了避免人工给定参数导致最后结果不理性,我们采用网格参数调参,最终以损失函数最小得到最优参数;
b.因子适应度的计算:对于线性多因子模型来说,我们通常采用IC均值,ICIR,多空收益,多头超额收益,分组检验单调性等方式,对于非线性多因子模型来说,我们通常可以采用最大互信息系数MIC来作为因子适应度指标衡量,进入到备选因子池
c.备选池因子筛选:在备选因子池中,计算两两因子间的相关系数,剔除相关性高的两个因子中适应度偏低的因子,得到最终的因子池
d.根据生成的子代因子在训练集和验证集上的适应度表现,在验证集上平均适应度达到最优即可停止运行
2.效果验证
对挖掘的因子做回归IC测试和分层测试以及相关性分析。
3.筛选最终因子
由于挖掘的因子存在高共线性,因此需要做剔除,也就是采用分层法剔除相关性较高的因子,最终迭代筛选过后得到因子集合即可
五、策略回测
策略回测是专为中小投资者量身打造的量化策略,标准多因子模型通常从公司财务、估值指标、一致预期以及技术指标出发构建一套公司的价值评价体系,然后选择价值绩优股持有较长一段时间以获取基本面带来的收益。但随着交易拥挤带来的因子失效,实际投资中不再满足于长期投资收益,开始重视短期波动产生的收益,比如,国内大部分私募基金的Alpha策略都辅助于T+0策略增强。更重要的是,利用最新的人工智能技术挖掘短线因子也是将量化投资发挥到极致的最佳途径。
鉴于基本面因子和短线因子各自的优缺点,我们将致力于完美融合短线因子和基本面因子,搭建多因子选股模型,再结合择时和仓位管理方法形成最终量化策略。二者的结合有助于提高换仓频率,同时根据波动率调整仓位可以强化风险资产的杠杆属性,提高单次盈利和增强动量效应。
对筛选出的股票进行模拟组合,从业绩稳定性、增长性、持续性、市场反应等方面进行分析从而形成最优化配置组合,获得稳定的超额收益。优化主要是建立再模型基础之上,通过等权重、均值方差、IC加权法等机器学习算法进行因子权重仓位配置。建立好优化的多因子模型之后通过回测来评价优化模型的有效性,模型回测把组合运用到实际股市中形成投资策略,得到投资策略的相关指标如年化收益、夏普比率、最大回撤、波动率等来检验模型在股市中的适用性。
六、总结
在错综复杂的市场环境和金融数据越来越庞大的背景下金融量化已蔚然成风。从数以百万计的碎片化新信息中去芜存菁,利用机器学习、量化交易等辅助算法将大数据转化为投资洞见,用数据说话投资可以更美的