因子研究
多因子研究简介
-
人们发现在证券市场上,特定的时间段内,某些指标与证券的收益存在一定的相关性,比如:2017年,大市值的个股相对比小市值个股,平均而言有一个更好的收益。那么:
- 如何寻找与证券收益高相关性的因子?
- 如何判断因子与证券收益有明显的相关性?
- 如何验证找到的因子选出的证券确实能带来超额收益?
-
因子研究的目标是帮助用户解决上述三个问题。因子检测提供因子分析工具,帮助用户检测因子与证券收益的相关性,因子库提供实时监控功能,用户可查看同花顺提供的因子有效性及用户自定义因子有效性,因子策略用于验证所选因子在模拟回测中的收益是否真能实现超额收益。这个因子分析的过程就是多因子研究。
因子检测
参数说明
因子参数包括对因子的权重,各类因子的方向和对各自因子的数据处理
- 权重分配方式
- 自定义、等权重两种方式
- 自定义模式下所有因子权重比例加和必须为1
- 默认方式为等权重
- 因子方向
- 一共有两种:1和-1
- 1表示正序,从大到小排列,因子值越大的股票会分组至前几组
- -1表示倒序,效果反之
- 因子数据处理
- 因子数据处理内容包括缺失值处理、极值处理、标准化
- 具体处理方式见数据处理
- 回测周期
- 回测起始时间目前最早可设定为2005年1月1日
- 股票池
- 因子检测所覆盖股票池
- 可选项有沪深300、中证500、中证800和全A
- 基准指数
- 用于因子分析中做对比使用,包括计算超额收益等指标,可选项有沪深300、中证500、中证800、创业板
- 调仓周期
- 规定多长时间对组合中的证券进行买入、卖出操作
- 目前支持的自定义X日、X周和X月,X可由用户自定输入,需为正整数
- 因子分组
- 股票按所设定的组数进行划分,持仓为等权重,不可更改
- 分组数量最多支持20组
- 回看天数
- 仅在期货因子检测中生效
- 表示每次调仓时参与计算的历史数据的长度
算法说明
向导式代码生成
自由勾选添加因子,设置数据处理参数及回测参数,自动生成因子检测代码,无需编程也可上手操作。对于有编程基础的用户,可以针对模板代码在原界面进行修改也可复制代码到“我的研究”中进行调试。向导式代码生成仅在股票因子检测中可用
自定义因子算法
自定义因子算法可通过变量赋值来修改因子检测的相关设置,比如测试区间、调仓周期、数据预处理等
样例代码中留有一个函数sfactor_data
,用于用户编写因子算法。函数中可使用SuperMind提供的所有数据进行因子值计算,取数函数参考“API 文档”。函数返回的数据格式需为dict
,key
为因子名称,value
为因子值DataFrame
,index
为股票代码,columns
为时间。
数据处理
数据处理主要在因子检测前对因子数据处理,数据处理内容包括缺失值处理、极值处理、标准化。
缺失值处理
目前对于缺失值提供两种处理方式:均值法和回归填充法
-
均值法
- 使用同一时间截面的数据均值对缺失值进行填充,此方法计算简单,减少数据丢失量。
- 但是现实意义不大,因子值的大小往往和公司自身的属性关联较大,简单的使用市场整体平均数值反而会扰乱因子分析结果。
-
回归填充法
- 以存在缺失值的变量为因变量,以其他全部或部分变量为自变量,用无缺失的数据拟合回归方程。本回归填充法使用行业及市值作为自变量,对缺失因子进行预测。
- Y=β0+β1X1+β2X2
- 同一个截面先使用无缺失值的数据构建回归方程,求出系数β0,β1,β2。然后把因子值缺失股票的行业类别及市值带入公式,求出因子值Y。此方法可以理解根据公司行业及市值寻找最相近的因子值。
极值处理
中位数法、三倍标准差、四分位,具体公式见4.3.1。
标准化选项
标准化法、rank值标准化、极差正规化,具体公式见4.3.2。
因子检测报告
因子检测报告用于展示因子检测结果,内容主要有三部分:分组回测、IC检测、行业分组。
分组回测
分组回测包含了分组净值曲线、分组绩效分析、多空组合、换手率分析。
-
分组净值曲线
- 记录分组股票的历史收益率走势。
-
分组绩效分析
- 分组绩效分析是计算各个分组组合的常用评价指标。
- 包括:年化收益率、年化波动率、夏普比率、最大回撤、年化超额收益率、超额收益年化波动率、信息比率、相对基准月胜率。
-
多空组合
- 多空组合是把分组收益率进行多空配置后得到的收益率曲线。
- top-down组合多空表示多头第一组股票,空头最后一组股票得到的收益率曲线。
- top-基准组合多空表示多头第一组股票,空头基准得到的收益率曲线。
- down-基准组合多空表示多头最后一组股票,空头基准得到的收益率曲线。
- 换手率是记录各个组合历史调仓时的换手率数据,并按年进行汇总统计。
IC检测
- 对因子进行IC检测,每个调仓周期都有对于的一个IC值。
- IC计算方法:
- 通过各期的IC 值,判断出因子的延续性;比如:下图中,蓝线代表对应日期的相关系数,红线是近30个交易日的IC均线,如果蓝线始终在x 轴上方(或者下方),红线明显远离0轴,那么说明延续性很好。如果蓝线总是在x轴上下波动,红线在0附近,那么说明因子的延续性很差。比如下面的图显示在2015年9月份开始,到2015年12月份,所示因子都是表现出比较好的反向延续性。
行业分组
按行业类别,对同一个行业内的股票按因子值从大到小进行分组,每个调仓日重新分组,统计整个投资期间各个分组的收益率。行业分类标准默认按申万一级行业划分。
因子入库
因子入库功能会根据用户编写的因子算法(见说明文档2.4)持续更新因子数据,并每日生成最新的因子检测报告。
点击因子入库按钮后会进行弹窗,需要用户输入因子的名称、简称及类型。因子简称目前只支持英文字符及下划线。入库成功后的因子可在因子库中查看,详见说明3.1.3 自定义因子。
入库后的因子可通过函数 get_sfactor_data(start_date, end_date, stocks, factor_input)
,例如获取'trix'
因子,输入为:get_sfactor_data('2017-01-01', '2018-10-10', ['000001.SZ','000002.SZ'], ['trix'])
因子库
因子分类
因子分为技术因子、财务因子和自定义因子,目前因子指标在不断更新中。
技术因子
- 包括量价指标、趋势型、超买超卖型、能量指标、压力支撑型。
- 例如:
参数 | 名称 | 因子参数 | 公式 | 类型 |
---|---|---|---|---|
bbi | 多空指数 | BBI(3,6,12,24) | BBI = (3日均价 + 6日均价 + 12日均价 + 24日均价)/ 4 | 趋向类 |
cr | 能量指标 | BBI(3,6,12,24) | CR = ∑(H-PM)/∑(PM-L)× 100 | |
PM:上一交易日中价((最高、最低、收盘价的均值) | ||||
H:当天最高价 | ||||
L:当天最低价 | 能量类 | |||
obv | 能量潮 | obv | 多空比率净额= [(收盘价-最低价)-(最高价-收盘价)] ÷( 最高价-最低价)× V | 量价型 |
财务因子
包括成长能力、盈利能力、营运能力、估值、偿还能力。
参数 | 名称 | 公式 |
---|---|---|
pe | 市盈率 | 市盈率(PE) = (股票在指定交易日期的收盘价 × 当日人民币外汇牌价 × 截至当日公司总股本) / 归属母公司股东的净利润 |
ratio_of_sales_to_cost | 销售成本率 | 销售成本率 = 营业成本 / 营业收入100% |
net_profit_div_income | 净利润/营业总收入 | 净利润 / 营业总收入 = 净利润 / 营业总收入100% |
更多技术因子与财务因子请参照因子数据文档。
自定义因子
SuperMind目前支持两种方式上传自定义因子:csv文件和因子算法代码。
- 上传CSV文件
- 上传因子数据必须为csv格式。
- csv文件中数据的格式:列名为symbol、date、value。
- 其中symbol必须为SuperMind 证券代码格式,如‘000001.SZ’。
- date格式为'%Y-%m-%d',如'2017-3-2';value是因子值。
因子监控
用于展示系统因子及用户自定义因子的检测结果,每天系统都会自动对所有因子进行因子检测,生成最新的检测数据。因子监控默认显示的信息包含:因子名称、因子类型、股票池、主动年化收益、最高夏普比率、IR、IC均值、换手率、调仓频率,展示的指标可通过右上角编辑表头进行更改,指标数值选取的是因子检测分组中夏普率最大的分组数值。点击相应的因子可跳转至详细的因子检测报告,因子检测报告展示最近计算成功的结果。
因子策略
因子选择与设置
因子选择
- 根据研究方向,选择相应因子进行研究。
- 常见的因子
一级分类 | 二级分类 | 因子数量 |
---|---|---|
财务因子 | 营运能力 | 11 |
- | 成长能力 | 12 |
- | 估值 | 12 |
- | 偿还能力 | 15 |
- | 盈利能力 | 14 |
技术因子 | 超买超卖型 | 技术因子 |
- | 能量指标 | 10 |
- | 趋势型 | 17 |
- | 量价指标 | 13 |
- | 压力支撑型 | 9 |
自定义因子 | - | - |
因子方向
- 因子方向:因子的排序方向。
- 默认的排序方向:
因子方向 | 含义 | 说明 |
---|---|---|
1 | 正序 | 因子的值越大越好 |
0 | 逆序 | 因子的值越小越好 |
- 如果设置为正序,市值因子值将从大到小排序,排在前面的都是大市值股票
- 如果设置为逆序,市值因子值将从小到大排序,排在前面的都是小市值股票
- 不同因子可以在因子方向设置不同值,但对于解读这因子的人,必须对此很清楚。否则,就可能出现整体性的偏差
因子方向设置可能导致的误导性
- 在多因子研究过程中,如果多个因子的因子方向不一致,可能对整体性解读因子,造成间歇性的短路。
- 实例:
因子 | 因子方向 | 说明 |
---|---|---|
市值 | 逆序 | 规模越小越好 |
盈利ROE | 正序 | 盈利能力越高越好 |
综合因子 | 市值小,盈利能力强 | 小盘蓝筹 |
把市值因子的因子方向换一下:
因子 | 因子方向 | 说明 |
---|---|---|
市值 | 正序 | 规模越大越好 |
盈利ROE | 正序 | 盈利能力越高越好 |
综合因子 | 市值小,盈利能力强 | 小盘蓝筹 |
总结:因子方向是正序、逆序无所谓,但理解因子的综合得分很关键。
因子比例
因子研究数量 | 因子比例说明 |
---|---|
单因子的比例 | 对于单因子,因子比例必须等于100 |
多因子的比例 | 对于多因子,各个因子比例的和必须等于100 |
因子筛选条件
实际的量化投资过程中,对那些指标值异常的证券往往采取回避的手段。同样在因子筛选的过程中,为了和现实的投资过程接近,最终保留下来的因子往往是剔除了异常因子值的。比如,我们常常剔除每股收益小于0的股票等
筛选条件 | 说明 |
---|---|
无 | 无筛选条件 |
介入 | 介于某个区间值 |
大于 | 大于某个值 |
大于等于 | 大于等于某个值 |
小于 | 小于某个值 |
小于等于 | 小于等于某个值 |
等于 | 等于某个值 |
不等于 | 不等于某个值 |
百分比区间 | 介于某个百分比区间内 |
排名区间 | 介于某个排名区间内 |
回测基本参数设置
用于调整因子回测的基本参数,包含内容有回测周期、股票池、调仓周期、因子分组、基准指数等。
所有的参数设置内容都会在算法代码中显示相应的代码。
股票池
选项有沪深300、中证500、中证800、全A。
调仓周期
可自定义频率,计算周期字段有日、周、月。
因子分组
用户可自定义分组数,范围1-20。
基准指数
选项有沪深300、中证500、中证800、创业板。
数据处理
因子极值处理
因子分析的过程是一个由样本分析系统的过程,样本有它的局限性:
- 样本数有限,通过有限的样本去分析系统的性质肯定会存在一些差异。
- 样本中可能存在小概率事件,小概率事件会影响到对整体的分析。比如:分析小明的学习情况,他考了10次试,其中9次都是六十多分,1次是九十多分,那么这唯一一次的九十多分分可能就是一个低概率事件(可能小明考100次才能考中一次),这个样本就会对我们的分析产生影响。
- 异常数据的判断和剔除是数据处理中必不可少的一环。尤其是金融数据处理中,不进行极值处理,会对数据最终的分析造成很大的误差和误判。
常见的因子极值处理方法
- 中位数去极值法
- 3倍标准差法
- 四分位法
因子无量纲处理
多因子研究过程,一般都会采取打分法确定综合因子。但每个单因子所代表的含义和数量级不尽相同。要对多组不同量纲数据进行比较,需要先将它们标准化转化成无量纲的标准化数据。比如:市盈率指标是整数,而净利润增长率是一个百分比,两个指标简单的相加是无法真正体现该综合因子的实际意义的。
常见的因子无量纲处理方法
假设证券i 的第j个因子值为Xij
其中: i 小于证券的个数
j 小于因子的个数
- 标准化法(Z 值法,默认方法,最常用)
- 极差正规化
- 百分比打分法
- 采用百分比排名的方式打分。一般而言,百分比打分后的分数分布在0-100 之间
- 说明:
- 采用此种打分方式的目的是为了消除标准差非常大,而差距没有那么大的序列的影响。
- 对于同名的采用向上打分,和excel 中的percentrank 向下打分略有不同。这种差异仅仅会在处理同名时体现。
因子分组
SuperMind因子策略模块提供不分组,具体为;因子值排序后,从前往后按次挑选,直到满足持仓上限数量。
SuperMind因子策略提供三分位法分组,具体为;因子值处于前1/3为第一组,因子值处于中间1/3为第二组,因子值处于后1/3为第三组。
资金分配方式
常见资金分配方法
资金分配 | 说明 | 应用场合 |
---|---|---|
等权重 | 资金平均分配 | 多因子研究最常用 |
总股本加权法 | 根据总股本值进行加权分配,总股本值越大,资金分配越多 | 不常用 |
流通市值平方根加权法 | 根据流通市值平方根的值进行加权分配,流通市值平方根的值越大,资金分配越多 | 一般推荐 |
总市值平方根加权法 | 根据总市值平方根的值进行加权分配,总市值平方根的值越大,资金分配越多 | 不推荐 |
行业资金分配方法
如果不做行业中性处理:只考虑个股的资金分配,不考虑不同行业在基准中的权重差异。
SuperMind提供了同花顺二级行业的行业中性的处理,经过行业中性处理后,每个行业的配置比例和基准行业配置完全相同,个股行业中性处理后的比例(%)为:
因子策略样例代码
点选因子并设置回测参数后,会生成样例代码,用户可直接运行查看回测结果也可以复制样例代码至“策略研究”中进行调试。
样例代码:
策略调试:
因子选股
通过左边设置栏设定好因子及筛选条件后,点击执行选股可获取所选日期符合筛选条件的股票信息。如所选日期是非交易日,则不会有股票信息返回。选股结果会依据回测设置中的持仓数量及持仓组别进行筛选。
风险模型
- 风险模型主要提供证券的风险预测与业绩归因的作用。在此过程中,风险模型需要对股票收益建立因子模型,对组合过去历史的收益来源进行归因,依据统计方法和经验对股票未来风险形成推断与预测。对风险的度量要满足灵活性,准确性等要求。风险模型使用标准差来度量风险,且统计特征清晰,随时间变化稳定。对风险的预测有很多种方式,SuperMind风险模型建立在多因子模型的基础上,认为股票收益率与多个因子之间存在线性的关系,即:
r=α+βf+μ
其中:r为股票收益率向量,β为因子暴露,μ为特质收益,f为因子收益率
当股票特质收益率与公共因子不相关时,组合预期风险可以分解为公共因子解释的风险及特质风险:
wΣw′=wβΩβ′w′+wΔw′
其中:w为组合成份股权重,Ω为因子收益率的协方差矩阵,Δ为股票的特质风险矩阵,我们假设股票的特质风险之间也互不相关,所以Δ是一个对角矩阵
- 风险模型当中的因子主要包括两个部分,风格因子与行业因子:
- 行业因子:中信一级行业分类风格因子:市值,Beta,动量,估值,盈利,成长,杠杆,波动,非线性市值,流动性
- 风格因子:市值,Beta,动量,估值,盈利,成长,杠杆,波动,非线性市值,流动性
- 风险模型数据提取函数详见:get_stylefactor
组合优化器
组合优化器函数查询: OptimizePort,opt.add_constraint
优化方式
组合优化器优化方式暂定为三种:最大化夏普比(MVO)、最大化信息比率、效用最大化(剔除成本影响)优化方式后期持续增加,例如L-B模型、风险平价模型等常用的资产配置模型。
-
MVO算法
- 公式:
- 使用最优化算法求解,使target最大。R为一系列个股预期收益值[r1,r2,...rn],n为股票数量,为函数输入参数项,可以选择使用历史平均收益作为预期收益,需输入股票代码。W为各个股票的权重,为优化器所要计算的未知量[w1,w2,...wn],n为股票数量。∑为个股协方差矩阵(nXn),使用个股历史涨跌幅计算,取数范围为前120个周期,例如日频数据,则选取前120个交易日的涨跌幅,如为周频,则使用日频数据进行转换。
-
最大化信息比率
- 公式:
- 使用最优化算法求解,使target最大。R,W,∑定义同1.1.1中描述。Wb为个股在所选基准中所占的权重,为[wb1,wb2,...wbn],n为股票数量,当个股没有在基准中时,wb为0。基准可自由选择,作为函数输入项,默认为中证500。
-
效用最大化
公式:
使用最优化算法求解,使target最大。R,W,∑定义同1.1中描述。γ 为风险厌恶系数,函数输入参数项,默认为0.5。λ为交易成本,函数输入参数项,默认为0。Wi,t-1 为股票初始权重,可自定义输入,也可选择初始权重都为0。
约束条件
目前暂定七个约束条件:换手率、跟踪误差、组合风险、个股权重、风格因子主动暴露、行业因子主动暴露、行业中性。
- 换手率约束
-
约束条件
Wi,t 为函数求解值,个股优化后的权重;Wi,t-1 为股票初始权重,可自定义输入,也可选择初始权重都为0。Uplimit为输入的换手率限制值,不可小于0,最大值为100(默认单位%)。
-
- 跟踪误差
- 约束条件
- W和Wb为组合中的股票和基准中的股票做并集后的权重向量。例如组合中有股票A,B,C,基准包含的股票为A,B,D,则W和Wb两个向量都有四个元素[WA,WB,WC,WD]和[WbA,WbB,WbC,WbD],且WD和WbC 为0。
- [WA,WB,WC]为组合中股票的权重,为优化器所要求解的未知量[w1,w2,...wn],n为股票数量。∑为个股协方差矩阵(nXn),n为组合和基准股票的并集,算法同1.1.1中描述。基准可自由选择,作为函数输入项,默认为中证500。Downlimt和uplimit作为输入的跟踪误差上下限,downlimt不可小于0。
- 约束条件
- 组合风险
- 约束条件
- W为各个股票的权重,为优化器所要求解的未知量[w1,w2,...wn],n为股票数量。
- ∑为个股协方差矩阵(nXn),计算同1.1中描述。Downlimt和uplimit作为输入的组合风险上下限,downlimt不可小于0。
- 约束条件
- 个股权重
- 约束条件
- 可针对每个股票做单独的权重约束,downlimt和uplimt为所对应股票的权重上下限,可自由输入。函数输入项包含个股代码及所要约束的上下限值,输入的股票数量0<=w<=n(优化目标中所输入的股票总数)。
- 每个股票需在优化目标中输入的股票列表中,否则报错。为内置权重约束,所有股票的权重值加起来等于1。
- 约束条件
- 风格因子主动暴露度
- 约束条件
- Downlimt和uplimit为自定义输入的某个因子的暴露度约束上下限,输入方式为因子名称、下限值、上限值。当前共有十个风格因子,如需针对全部因子做限制,则需要输入十个相对应的风格因子暴露度上下限值。
- Xstyle 为个股对该风格因子的暴露度,为[x1 style1,x2style1,...xnstyle1]该数据由风险模型模块计算得出(目前易源博每日会更新该数据)。
- W为各个股票的权重,为优化器所要求解的未知量[w1,w2,...wn]。
- 约束条件
- 行业因子主动暴露度
- 约束条件
- Downlimt和uplimit为自定义输入的某个行业因子的暴露度约束上下限,输入方式为行业因子名称、下限值、上限值。
- 当前共有29个行业因子(中信一级),如需针对全部因子做限制,则需要输入29个相对应的行业因子暴露度上下限值。
- Xindustry 为个股对该行业的暴露度(即该个股是否属于该行业,属于为1,不属于为0)。W为各个股票的权重,为优化器所要求解的未知量[w1,w2,...wn]。 Windustry为该行业在基准中所占的权重,不是矩阵,为数值。
- 约束条件
- 行业中性
- 约束条件
- Xindustry 为个股对该行业的暴露度(即该个股是否属于该行业,属于为1,不属于为0)。W为各个股票的权重,为优化器所要求解的未知量[w1,w2,...wn]。
- Windustry为该行业在基准中所占的权重,不是矩阵,为数值。
- 约束条件
组合归因
什么是组合归因?
组合归因是对资产组合进行分析,将其回报和风险归到提前设定的可能的原因上。目前该功能可实现对股票型策略进行收益及风险拆分,主要分为Brinson分析和风格分析。
我们首先会对每一期的持仓表进行单期归因,然后将多期的结果使用进行累计。下面我们会介绍单期归因的算法和累计归因所得到的结果。
如何使用组合归因
策略成功回测后,在回测详情页面点击组合归因功能,如下图:
组合归因详解
Brinson组合归因
Brinson 是目前最为人知的归因方案。除了需要组合持仓内容之外,还设定一个基准。最初的brinson模型是把收益拆解为行业选择收益、个股选择收益和交叉收益,我们在传统模型基础上做了进一步的扩展,拆分出配置收益和交易收益。
多期brinson收益分解
对于各个拆分收益的计算如下(下述指标的计算只针对单期的brinson拆解,为了分析策略在一个周期里的收益归类,我们使用Carino简化因子调整。):
Carino简化因子的计算方式如下:
- Rt,bt为t期策略和基准的收益率;r,b为区间内策略和基准收益率。
使用简化因子对多期收益分解进行加和:
- At,St,It为t期收益的分解项。
行业绩效归因拆解
把收益按行业拆分,查看每个策略在每个行业是否带来了主动收益。图中主动收益展示的也是多期的收益率,通过Carino因子进行调整。主动风险计算的是多期主动风险的方差,衡量多期主动收益的稳定性。主动权重是统计整个回测区间内各行业主动权重的均值。
风格分析
-
基于风格因子的归因是一种更为精细的归因方式。我们使用同花顺内部准备好的一系列风格因子及因子收益率,将组合的回报和风险分别划分到这些因子上,从而得到组合的投资风格。当前包含的风格因子有:
风格因子代码 因子名称 含义 备注 beta beta 上市公司与指数之间的协同性 个股的Beta值,指数收益使用HS300 bq 估值 记账价值和市值的比值 市净率=总市值/归属于母公司所有者权益合计 earnings_yield 盈利 分析师预测与过去财年收益统计 growth 成长 由销售额及盈利统计 leverage 杠杆 上市公司的使用杠杆的情况 liquidity 流动性 由交易量和频率不同而带来的收益 momentum 动量 能量性指标,表示相对强度 从过去某一天开始,向过去再推504天,计算其每天的超额收益对数值,再针对这504天进行加权平均 non_linear_size 非线性市值 上市公司的规模处于中等的程度 size 市值 上市公司的规模,即该公司是大盘股的程度 对数市值 volatility 波动率 对大盘偏离的不确定性 -
风格归因效果图
其中主动收益是多期的收益率,通过Carino因子进行调整。主动风险计算的是多期主动风险的方差,衡量多期主动收益的稳定性。
-
策略和基准风格对比图:
-
衡量回测期内策略整体风格和基准的差异,点击特定的风格因子柱状图可查看策略及基准的历史风格变化,如下图:
-
组合风格稳定性:
-
选取策略组合在回测期间的四个界面查看其当期的主动收益、主动风险及主动暴露度。相关的计算公式如下: