文献回顾

回顾价值策略

价值策略通俗地讲就是买入便宜股票,卖出昂贵股票,思想非常简单和直观。但是实际操作上这非常困难,因为我们没办法直接观察股票的真实价值。投资者可以从不同的视角采用不同的指标来估计股票内在价值。在股票市场中,最传统的方法就是通过会计报表的各个条目得到企业估值,我们可以从资产负债表得到市净率,从利润表得到资产收益率,从现金流量表得到现金流比率。Ma和Smith(2014)在《Sorting through the trash》中提到通过市净率、预测下期资产收益率和股价/现金流这三个指标合成一个综合的“价值”因子,可以显著提升策略表现(MA采取了三个因子Z得分的总和来合成“价值”因子),文末附实现源码,可在人工智能量化投资平台进行实现。

是否可以对公允价值进行建模?

虽然有很多种企业估值方法,2017年8月J.P.Morgan发表了文章《Value Strategies based on Machine Learning》,提出了一种通过大量股票特征来预测公司市净率的统计建模方法。换句话说,作者是通过预测公司市净率,然后与实际市净率进行比较来得到“公允价值”,以便发现哪些被“错误定价”的股票,识别出哪些股票被高估,哪些股票被低估,然后开发出买入低估股票,卖出高估股票的策略。

为什么要预测市净率?

首先,市净率本身就是公司估值的一个常用指标,并被Ma和Smith实践证明是企业价值很好的一个度量。其次,市净率这样的指标来自于财务指标,而财务指标通常很长一段时间才发生变化,因此比较稳定。最后,机器学习、深度学习策略被怀疑的很大一个原因就是行情数据信噪比低,因此财务数据信噪比较高,建模更有效。

价值选股策略

我们在11月介绍过J.P.Morgan关于机器学习进行股票策略开发的最新文章《Value Strategies based on Machine Learning》(基于机器学习的价值投资策略)。与常规算法预测目标不同,该文选择股票“公允价值”作为预测目标。作者选择37个股票特征作为输入数据,使用由惩罚回归(LASSO),梯度提升(XGBoost)和线性回归3个模型组成的组合模型,以MSCI国家指数中股票为投资标的,预测股票下个月的“公允价值”——市净率。以预测市净率与当前市净率之差作为“错误定价”的判断依据选股,买入被低估的股票,卖出被高估的股票。然后,作者发现使用毛利润与资产之比(Gross-Profit-to-Assets,GP/A)而不是净资产收益率(ROE)作为衡量盈利能力的标准,在需买入的低估值股票中,保留前40%GP/A的股票;在需卖出的高估值股票中,保留后40%GP/A的股票,能够在价值策略的基础上有所改善。最后,作者通过选择RavenPack新闻情绪数据作为交易策略的补充,建立情绪型号: 选取时间相关性(“Relevance”)数值在70以上的事件,求取月份情绪值。通过计算不同情绪值阈值对组合效果进行验证,发现移除买入组合中情绪值小于-0.3的股票,移除卖出组合中情绪大于0.3的股票的交易策略能进一步改善价值策略。

研究计划

我们希望能够将J.P.Morgan的价值策略运用在中国A股市场,验证该策略的有效性。策略思路和J.P.Morgan一致,通过大量的股票特征来预测市净率因子,然后根据预测出来的市净率因子与实际市净率之差作为股票“错误定价”的依据,然后买入被低估的股票,卖出高估的股票。

数据和算法

数据获取

Morgan选股池是来自于39个国家的2000只股票(见下表),但本文的选股池是全A股市场,目前已经超过3000只股票。我们获取2010年1月1日至2018年1月1日的全A市场所有股票数据,其中样本内数据为2010年1月1日至2015年1月1日,样本外数据为2015年1月1日至2018年1月1日。样本外的数据段即为回测的区间段。

特征确定

Morgan的原文中共有37个股票特征,这些特征主要反映了公司的盈利能力、运营效率、财务质量、成长性。见图1。

A股的财务报表和美股存在一些差异,我们选取了共22个股票特征来预测公司市净率。见图2。

数据标注

本文实验的目的是预测市净率来实现“公允价值”的建模,因此预测的重点是市净率,于是在训练集数据标注中,我们采取下一期的市净率数据作为标注依据。这样建模的直观意义是,我们希望找到24个股票特征与代表企业价值的市净率的内在关系,然后能够在样本外根据公司的24个特征预测市净率,挖掘出哪些公司可能被低估。

模型选择

本文选择以XGBoost算法建模,该算法全称为eXtreme Gradient Boosting,是在GBDT的基础上对boosting算法进行的改进,内部决策树使用的是回归树,该算法适用于分类和回归,主要优点是:速度快,效果好,能处理大规模数据,支持多种语言和自定义损失函数。仅在2015年,在Kaggle竞赛中获胜的29个算法中,有17个使用了XGBoost库,而作为对比,近年大热的深度神经网络方法,这一数据则是11个。在KDDCup 2015 竞赛中,排名前十的队伍全部使用了XGBoost库。XGBoost不仅学习效果很好,而且速度也很快,相比梯度提升算法在另一个常用机器学习库scikit-learn中的实现,XGBoost的性能经常有十倍以上的提升。

特征预处理

和Morgan思想一致,本文也是预测一年之后的市净率。鉴于国内A股公司最迟在次年4月最后一天发布上一年财务报表,因此我们以次年5月第一个交易日为月份T,预测T+12月份的市净率数据。本文会对24个股票特征数据进行去极值和横截面标准化处理。“公允价值”被定义为T+12月市净率减去T期市净率,为了保证数据的可比性,参照了Morgan的处理方法——也对“公允价值”进行了横截面标准化处理以便发现哪些是低估股票,哪些是高估股票。

训练和预测

模型训练

我们将训练集内80%的数据拿来训练模型,剩下数据拿来验证模型。为了防止机器学习算法XGBoost对训练数据过拟合,我们模型超参数采取了常规设置。其中比较重要的几个参数为:树的最大深度(max_depth设置为3),学习速率(eta设置为0.1),提升树的数量(n_estimators设置为100),因为我们想预测市净率的具体数值,所以采用回归算法(objective设置为reg:linear),预测连续性变量,迭代数量(num_round设置为100)。

模型预测

