量化交易之因子分析大全
在机器学习项目中,特征工程是非常重要的。在量化研究中也是如此。本文将量化研究中常用到的特征,也就是因子进行详细收纳,并给出推导公式和实现代码。
因子大全
前言
在机器学习项目中,特征工程是非常重要的。在量化研究中也是如此。本文将量化研究中常用到的特征,也就是因子进行详细收纳,并给出推导公式和实现代码。
另外,欢迎大家关注我的公众号【风哥笔记】,更多精彩内容等着大家。
股票预测方法概述
股票预测方法一般可分为三类:
- 基于传统方式的股票预测研究方法;
- 基于机器学习的股票预测研究方法;
- 基于时间序列的股票预测研究方法;
传统方式
技术分析法
技术分析是指以市场行为为研究对象,以判断市场趋势并跟随趋势的周期性变化来进行股票及一切金融衍生物交易决策的方法。技术分析认为市场行为包容消化一切信息、价格以趋势方式波动、历史会重演 。然而,技术
分析的有效性一直存在争议,预测的结果也因人而异。
基本面分析法
基本面分析方法是从影响股票价格变动的内在因素出发,分析股票价格变动的一般规律,为投资者做出正确决策提供科学依据的分析方法。影响因素主要有三个方面:一是宏观社会经济类影响因素;二是行业或产业类影响因素;
三是公司财务类影响因素。三类影响股票价格的因素构成股票投资预测分析的三个部分,即宏观经济分析、行业分析和企业分析 。基本面分析涵盖的因素广泛,预测周期较长,预测的结果准确率取决于投资者的专业素养,并且受数据的可获得性、及时性、广泛性等因素的限制,受众狭窄,非专业投资者不可掌握,不能更好为大众服务。
统计分析方法
统计分析方法是一类经典的金融时间序列分析方法,广泛应用于股票时间序列的分类、回归预测、异常检测等任务中,主要是以自回归模型分析为代表的时间序列分析技术。
统计分析方法的本质在于通过函数拟合和参数估计的方法建立时序模型。
机器学习
机器学习模型对股票预测的方法最常用的包括回归方法和分类算法模型。其中回归方法用于预测股票价格上涨或者下跌的具体数值,在训练模型的过程中,不需要对数据进行标注。而分类算法通常需要对股票时间序列进行标注才能进行分类模型的训练。回归方法在股票预测中得到了广泛的应用。
如果目标是对股票未来的上涨或下跌方向进行预测,则变成了一个分类问题。
因子大全
开盘价、最高价、最低价、收盘价、成交量、成交额
成交量指的是股票买卖的数量,通常以手为单位。而成交额是指买卖双方交易的股票的金额总和。
如何获取开盘价、最高价、最低价、收盘价、成交量、成交额
get_price(security, start_date=None, end_date=None, frequency='daily', fields=None, skip_paused=False, fq='pre', count=None, panel=True, fill_paused=True)
# 返回的数据为DataFrame数据格式
以招商银行股价为例,我们获取12-24这天的招商银行的这6个特征指标,已知招商银行的股票代号是600036.XSHG
。当前时间为北京时间12-24 10:17
,我们来获取看下
可以看到是非常接近的。
我们现在来研究下成交量和成交额跟股价的关系。不失一般性,我们选择收盘价进行查看。我们调取过去一年的所有交易日的信息进行分析。
import matplotlib.pyplot as plt
data=get_price('600036.XSHG',start_date='2023-12-23 9:00:00',end_date='2024-12-24 00:00:00')
volume=data['volume']
money=data['money']
close=data['close']
corr_vol=volume.corr(close)
corr_money=money.corr(close)
#plt.plot(volume,close,label=f"corr_vol{corr_vol:.2f}")
plt.figure(figsize=(10,10))
plt.subplot(2,2,1)
plt.plot(volume,label='volume')
plt.legend()
plt.title(f'corrlation={corr_vol:.2f}')
plt.subplot(2,2,3)
plt.plot(close,label='close price')
plt.legend()
plt.subplot(2,2,2)
plt.plot(money,label='money')
plt.legend()
plt.title(f'corrlation={corr_money:.2f}')
plt.subplot(2,2,4)
plt.plot(close,label='close price')
plt.legend()
plt.show()
可以看到,成交量和成交额与股价线性相关性并不高。
我们将日期范围缩小,也就是将突然上升的那一段情况拿出来分析下,也就是24-9-25
到24-10-24
之间的数据拿出来看下
可以看到,当股价上升的短时间内,成交额和成交量都有所上升。当股价开始问稳定之后,仍然成交量和成交额仍然持续了一小段时间。随后股价稳定之后,成交量和成交额也逐渐趋于一种稳定状态。
这里可利用的一种策略是,如果成交量突然急剧上升,那么由于高成交量,股价仍然会持续上升一小段时间。这个时候可以买入。买入之后尽快例如第二天或者第3天就卖出,以免被后续的暴跌所影响。
Fama-French三因子,市值、账面市值比
市值因素、账面市值比B/M因素,其他未被解释的因素
三因子模型公式如下
R i = a i + b i R M + s i E ∗ ( S M B ) + h i E ( H M L ) + ϵ i R_i=a_i+b_iR_M+s_iE*(SMB)+h_iE(HML)+\epsilon_i Ri=ai+biRM+siE∗(SMB)+hiE(HML)+ϵi
其中 R i = E ( r i − r f ) R_i=E(r_i-r_f) Ri=E(ri−rf),指股票i比起无风险投资的期望超额收益率
其中 R M = E ( r M − r f ) R_M=E(r_M-r_f) RM=E(rM−rf)为市场相对无风险投资的期望超额收益率
E(SMB)市值小市值公司相对大市值公司的期望超额收益率
E(HML)则是指高B/M公司股票相比低B/M的公司股票的期望超额收益率
ϵ i \epsilon_i ϵi则是回归残差项
a i , b i , s i , h i a_i,b_i,s_i,h_i ai,bi,si,hi都是回归系数
b i b_i bi描述的是股票本身的市场方面风险的大小
s i s_i si描述的是股票本身的市值方面风险的大小
h i h_i hi描述的是股票本身的账面市值比方面风险的大小
E(SMB)是怎么来的呢
Fama将市场里面的所有股票按市值排序然后等分成三份,大市值股票、中市值股票、小市值股票。记大市值股票的平均期望收益为E(rb),小市值股票的期望收益为E(rs),那么E(SMB)=E(rs)-E(rb)。E(HML)的定义也是类似。
如果默认三因子模型是正确的,而且市场风险、市值风险、账面市值比这三类风险能很好地解释个股的超额收益, α i \alpha_{i} αi的长期均值应该是0。那么,如果对于某个时期的股票,回归得到 α i \alpha_{i} αi<0
,说明这段时间里面收益率偏低(因此股价也偏低),而根据有效市场假设,出来混总是要还的,今天的偏离在未来要涨回来的。
所以我们的选股思路非常简单:
- 先设定一个调仓频率,每T=10天调仓一次
- 设定一个样本长度S=63天。
- 然后在调仓日对于过去S天的数据进行回归分析,计算出每个股票在过去的S天里面α观测值,
- 然后买入α最小的N(N=10)支股票即可。
市值
市盈率与市净率、换手率
市盈率(Price - Earnings Ratio,简称 P/E)是指股票价格除以每股收益的比率。它是评估股价水平是否合理的最常用指标之一,计算方式为:市盈率 = 每股市价 / 每股收益。例如,如果一只股票的市场价格是每股 20 元,每股收益是 1 元,那么它的市盈率就是 20(20÷1)。
- 静态市盈率(Last Year’s Ratio):是指股票现价与过去一年每股收益的比率。它的计算基于已经公布的上一年度财务数据。其计算公式为:静态市盈率 = 当前股价 / 最近年度报告的每股收益。比如某公司去年每股收益是 0.5 元,当前股价是 10 元,静态市盈率就是 20(10÷0.5)。这种市盈率计算简单,但有一定的滞后性,因为它反映的是过去的业绩情况。
- 动态市盈率:是指股票现价与未来一年预估每股收益的比率。它是根据已有的财务数据和对公司未来业绩的预测来计算的。计算公式为:动态市盈率 = 当前股价 / 未来一年预估每股收益。假设某公司当前股价为 30 元,分析师预测其未来一年每股收益为 1.5 元,那么动态市盈率就是 20(30÷1.5)。动态市盈率考虑了公司未来的增长潜力,但预测的准确性依赖于分析师的假设和预测模型。
- 滚动市盈率(TTM 市盈率):TTM 是 Trailing Twelve Months 的缩写,即滚动市盈率是指股票现价与过去 12 个月每股收益的比率。它的计算会随着新季度财报的发布不断更新。例如,现在是 2024 年第二季度,计算滚动市盈率时,会将 2023 年第三季度到 2024 年第二季度的每股收益相加作为分母。这种市盈率综合考虑了较近时间段的公司业绩,能更及时地反映公司的盈利状况。
注意,在量化交易平台所获取到的市盈率一般都是滚动市盈率TTM
市净率(Price - to - Book Ratio,简称 P/B)是指每股股价与每股净资产的比率。其计算公式为:市净率 = 每股市价 / 每股净资产。例如,某股票的市场价格是每股 10 元,每股净资产是 4 元,那么该股票的市净率就是 2.5(10÷4)。每股净资产是指股东权益与总股数的比率,它反映的是每股股票所包含的净资产价值。
- 静态市净率:是用当前的股票价格除以最近一期财务报表公布的每股净资产。它主要基于已经确定的财务数据来计算,能够直观地反映在某一特定时间点公司股价相对于净资产的溢价情况。
- 动态市净率:考虑了公司未来净资产的变化预期,通常是通过对公司未来的盈利、资产增值、折旧等因素的预测来估算未来的每股净资产,然后用当前股价除以预测的未来每股净资产。不过这种方式的计算较为复杂,且对未来的预测准确性要求较高。
换手率也称 “周转率”,是指在一定时间内市场中股票转手买卖的频率。它是反映股票流通性强弱的指标之一。其计算公式为:换手率 =(某一段时期内的成交量 ÷ 流通股数)×100%。例如,某只股票在一个月内的成交量是 500 万股,其流通股数是 1000 万股,那么该股票在这个月的换手率就是(500÷1000)×100% = 50%。
- 股票活跃度判断
高换手率通常意味着股票的交易活跃。当换手率较高时,说明有大量的股票在投资者之间进行买卖。比如,一只股票的日换手率达到 10% 以上,这表明该股票当天的交易非常活跃,市场关注度高。这种情况可能出现在股票有重大利好消息发布时,众多投资者纷纷买入,原有投资者也可能趁机获利了结,导致成交量大增,换手率升高。
低换手率则表示股票交易清淡。如果一只股票的日换手率低于 1%,可能说明该股票缺乏市场吸引力,投资者对其关注度较低。这可能是因为公司没有重大事件发生,或者市场对该公司的前景预期较为平稳,没有引起投资者大量买卖的冲动。 - 主力动向分析
对于投资者来说,换手率是分析主力资金动向的重要指标。如果一只股票在一段时间内持续保持较高的换手率,并且股价也在稳步上升,这可能是主力资金在吸筹后的拉升阶段。主力通过不断地买入和卖出,制造活跃的交易氛围,吸引更多的散户跟进,从而推动股价上涨。
相反,如果在股价高位出现高换手率,可能意味着主力在出货。主力将手中的股票大量卖给其他投资者,导致成交量放大,换手率升高。当发现这种情况时,普通投资者就需要谨慎操作,因为股价可能即将下跌。 - 市场情绪体现
换手率还可以反映市场情绪。在牛市行情中,由于投资者普遍对市场充满信心,参与交易的热情高涨,大部分股票的换手率都会相应提高。而在熊市行情中,投资者情绪低落,交易活跃度降低,换手率也会随之下降。例如,在 2007 年中国股市牛市期间,许多股票的日换手率都在 5% 以上,而在 2008 年熊市期间,换手率大幅下降,许多股票的日换手率不足 1%。
不同市场环境下的换手率特点 - 主板市场
在主板市场(如沪深主板)中,大盘蓝筹股由于盘子较大,流通股数多,一般换手率相对较低。例如,工商银行这样的大型银行股,其日换手率通常在 0.5% 以下。这是因为需要大量的资金才能推动这些股票的交易,而且这类公司的业绩和股价相对稳定,投资者的交易频率较低。而中小盘股票的换手率可能会相对较高,一些活跃的中小盘股日换手率可能达到 5% - 10% 左右。 - 创业板和科创板市场
创业板和科创板由于上市的公司大多是高科技、高成长型企业,具有较高的创新性和不确定性,投资者对这些公司的关注度和交易热情较高。因此,这些市场的股票换手率整体上比主板市场高。例如,一些热门的科创板股票,其日换手率可能会达到 10% - 20%,甚至更高。 - 换手率与股价的关系
- 正相关关系
在很多情况下,换手率和股价呈现正相关关系。当换手率持续上升,且有主力资金介入等积极因素时,股价往往会上涨。例如,一只股票被机构投资者看中,他们开始大量买入,使得换手率逐步升高,在资金的推动下,股价也会随之上涨。
这种正相关关系在股票的上涨初期和中期表现得较为明显。上涨初期,随着换手率的增加,更多的投资者开始关注并买入股票,推动股价上升;上涨中期,换手率维持在较高水平,说明市场对该股票的热度不减,股价继续攀升。 - 负相关关系
然而,在某些特定情况下,换手率和股价也可能呈现负相关关系。比如,当股票出现重大利空消息时,投资者恐慌性抛售,换手率急剧上升,但股价却大幅下跌。在股价高位时,如果换手率突然大幅增加,同时伴随着股价下跌,这很可能是主力出货的信号,此时股价可能会持续下跌。
因此,在分析换手率时一定需要结合流通股本(单位:万股)来看,不能单纯看换手率指标。
市销率(Price - to - Sales Ratio,P/S)是证券市场中用于衡量股票投资价值的一个重要指标,它等于股票价格除以每股销售收入。其计算公式为:市销率 = 每股市价 / 每股销售收入,其中每股销售收入 = 销售收入 / 总股数。例如,某公司股票价格为每股 50 元,公司销售收入为 1000 万元,总股数为 100 万股,那么每股销售收入为 10 元(1000 万 ÷100 万),市销率则为 5(50÷10)。
市销率可以用于评估公司的价值,尤其是对于尚未盈利或者盈利不稳定的公司来说,市盈率可能无法准确评估其价值,此时市销率就发挥了作用。因为销售收入相对利润而言更加稳定,不易受到会计政策等因素的干扰。比如一些新兴的互联网公司,在发展初期可能处于亏损状态,但销售收入增长迅速,通过市销率可以对这类公司的价值进行初步衡量。
对于投资者而言,市销率是一个重要的参考指标。一般来说,市销率较低的公司可能被市场低估,其股票可能具有投资价值。不过,这并不绝对,还需要结合公司的行业地位、增长前景等因素综合考虑。例如,同行业的两家公司,A 公司市销率为 1.5,B 公司市销率为 3,在其他条件相似的情况下,A 公司可能更值得关注。
市现率(Price - to - Cash - Flow Ratio,简称 PCF)是一种评估股票价值的财务指标,它是股票价格与每股现金流量的比率。其计算公式为:市现率 = 每股市价 / 每股现金流量。例如,某股票当前价格为 30 元,每股现金流量为 3 元,那么市现率就是 10(30÷3)。每股现金流量是公司经营活动产生的现金流量净额减去优先股股利之后,与流通在外的普通股股数的比值。
市现率有助于投资者衡量股票的价值。与市盈率相比,现金流量更难被企业操纵,因为利润可以通过会计手段进行一定程度的调整,而现金流量则更能真实地反映企业的实际经营状况。例如,一个企业可能通过延长应收账款账期来增加账面利润,但现金流量却不会因此而虚增。较低的市现率可能意味着股票被低估,投资者可以用相对较低的价格获取单位现金流量。
如何获取市盈率、市净率一系列指标
注意,在量化交易平台所获取到的市盈率一般都是滚动市盈率TTM
data=get_valuation('600036.XSHG',count=10,fields=['pe_ratio','pe_ratio_lyr','pb_ratio','ps_ratio','pcf_ratio','capitalization','circulating_cap','turnover_ratio'])
# 获取的参数依次为 市盈率、静态市盈率、市净率、市销率、市现率、总股本(万股),流通股本(万股),换手率
# 由于count填的是10,因此会追溯前10个交易日的基本信息。这里如果不填count,可以填上开始日期和截止日期。
# 要不填count,要不填日期,二选一
单因子分析
单因子策略和因子研究是目前国内外专业机构投资者都在实战使用的一套研究体系,从学术上讲,单因子模型是关于资产定价(选股)的模型,与资本资产定价模型和单指数模型不同,单因子模型认为股票的价格并不仅仅取决于证券的风险,还取决于其他一些因素,如,投资者未来预期收入及未来的投资机会等。
在研究单因子策略中,最重要的一个环节就是进行因子分析和因子挖掘,单因子分析也被看作真正开始进行量化投资研究的第一个进阶内容,同样,因子分析和因子挖掘也是专业的量化投资机构的量化研究员们主要的日常工作,挖掘因子的能力和有效因子的储备一定程度上就可以反应出一个量化研究员或者投资机构的能力。
因子1 波动率
波动率高的股票一般都是前20左右交易日涨跌幅度非常大的股票。
因子按照大的种类进行划分
估值因子
- 市盈率
- 市净率
- 市销率
- 市现率
- 企业价值倍数
- PEG
PEG 是市盈率相对盈利增长比率(Price/Earnings to Growth Ratio)的简称。它是用公司的市盈率(PE)除以公司未来 3 - 5 年的每股收益复合增长率。
例如,一家公司的市盈率为 20 倍,预计未来 3 - 5 年其每股收益的复合增长率为 10%,那么该公司的 PEG = 20/10 = 2。
盈利因子
- 销售净利率
- 毛利率
- 资产收益率
- 净资产收益率
交易因子
- 前期动量涨幅
- 前期涨跌幅
- 前期换手率
- 前期波动率
红利因子
- 股息率
- 股息支付率
- 每股未分配利润
市场因子
- 指数收益率系统性风险
成长因子
- 营业收入增长率
- 营业利润增长率
- 净利润增长率
杠杆因子
- 负债权益比
- 资产负债率
- 有息负债率
规模因子
- 流通市值
- 总市值
- 自由流通市值
市场预期因子
- 预测净利润增长
- 预测主营增长
- 盈利预测调整
数据获取
我们首先要获得相应的数据基础的数据类型有四种:公司基本面数据、量价数据、宏观数据和特色数据,例如,上市公司的财务报表和十大股东高管年龄属于公司的基本面数据;股票的成交价、成交量、港口信息等等属于量价数据;国民生产总值、国债、利率属于宏观数据;像新闻舆情、电商销售额等等都属于特色数据。
资本利得突出量
比如我们可以发现一个现象,就是交易者在盈利和亏损的时候风险偏好是不同的,当我们持仓股票盈利时,倾向于提前卖出股票而持仓亏损的时候则倾向于越跌越补,并非很容易卖出股票,特别是亏损很多的时候,惜售的心态更为严重。大部分人都会长期持有,等待解套,这个就是行为金融学里面的处置效应。
资本利得突出量CGO,就是一个基于这种心理挖掘出来的因子。CGO因此表示第t日这只股票市场持仓者相对参考价格的平均盈亏情况,因子值越大,浮盈越大,参考价格我们可以选择过去一段时间的成交均价,按照换手率加权平均的算法来进行计算。这个因子充分利用了投资者行为随盈亏变化而非对称的处置效应。
所以可能提前预支部分股票的见底 或可能提前预支部分股价下跌和反转。这个案例提示我们通过投资者行为偏好,特别是那些投资行为中的心理偏好开发出的模型或许效果更好。
更多推荐
所有评论(0)