当我们训练出XGBoost模型后,根据样本外(2015年1月1日至2018年1月1日包含24个特征的股票数据,直接将该模型用来预测该时间区间上的股票市净率数据。

公允价值

“公允价值”的计算为预测市净率数据和实际市净率之差,具体计算公式为:

因为在训练集数据标注时,我们采取的是T+12月的市净率数据,因此预测市净率即为T+12月的市净率数据,实际市净率为T月市净率,为了便于股票之间的“公允价值”可以比较,我们对“公允价值”进行标准化——将预测市净率与实际市净率之差再除以过去12个月市净率的标准差。

回测交易

我们根据预测的“公允价值”进行选股,“公允价值”越高的股票越值得投资。和Morgan选股处理一样,选股时有两个过滤条件,首先,不买入流通市值最小的10%的股票,其次,不买入过去一个月平均成交金额最低的10%的股票。

我们根据预测的“公允价值”进行选股,“公允价值”越高的股票越值得投资。和Morgan选股处理一样,选股时有两个过滤条件,首先,不买入流通市值最小的10%的股票,其次,不买入过去一个月平均成交金额最低的10%的股票。

因为是通过年报出来之后的5月第一个交易日预测下一年的市净率数据来计算“公允价值”选股,因此调仓周期为1年。持有一年之后,再根据新的选股结果进行调仓。回测结果如下:

策略年化收益10.27%,最大回撤为11.54%,年化波动率为9.22%。Morgan测试结果年化收益3.2%,最大回撤为6.7%,年化波动率为3.6%。相比之下,中国市场的价值投资策略收益更高、风险也更高。

参考文献

  • 《Value Strategies based on Machine Learning》
  • 《Big Data and AI Strategies》
  • 《XGBoost 入门系列第一讲》
  • XGBboost Python API

附录

代码:基于XGBoost的价值选股策略代码


BigQuant——人工智能量化投资平台

[量化学院]价值选股策略——基于机器学习算法相关推荐

  1. 基于夏普比率对因子的筛选,以及基于股票期货交易策略对多因子策略的机器学习算法探讨

    试论因子的筛选,股票期货策略,以及基于多因子策略的机器学习算法 前言 正文 股票因子的筛选 股票期货策略 基于多因子策略的机器学习 前言 之前参加泰迪杯的,但又没什么时间,自己又是python新手,量 ...

  2. 低估价值选股策略(含源代码)

    低估价值选股法是一位美国传奇式的基金经理人-迈克尔.普里斯提出的. 迈克尔.普里斯的低估价值选股法基于三条原则: 股价低于资产价值,这一准则是典型的价值投资思想,即相对公司资产价值,股价处于相对低估的 ...

  3. [当人工智能遇上安全] 5.基于机器学习算法的主机恶意代码识别研究

    您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...

  4. 基于机器学习算法的慢性肾病危险因素预测

    摘 要 慢性肾脏病(CKD)患者逐年增加,心血管疾病作为其最主要的并发症,决定着CKD患者的预后.尽管目前临床医师已经对CKD患者进行了相对全面的检查,并已经使用药物对心脏功能进行早期的干预性治疗,但 ...

  5. R语言基于机器学习算法进行特征筛选(Feature Selection)

    R语言基于机器学习算法进行特征筛选(Feature Selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(featu ...

  6. 程序设计-在校整理-07 基于机器学习算法的DGA域名识别(NB、XGboost、MLP初探)

    [在校整理-07 基于机器学习算法的DGA域名识别(NB.XGboost.MLP初探)](注:仅供参考学习使用) 一.课题内容和要求 二.理论基础 2.1 DGA域名生成算法 2.2 DGA算法原理 ...

  7. 【mindgo】 彼得林奇PEG价值选股策略

    ''' 策略名称: 彼得林奇PEG价值选股策略策略思路: 1.选择PEG < 0.5, 即稳定成长且价值被低估的股票其中PEG = PE / growth_rate 2.使用ES风险平价配权 3 ...

  8. 分享聚宽量化交易执行选股策略的执行过程

    分享聚宽量化交易执行选股策略的执行过程: 首先就是需要用不同的函数处理不同的数据,比如上市数据,要用run_query()函数处理,财务与估值数据要用get_fundamentals()函数处理.以及 ...

  9. 机器学习量化多因子选股策略

    一.前言 多因子选股策略是一种应用十分广泛的选股策略,其基本思构想就是找到某些和收益率最相关的指标,找出股票收益率与各种指标之间的"关系",借此"关系"建立股票 ...

最新文章

  1. 会说话的狗狗本电脑版_会说话的电脑有点酷!惠普星14帮你解锁“偷懒”新姿势_惠普 星 14 2020(i5 1135G7/16GB/512GB/MX450)_笔记本新闻...
  2. LeetCode算法题-Reverse Linked List(Java实现)
  3. 如何设置html中按钮边框颜色,CSS-为什么我的电子邮件按钮边框显示两种颜色,而边框颜色设置为仅显示一种颜色?...
  4. selenium 浏览器driver地址
  5. 关于小型长周期项目的一些建议
  6. 基于NEON指令的图像旋转加速【armv7】
  7. php调用md5.js,PHP和JS实现HTTP上安全地传输密码
  8. NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、改变)
  9. 任务app源码运营版本
  10. 定位模块介绍及使用(GPS、北斗、GLONASS、伽利略、准天顶)
  11. 【珍藏版】长文详解python正则表达式
  12. 安全运维 - Windows系统攻击回溯
  13. javaScript 中创建json/转换字符串为json
  14. MFC开发——MFC项目创建
  15. Springboot+网上投资借贷中介服务 毕业设计-附源码221506
  16. mysql+一直running_mysql 事务一直running问题排查
  17. 吸粉神器——维盟智慧wifi,微信粉丝生产基地!
  18. React Loadable中文文档
  19. 前端工程师考核总结_最新前端工程师周工作总结
  20. JAVA - 学习记录第八天

热门文章

  1. 比亚迪元EV汽车拆解报告
  2. 超级学习者的6个习惯:快速深入地学习任何技能
  3. 什么样的人适合当领导
  4. Python实现的《桌面视频壁纸程序 Mili Wallpaper》
  5. java实现qq邮箱发送附件和图片
  6. 电话机器人成骚扰机器?程序员可不背锅
  7. 每页多张幻灯片密集打印的设置技巧
  8. 客户体验决胜2022,低代码是快速取胜之道
  9. (附源码)springboot闲置衣物捐赠系统 毕业设计 021009
  10. 【测试】功能测试用例设计方法总结