大数跨境
0
0

单因子测试中的分析图

单因子测试中的分析图 概率游戏耐心等待
2025-11-14
35
1、单因子测试中的分析图,及简单代码示例

2、python漂亮的图,多因子选股基础知识梳理,单因子测试

3、单因子测试框架分享

4、单因子测试初步学习

5、【华泰金工林晓明团队】华泰单因子测试之海量技术因子——华泰多因子系列之十一



—— 第1篇 ——
单因子测试中的分析图,及简单代码示例


备注:如下例子以1天调仓为例(可以有1天\5天\10\20天调仓的图,可以更进一步分行业,产生每个行业的相关分析图

因子值分布直方图
取对数后的因子值分布直方图
标准化后的因子值分布直方图
中性化后的因子值分布直方图
IC时间序列
IC 分布图
IC均值
Q-Q图
IC热力图
因子加权组合累计收益率曲线(1条线)
收益率小提琴图
分组收益率曲线(N组->N条线)
多空组合:Top组与Bottom组收益率差值
多个因子相关性图
因子自相关性时间序列折线图

运行代码如下,产生上面的图形
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom scipy.stats import zscore, probplotimport statsmodels.api as smfrom statsmodels.stats.outliers_influence import variance_inflation_factorplt.rcParams["font.sans-serif"] = ["SimHei"]  # 用来正常显示中文标签plt.rcParams["axes.unicode_minus"] = False    # 用来正常显示负号np.random.seed(42)# =============================================================# 1. 模拟数据# =============================================================n_stocks = 200n_days = 100dates = pd.date_range('2025-01-01', periods=n_days)stocks = [f'Stock{i}' for i in range(n_stocks)]# 因子值(带偏态)factor = pd.DataFrame(np.random.randn(n_days, n_stocks)*2 + 1,                      index=dates, columns=stocks)# 收益率returns = pd.DataFrame(np.random.randn(n_days, n_stocks) / 100,                       index=dates, columns=stocks)# 行业:随机生成 5 个行业industry_list = [f'Industry{i}' for i in range(5)]industry_series = pd.Series(    np.random.choice(industry_list, size=n_stocks),    index=stocks)# =============================================================# 2. 行业中性化函数(OLS 残差法)# =============================================================def industry_neutralize_regression(factor_df, industry_series):    neutral_factor = pd.DataFrame(index=factor_df.index, columns=factor_df.columns)    industry_dummies = pd.get_dummies(industry_series, dtype=float)  # 防止 boolean -> sqrt 报错        X = industry_dummies.values    X = sm.add_constant(X)    for date in factor_df.index:        y = factor_df.loc[date].values.astype(float)        model = sm.OLS(y, X).fit()        neutral_factor.loc[date] = model.resid  # 残差 = 行业中性化因子    return neutral_factorfactor_industry_neutral = industry_neutralize_regression(factor, industry_series)# =============================================================# 3. 因子分布分析# =============================================================plt.figure(figsize=(164))# 原始因子plt.subplot(141)sns.histplot(factor.values.flatten(), bins=30, kde=True)plt.title("原始因子值分布")# 对数(避免负数)plt.subplot(142)shift = factor - factor.min().min() + 1e-3sns.histplot(np.log1p(shift.values.flatten()), bins=30, kde=True)plt.title("对数因子值分布")# 标准化plt.subplot(143)sns.histplot(zscore(factor.values.flatten()), bins=30, kde=True)plt.title("标准化因子值分布")# 行业中性化后plt.subplot(144)sns.histplot(factor_industry_neutral.values.flatten(), bins=30, kde=True)plt.title("行业中性化因子分布")plt.tight_layout()plt.show()# =============================================================# 4. IC 分析# =============================================================# IC = 当日 factor vs 次日收益率ic_series = factor.shift(1).corrwith(returns, axis=1)plt.figure(figsize=(164))# IC 时间序列plt.subplot(141)ic_series.plot()plt.title("IC 时间序列")# IC 分布plt.subplot(142)sns.histplot(ic_series, bins=20, kde=True)plt.title("IC 直方图")# Q-Q 图plt.subplot(143)probplot(ic_series.dropna(), dist="norm", plot=plt)plt.title("IC Q-Q 图")# 季节性热力图plt.subplot(144)n_col = 10n_row = int(np.ceil(len(ic_series) / n_col))ic_matrix = np.full((n_row, n_col), np.nan)ic_matrix.flat[:len(ic_series)] = ic_series.valuessns.heatmap(ic_matrix, cmap="coolwarm")plt.title("IC 季节性热力图")plt.tight_layout()plt.show()# =============================================================# 5. 因子加权收益率(Factor-weighted Portfolio)# =============================================================print("\n计算因子加权收益率...")# ---- 使用行业中性化后的因子 ----factor_used = factor_industry_neutral.copy()# ---- Step 1: 横截面标准化 Z-score ----factor_z = (factor_used - factor_used.mean(axis=1).values.reshape(-11)) \           / factor_used.std(axis=1).values.reshape(-11)# ---- Step 2: 权重归一化(权重绝对值和为 1)----weights = factor_z.div(factor_z.abs().sum(axis=1), axis=0)# ---- Step 3: 组合收益 ----factor_portfolio_return = (weights * returns).sum(axis=1)# ---- Step 4: 累计收益 ----factor_portfolio_cum = (1 + factor_portfolio_return).cumprod()plt.figure(figsize=(104))plt.plot(factor_portfolio_cum)plt.title("因子加权累计收益率(行业中性化因子)")plt.xlabel("Date")plt.ylabel("Cumulative Return")plt.grid(True)plt.show()# =============================================================# 6. 分组收益率分析# =============================================================n_groups = 5factor_rank = factor.rank(axis=1)group_labels = (factor_rank / (n_stocks / n_groups)).apply(np.ceil)group_returns = pd.DataFrame(index=dates)for g in range(1, n_groups+1):    mask = (group_labels == g)    group_returns[f'Group{g}'] = (returns * mask).sum(axis=1) / mask.sum(axis=1)# 小提琴图plt.figure(figsize=(104))sns.violinplot(data=group_returns)plt.title("分组收益率小提琴图")plt.show()# 分组累计收益cum_returns = (1 + group_returns).cumprod()plt.figure(figsize=(104))for col in cum_returns.columns:    plt.plot(cum_returns[col], label=col)plt.legend()plt.title("分组累计收益率")plt.show()# 多空组合long_short = cum_returns['Group5'] - cum_returns['Group1']plt.figure(figsize=(104))plt.plot(long_short)plt.title("多空组合累计收益率 (Top-Bottom)")plt.show()# =============================================================# 7. 换手率分析(模拟)# =============================================================turnover = pd.DataFrame(np.random.rand(n_days, n_stocks),                        index=dates, columns=stocks)plt.figure(figsize=(104))turnover.mean(axis=1).plot()plt.title("平均换手率时间序列")plt.show()# =============================================================# 8. 因子相关性矩阵 + VIF# =============================================================factor2 = pd.DataFrame(np.random.randn(n_days, n_stocks), index=dates, columns=stocks)factor3 = pd.DataFrame(np.random.randn(n_days, n_stocks), index=dates, columns=stocks)factors_mean = pd.concat([factor.mean(), factor2.mean(), factor3.mean()], axis=1)factors_mean.columns = ['Factor1''Factor2''Factor3']# 相关性矩阵plt.figure(figsize=(65))sns.heatmap(factors_mean.corr(), annot=True, cmap="coolwarm")plt.title("因子相关性矩阵")plt.show()# VIFX = factors_mean.valuesvif_df = pd.DataFrame({    "Factor": factors_mean.columns,    "VIF": [variance_inflation_factor(X, i) for i in range(X.shape[1])]})print("\nVIF 方差膨胀系数:")print(vif_df)# =============================================================# 9 因子自相关性时间序列# =============================================================# 因子滞后一天factor_lag = factor.shift(1)# 横截面相关:当日 factor 与 昨日 factor 的横截面相关factor_autocorr = factor.corrwith(factor_lag, axis=1)plt.figure(figsize=(124))factor_autocorr.plot()plt.title("因子自相关性时间序列(Factor Autocorrelation)")plt.xlabel("Date")plt.ylabel("Autocorr")plt.grid(True)plt.show()

VIF 方差膨胀系数:    Factor       VIF0  Factor1  1.0145071  Factor2  1.0232602  Factor3  1.027935


—— 第2篇 ——

python漂亮的图,多因子选股基础知识梳理,单因子测试


如何从大海中取到一杯牛奶?


上一期介绍了梳理了一些关于投资交易的基础知识,如何从大海中取到一杯牛奶?多因子选股基础知识梳理,这一期介绍一些关于单因子测试的基础知识。


量化交易、单因子测试、python画图


 ✦ 

背景..

1904年英国的一个心理学家发现学生的英语、法语和古典语成绩非常有相关性,他认为这三门课程背后有一个共同的因素驱动,最后将这个因素定义为“语言能力”。


基于这个想法,发现很多相关性很高的因素背后有共同的因子驱动,从而定义了因子分析,这便是因子分析的由来。


 ✦ 

股因子...

因子选股的目标是解答两个方面的问题。


1)什么样的因素会导致股票上涨或下跌?

2)涨得好(坏)的股票都有什么样的特点?


一个因子描述了众多资产共同暴露的某种系统性风险,该风险是资产收益率背后的驱动力。因子收益率正是这种系统性风险的风险溢价或风险补偿,它是这些资产的共性收益。

因子就是影响价格的因素,例如盈利性、估值、现金流、成长性、价格动量、规模、波动率、技术指标等等


 ✦ 

多因子模型...

r𝑖 表示资产收益率,

𝛽𝑖𝑗 表示股票 i 在因子 j 上的因子暴露(factor loading),

𝑓𝑗 表示因子收益率,

𝜇𝑖 表示股票 i 的残差收益,

根据现代金融理论的定义,投资组合获取的收益均可以分为两个部分,一部分是来自市场的收益也就是𝐵𝑒𝑡𝑎,另一部分则是超出市场的收益也就是我们常说的𝐴𝑙𝑝ℎ𝑎



 ✦ 

发展历程...

1)价值投资 ---- 1992年,Fama和French对美国股票市场决定不同股票回报率差异的因素的研究发现,股票的市场的beta值不能解释不同股票回报率的差异,而上市公司的市值、账面市值比、市盈率可以解释股票回报率的差异,因此提出了著名的三因子模型。


2)动量投资 ---- 1997年,卡哈特(Carhart)认为研究股票收益应在Fama和French的三因子模型基础上加入动量效应,构建四因子模型。动量是物理学名词,是与物体的质量和速度相关的物理量,一般而言,一个物体的动量指的是这个物体在它运动方向上保持运动的趋势。而股市中的动量投资策略依据的就是动量效应,又称为“惯性效应”,即某个时段跌得最深或长得最凶的股票往往会沿着原来的方向继续运动。


3)质量投资 ---- 在其他条件一定的情况下,财务质量高的上市公司应该带来更高的投资回报,因此有必要引入刻画公司资产质量的因子。2013年,Fama的学生阿斯内斯 (Asness)对公司“质量”进行量化,并提出了五因子模型。


4波动率投资 ---- 研究者们又发现低波动率(低beta)股票组合的实际收益比高波动率(高beta)股票组合的要高,这一现象无法用五因子模型解释,于是法拉瑞利等于2013年又将波动率因子引入,建立了六因子模型。




 ✦ 

构建流程...


 ✦ 

因子来源...

 ✦ 

财务因子...

1)估值因子

我们认为市场是非理性的,在很多时候对一些信息会过度解读,导致市场情绪过度反应,从而阶段性地形成对某些个股的高估与低估。而估值存在均值回复的特性,所以定期卖出被高估的股票、买入被低估的股票就可以获得收益。

  • PB:市净率,每股股价与每股净资产的比率;

  • PE:市盈率,公司当时股价与每股盈利的比率,股价作最新收盘价;

  • PEG:市盈率相对盈利增长比率;

  • PS:市销率,指股票价格与每股销售收入之比;

  • PCF:市现率,股票价格与每股现金流量的比率;


2)盈利因子

我们认为盈利能力强的公司,其股票往往具有较大的上涨空间。由此派生出盈利稳定性因子,盈利稳定的公司应当具备稳定性溢价,继而可以获得超越市场的收益。如ROE(净资产收益率)、销售净利率。


3)营运因子

通常我们衡量一家上市公司的营运能力会使用存货周转率、总资产周转率等指标。也可以计算这些指标的同比或环比作为派生指标,例如存货周转率的变化率等。


4)成长因子

我们认为处于高速增长期的公司具有更好的前景,因此其股票具有更大的上涨空间。常用的指标有EPS的同比增长,ROE的同比增长,营业额的同比增长,利润总额的同比增长。


5)现金流因子

现金流稳定性因子,经营现金流质量因子等。


 ✦ 

分析师因子...

券商都会有自己的研究所,研究所的卖方分析师的一个重要产出成果就是卖方研究报告。分析师们会通过对上市公司调研、分析公开数据和与行业内的专家交流等方式了解上市公司的概况,然后融入自己的逻辑推理,最终写出相应的报告。报告中通常会对上市公司的盈利进行预测,给出股票买入或者卖出等评级。


其实分析师群体对一只股票的涨跌是有一定话语权的。这个话语权来源于两个方面。

  • 分析师付出了自己的劳动,对公司进行了调研、数据研究等,其预测结果具有一定的增量信息,可以用于辨识公司未来的运营发展情况。

  • 市场上有投资者会关注分析师的报告,并且参考分析师的意见进行股票的投资,继而影响股价。

无论是哪种因素在起作用,从逻辑上来讲,这一类因子都可能对股票的涨跌具有较好的预测能力。


1)EPS(Earnings Per Share) 一致预期变动


2)评级变化率

在国内,卖方分析师的研究报告往往会对股票做出买入、增持、中性、减持或卖出这样的评级

对于同一只股票,我们可以收集一下其过去一段时间发布的研报中,每一个评级的数量占比。如果负面评级的占比在上升,那么后续该股票可能面临较大的下跌风险。我们可以根据负面评级的占比变化或者正面评级的占比变化构建“评级变化率因子”。


 ✦ 

技术因子...

技术因子就是量价信息,以及衍生出的一些技术指标。


技术类因子在经济直觉上不如财务因子和分析师一致预期因子等逻辑清晰,但是在二级市场上,很多股票上涨/下跌的理由可能就是简单的资金驱动,比如跌破20日均线造成恐慌导致的下跌等。


个人经验:无论什么技术指标因子,描绘的都是时间序列上量价信息的变动情况,在时间维度,都是描绘快速上涨,缓慢上涨,快速下降,缓慢下降的四个阶段。


 ✦ 

其他因子...

1)多模态舆论数据

  • 例如在雪球、东方财富股吧、同花顺等投资者公开交流的网站中,用户产生的内容可以代表当前市场参与者的情绪;

  • 淘宝等电商平台的销售数据往往可以作为部分上市公司产品销量的前瞻指标;

  • 招聘网站的招聘数据可能隐藏着公司业务扩张的信息等;

  • 制造工厂的运输忙碌程度,保安人员的工资;

这些数据往往是非结构化(视频,音频,文本)的,需要通过一定的方法进行清洗、处理之后才可以构成因子。

2)ESG因子

ESG是“Environment、Social Responsibility、Corporate Governance”的缩写,指环境、责任和公司治理。

ESG因子目前在海外比较流行,而在国内则较少被提及。

ESG因子背后的逻辑是公司的价值有一部分会通过对环境的保护、对社会的外部性和公司内部治理的合理性所体现出来。

如果公司能够有长远的目标,在ESG方面进行努力,那么该公司往往容易获得市场的认可,从而其股价也能具有较好的表现。


 ✦ 

数据来源...

宏观数据来源:

国家统计局,人民银行,证监会,国家外汇管理局,国务院发展研究中心,银保监会,财政部,国家外汇交易中心,海关总署

公司财务数据:

上交所,深交所,北交所,巨潮资讯,全国股转系统

行情数据:

同花顺财经,东方财富网,新浪财经,腾讯财经,金融界,大智慧,集思录,通联数据

非结构化数据:

公告及报告(上市公司报告,财务报告,行业报告),新闻报道,研究报告(机构研究报告,分析师报告等),媒体数据(热搜,消息,评论)

另类数据:

地理空间数据(人口密度,交通状况,城建水平),气象数据(温度,湿度,气压),电商消费数据,公司招聘数据,足球比赛数据,彩票数据

金融终端软件:

万得金融终端,iFinD,Choice,通达信

数据接口:

tushare,聚宽,米筐,


 ✦ 

因子预处理...

上证50和中证500这两个指数背后的个股行业的分布差异很大,但是市值是这两个指数最显著的差异。通常我们会用这两个指数之间的关系来判断市场上大小盘股票走势的相对强弱。

由此我们可以发现,市值的大小对股票的涨跌是有较大影响的,这也是为什么会有“盘子太大,涨不起来”这一说法的原因。

从整体上来看,在A股过去的历史中,中证500代表的中小市值股票是跑赢上证50代表的大市值股票的,也就是投资者更加偏好小市值股票。


为什么国内投资者更偏爱小市值?

  • 小市值的公司往往是新兴企业,未来经营具有很大的不确定性,所以投资者投资小市值的公司需要获得相应的风险溢价,故小市值公司的股票表现会好于大盘股

  • 我国股市的投资者炒作情绪较浓重,在一个不能做空的市场,往往炒作情绪越浓重的板块越容易产生超额收益。由于小盘股往往是炒作的对象,因此小市值公司股票表现会有好于大盘股的表现。

  • 小市值的公司往往都是轻资产的公司,成长性较好。在我国这样一个增速较快的经济体中,这一类公司往往具有更好的前景,从而其股价涨幅较好。


上市公司市值分布情况

我们会发现这个分布严重右偏,这是因为我国中小市值的公司特别多,市值分布极度不均匀。

大的公司如中国平安、工商银行等,市值规模上万亿元;而有的小公司的市值只有十几亿元甚至数亿元。大市值的公司数量少,中小市值的公司则多如牛毛,这样的市场特征就形成了这样的市值分布。对市值进行对数处理能够使其分布更接近于正态。


去极值与异常值

市值因子在市场中具有“边际效用递减”的效应,有的股票市值因子的分数是6,有的是2,假设收益率与市值之间相关,相关系数只会比3更小。


为了体现这一点,通常的做法是选择一个阈值,将不在阈值范围之内的因子值进行特殊处理,让其体现出“边际效用递减”这一经济现象。


极值压缩:当因子值大于或小于某一个阈值的时候,我们就将该因子值设为这一阈值:

  • 3σ:将3倍标准差设为市值因子的阈值

  • MAD(Median Absolute Deviation 绝对中位数法):

    MAD = median(|X-MeianX|)

    即给定一个数据样本集,首先求其中位数,然后求原始数据减去中位数得到一个新的数据样本,再求这个新的数据样本集的中位数即是绝对中位差。

  • 百分位法:直接定义上下百分比的分位数作为阈值


异常值 ---- 数据源或者某些突发情况造成数据失真,或是公司财务数据出现问题。处理方法:多来源同比,定义数据校验规则。比如两家公司市值都是10亿,一家公司当年利润为-1亿元,另一家公司市值是1亿元。计算PE分别为-10与10,按照估值因子逻辑,选择PE更小的公司投资,但PE为-10这家公司是亏损状态,并不使用这条逻辑了。


标准化

去除因子量纲


中值化

不同行业的体量不同,不能单纯的将市值因子置于整个市场中比较,应该是行业内部比较。

均值法:

  • 将股票按照行业进行分组,计算每个行业分组的因子行业均值

  • 将每个股票的因子值减去对应的行业的因子的均值,得到的差值:该因子在行业中性化后的中性值。

回归取残值法:

以ROE因子为例,我们想要研究净资产收益率对资产收益的影响,除了行业因子,还有市值因子会对ROE因子本身有影响,例如在同一个行业中,大市值的公司和小市值的公司往往体现出不同的特征。公司规模大往往借贷成本低,同时相对于行业中的其他公司来说处于较为成熟的时期,估值相对会较低。

我们对因子暴露值和市值、行业做线性回归,最后用剩下的残差替代因子值。这个残差肯定是跟市值和行业无关的。


 ✦ 

单因子测试...


IC RankIC

挖掘和计算因子的最终目的是希望因子能够准确预测涨跌。

import pandas as pd
df = pd.DataFrame({    '因子值': [320, -1, -2],    'T+5日收益率1': [85.73.6, -3.3, -6.5],    'T+5日收益率2': [0.1, -5.710, -90.1],})df.corr()


信息系数(Information Coefficient,IC) :我们用相关性衡量因子对收益率的预测能力,在因子测试中,这种相关性计算的结果,称为信息系数(Information Coefficient,IC),代表的是因子对未来股票收益率的预测作用。


皮尔逊相关(Pearson correlation)系数:

分子:两者协方差,衡量两个变量的总体误差;分母:两者方差,衡量两个变量离散程度


import pandas as pd
df = pd.DataFrame({    '因子值': [320, -1, -2, -3],    'T+5日收益率1': [85.73.6, -3.3, -6.5, -8],    'T+5日收益率1_异常': [85.73.6, -3.3, -850],})
df.corr(method='spearman')

spearman相关系数的特点是只考虑两个向量中排序是否一致,这样就能很好地避免异常值的影响。


斯皮尔曼相关(Spearman correlation)系数:

这一方法只考虑排序结果,因此用spearman计算出来的IC也叫作“RankIC”,或者叫“秩IC”


分组测试

在时间截面上根据因子值的大小对股票进行分组。

例如,我们把2023年12月05日这一天市场上的股票先按照被测试因子值从小到大排序,然后将其按照数值大小分成一定的股票组别。我们可以规定每组的股票数量相同,也可以指定特定因子值区间为一组。分组测试就是在每一次调仓的时候将之前的分组组合调整为新的分组组合。

多空组合:做多表现最好的因子组合同时做空因子表现最差的组合。


稳定性检验

如果某一个因子的预测效果很好,但是因子值的变动较大,对股票的打分不断有较大幅度的变化,那么就会造成每次调仓的时候换手率过高。过高的换手率会带来更高的交易成本和流动性风险。因此,我们也会检验分组组合的换手率情况以及因子的自相关性。


 ✦ 

单因子测试结果分析...

 ✦ 

IC分析...


IC分析表

IC分析表,是基于IC定义,计算了不同调仓周期下(1D, 5D, 10D)、每一天因子的IC,从而获得了每一个调仓周期下IC的时间序列,然后根据不同的计算方法获得的统计结果。


对于IC而言,投资者最希望的就是一个因子具有稳定的IC序列。

  • 均值高 ---- 高均值表示因子对未来收益的预测能力整体较强;

  • 方差小 ---- 表示IC序列相对稳定,波动性较小。这表明因子在不同时间点对未来资产收益的预测能力相对一致,投资者更能依赖因子信号;

  • t统计量大,p-value小 ---- 这里的t值衡量了IC均值相对于零的显著性水平,t统计量越大,表示IC均值与零的差异越显著。p-value表示在零假设成立的情况下,观察到的t统计量或更极端的情况发生的概率,较小的p-value表明拒绝零假设。即IC均值与零之间存在显著差异。即这个差异不仅仅是随机的波动,而是真实存在的。

  • IC skew < 0 ---- 表示右偏,右偏表示IC分布的尾部向右延伸,即正的IC值比负的更为突出。右偏的分布可能意味着因子对未来正收益的预测更为准确,因为右偏表示正值更为集中。

  • IC Kurtosis ---- 标准正态分布的峰度为3,我们希望不存在肥尾的情况。IC序列的分布尾部相对较轻,不会出现过于厚重或扁平的尾部。极端值较小,这有助于确保因子在不同市场环境下的稳定性,而不容易受到极端事件的影响。


IC的时间序列图

对于一个理想的因子IC,尽管允许其围绕0轴上下波动,但是它大部分时间应当处于正区间,这样才能确保因子的收益为正。


IC分布图

高均值第方差的特征,可能是极度的肥尾和右偏带来的。观察IC分布图,避免这样的误判。


Q-Q(Quantile)图

横轴是标准正态分布的分位数,纵轴是我们要观测的分布的分位数。要利用QQ图鉴别样本数据是否近似于正态分布,只需看QQ图上的点是否近似地在一条直线附近,图形是直线说明是正态分布。

对于某一局部,如果Q-Q图中的散点图斜率大于1,那么观察的分布相对于正态分布而言离散性更大,更加具有肥尾特征;反之,如果散点图的斜率小于1,那么分布离散性更小,相对正态分布而言具有瘦尾特征。


IC季节性热力图


 ✦ 

收益率分析...


收益率分析表

  • 高Alpha ---- 高Alpha收益表示因子在解释资产收益中的独立性和能力。如果一个因子能够提供相对于市场基准更高的超额收益,这意味着它能够捕捉到市场中未被完全反映的信息或价值,从而对投资组合产生积极的贡献。

  • Beta ---- 低Beta表示因子相对于市场的不敏感性。如果一个因子的Beta较低,那么它对市场波动的反应较小,减小了投资组合的回撤。

  • Top组与Bottom组差值大 ---- 该因子能够明显地区分资产的表现,从而具有更强的预测能力。


    分组收益率柱状图


在不同的调仓周期中,因子的分组收益率应该都遵循单调向上的原则。因子值越高,其分组收益率应该越高。


小提琴图

分组收益率柱状图是按照分组平均收益率来绘制的,收益率小提琴图收益率的完整分布。分布的形态越肥就代表收益率分布越集中。1天调仓、5天调仓、10天调仓收益率分布的集中度是递减的。这也符合直观的金融逻辑:即股票收益率在短期呈现更多的随机性,而将时间维度拉长后则随机性降低,变得相对可预测。


因子加权收益率走势图


计算因子相对因子绝对值和的权重大小,用权重乘每个标的的价格,求和。基于调仓周期,计算收益率。


分组走势图


分组后的每一组股票都成为一个独立的组合,以每天组合内个股收益率的均值作为该组合的收益率。这样,当其分为10组的时候,就会有10条收益率曲线。同样的, 图形越发散,说明因子的效果越好,因子对股票的区分度越高。一个好的因子通常在这里会体现出较强的筛选性,也就是分组的收益率曲线会分化,各自的差异不断体现出来。


Spread走势图

差值越大,这说明因子对于收益率不同的股票的区分度越高;此外,还需要收益率差值曲线保持方向上的稳定。


 ✦ 

换手率分析...


换手率分析表


因子自相关性分析表


自相关性可以理解为惯性,我们考虑因子造成的换手率的时候,其实就是在考察因子的稳定性,也就是因子值每一期的变化。因子的自相关性越高,其值越接近1,说明这一因子是比较稳定的因子,造成的换手率必然不会很高;反过来,如果因子的自相关性极低,甚至是负相关性,则说明因子的波动较大,造成的股票换手率必然不低。


换手率走势图


 ✦ 

ROE因子测试...


IC分析

在2017年之后IC值的数级有一个明显的抬升。


收益率分析

ROE因子的分组平均收益率单调性还可以。这说明长期拿着高ROE的股票具有一定的超额收益,可以跑赢市场。真正的价值投资者也是这样的观点:ROE才是一个公司价值真正的体现,长期持有高ROE公司的股票可以获得长期确定性的收益。


从ROE因子加权组合累计收益率曲线来看,ROE因子在2013年至2015年的表现其实并不好,在2015年之后才开始好转,在2017年之后爆发。这与前面ROE的IC时间序列基本吻合。


从ROE因子分组组合的累计收益率曲线来看,在2017年之前ROE因子几乎没有体现出什么区分度。在2017年的时候,10个组别的收益率曲线没有明显的发散,但在2017年之后开始呈现明显的发散态势。


换手率分析

从ROE因子换手率图来看,ROE作为财务因子,有一个很明显的特征:当新的财报公布的时候,会有明显的换手发生,这也是绝大部分财务类因子的一大特征。



—— 第3篇——

单因子测试框架分享

单因子测试框架分享

单因子分析对于很多读者来说,看似熟悉,但是没有自己上手做一遍,还是会产生很多问题。本篇报告中我们将给出一些基本面因子的具体测试结果,我们借鉴了光大证券的《单因子分析体系》,这也是行业内较为认可的一套测试流程,以BP和ROE_TTM因子为例,测试了预测性、稳定性、单调性和相关性等等指标。为下一步的多因子组合的构建打下基础。


未经授权,严禁转载。



多因子模型理论背景


根据现代金融理论的定义,投资组合获取的收益均可以分为两个部分,一部分是来自市场的收益,也就是Beta,另一部分则是超出市场的收益,也就是我们常说的Alpha。如何准确的定义和寻找股票市场中的Alpha一直是学术界和业界不断探索的问题,已有的模型包括资本资产定价模型CAPM和Fama-French三因素模型等,而多因子模型正是基于套利定价理论(APT)而建立的更为完善的定价模型。


从模型的构建目标上看,我们可以将多因子模型分为Alpha模型和风险模型。以Barra为代表的风险模型更多的用于投资组合的业绩归因,而在这篇报告中我们将首先讨论的是用于预测股票未来收益的Alpha模型,并将对Alpha模型中最关键的因子测试部分做详细介绍。



多因子模型构建流程


多因子模型是个较为复杂的体系,模型的构建流程往往包括以下几个方面:


首先是样本的选取,为了使得模型测试的结果更加符合实际的投资情况,我们需要对ST,PT股票以及停牌等无法买入的股票做剔除;


其次是数据的清洗,数据清洗的过程很容易被轻视或忽略,但异常值和缺失值对模型的影响往往是很显著的,在数据清洗的步骤我们需要格外的小心。


图1 多因子模型构建流程图


本文我们将展示单因子测试的框架流程。



单因子测试具体步骤


>>>  样本筛选


测试样本范围:中证800指数成份股
测试样本期间:2012-01-01至2019-01-13


为了使测试结果更符合投资逻辑,我们设定了三条样本筛选规则:


(1) 剔除选股日ST/PT的股票;
(2) 剔除上市不满一年的股票;
(3) 剔除选股日由于停牌等原因而无法买入的股票。


>>>  数据清洗


我们本次采用研究中最常用的 winsorize 缩尾处理,取置信区间为95%,超出区间的定义为异常值。对于异常值,把数值改为95%置信区间的边界。


>>>  因子标准化


我们采用研究中常用的Rank标准化处理因子数据。达到的效果是,讲因子值转换为排序值,因子值越小,排序值越大,一定程度上降低了噪音的影响。


>>>  因子测试模型


我们采取截面回归测试的方法,每期针对全体样本做一次回归。进行截面回归判断每个单因子的收益情况和显著性时,需要特别关注A 股市场中一些显著影响个股收益率的因素,例如行业因素和市值因素。市值因子在过去的很长一段时间内都是A股市场上影响股票收益显著性极高的一个因子,为了能够在单因子测试时得到因子真正收益情况,我们在回归测试时对市值和行业进行了控制。单因子测试的回归方程如下所示:



其中, Ri-R中证 800为个股相对基准(中证800)的超额收益率, Factor 为因子值, Industry 为行业虚拟变量, Market_Capital 为市值变量。


>>>  因子有效性检验


(1)主要通过 t 检验分析因子的有效性以及稳定性。


t值绝对值序列的均值:之所以要取绝对值,是因为只要t值显著不等于0即可以认为在当期,因子和收益率存在明显的相关性。但是这种相关性有的时候为正,有的时候为负,如果不取绝对值,则很多正负抵消,会低估因子的有效性;


t值绝对值序列大于1.96的比例:检验|t| > 1.96的比例主要是为了保证|t|平均值的稳定性,避免出现少数数值特别大的样本值拉高均值。


(2)主要通过因子 IC 分析来判断因子的有效性和预测能力。


因子k的IC值一般是指个股第T期在因子k上的暴露度与T + 1期的收益率的相关系数。当得到因子IC值序列后,我们可以仿照t检验的分析方法进行计算。


IC值序列的均值及绝对值均值:判断因子有效性;
IC值序列的标准差:判断因子稳定性;
IC值序列大于零(或小于零)的占比:判断因子效果的一致性。


为了同时能够展示所检验因子的单调性以及多空组合的收益情况,我们通过分层打分回溯的方法作为补充。进行分层回溯时,我们在各期期末按照因子值大小排序分成10等分,在分组时同样做行业中性处理,组内市值加权。


下面我们就将展示通过以上测试流程得到的各个因子的具体测试结果。



因子测试结果


基本面因子是十分重要的因子,决定了公司的内在价值。下表列出了具体的基本面因子及因子描述。


表1 基本面因子明细表


下表给出了因子 t 值和 IC 值的检验结果。


表2 基本面因子测试结果


特别地,我们为了检验因子的单调性,对于每一个因子,取前三组的平均收益率和后三组平均收益率进行了组间差异t检验,同时绘制了做多第一组做空第十组的资金曲线。组间差异t检验结果如下表所示:


表3 各因子前三组平均收益率和后三组平均收益率之差t检验



分层回溯法结果展示


由于单因子回归法所得到的因子收益值序列并不能直观的反应因子在各期的历史收益情况以及单调性,为了同时能够展示所检验因子的单调性,我们将通过分层打分回溯的方法作为补充。


在进行分层回溯法时,我们在各期期末将因子值大小分成10等分,第一组为因子值最小的组,第十组为因子值最大的组。在分组时同样做行业中性处理。


各个因子分层回溯测试结果如下所示(以BP、ROE_TTM为例):


图2 BP因子t值柱状图


图3 BP因子IC值柱状图


图4 BP因子累积收益率折线图


图5 BP因子超额收益率折线图


图6 BP因子的策略收益、夏普比率等指标图


图7 BP因子做多第一组做空第十组资金曲线


根据BP因子的表现我们可以看出,BP因子是一个较好的选股因子,BP因子值最小的组收益率最高,最大的组收益率最低。这可能说明买入BP被低估的股票是一种较有效的投资策略。另外值得注意的是,以BP因子选股在2018年这样的极端市场中并没有一个好的效果,BP因子的多空组合收益既来自做多组,也来自做空组。


图8 ROE_TTM因子 t 值柱状图


图9 ROE_TTM因子 t 值柱状图


图10 ROE_TTM因子累计收益率折线图


图11 ROE_TTM因子超额收益率折线图


图12 ROE_TTM因子策略收益、夏普比率等指标图


图13 ROE_TTM因子做多第一组做空第十组资金曲线


根据ROE_TTM因子的表现我们可以看出,ROE_TTM因子是一个较好的选股因子,但似乎并没有BP因子更明显,ROE_TTM因子值最小的组收益率最高,但其因子值倒数第二的组收益率也几乎是最高,最大的组收益率最低。这可能说明买入ROE_TTM被低估的股票是一种较有效的投资策略。另外值得注意的是,以ROE_TTM因子选股在2018年这样的极端市场中并没有一个好的效果,ROE_TTM因子的多空组合收益既来自做多组,也来自做空组,而且做空组的贡献很大。


最后有几点注意事项提醒各位读者:


1、单因子测试对于因子选股是极其重要的,有效的单因子才可以作为多因子选股策略的基础。对于通往多因子,也是一条必经通路。


2、对于涨停跌停的股票我们没有做剔除,这一部分数据可能会影响最终的结果。大家可以在回测体系内,自行剔除。


3、有一些单因子测试报告披露的多空组合收益率可能很高,但是要注意多空组合收益率的来源。如果来源于做多组是我们期望的结果,如果来源于做空组,就要谨慎使用该因子。




—— 第 4 篇 ——

单因子测试初步学习

最近了解到对于单因子测试用信息系数IC(Information Coefficient)值来评价是较好的方法。遂去学习了一下大体思路,但具体的实现方法以及计算过程还有待学习。

        以下是对IC的 定义,参考自知乎BigQuant的回答:

不同信息系数的计算是有差异的,目前较常用的是Rank IC :

Normal IC     ——即皮尔逊相关关系

Normal IC,即某时点某因子在全部股票的因子暴露值与其下期回报的截面相关系数;

Rank IC  ——斯皮尔曼相关系数

RankIC,即某时点某因子在全部股票因子暴露值排名与其下期回报排名的截面相关系数。

第一步:因子IC分析

        假设回测因子为a,单个因子的IC值即指个股在第T期在因子a上的暴露度与T+1期的收益率的相关系数。

IC值越高,表明该因子对股票收益的预测能力越强

        通常,IC参考值有:

IC 值序列的均值及绝对值均值:判断因子有效性;
IC 值序列的标准差:判断因子稳定性;
IC 值序列大于零(或小于零)的占比:判断因子效果的一致性。

第二步:分层回测

        依照第一步中单因子对股票池的测试结果,对个股进行排序,分为N个组合进行回测。

        构建方法详细说明如下:
股票池、回溯区间、截面期(换仓期)可均与动态调整;
选取一个基准组合(比如沪深300),将所有个股按照得分进行排序,按得分从高到低分成将所有个股按照得分进行排序,按得分从高到低分成N个组合,每个组合中的股票等权配比。
评价方法:回测年化收益率、年化波动率、夏普比率、最大回撤、胜率等。

一般来说,越有效地因子,分层越为明显。

---------------------------------------------

具体第一步测完如图1所示:

图1  按月回测IC值序列

可以看出到IC值序列随时间的变化,较好的参考值可以是IC绝对值均值的大小,以及他们是否有一边倒的倾向。

第二步测完如图2所示:

图2  分层回测

步骤二中的分层回测,若回测分层越清晰,则此因子越有效。




—— 第5篇 ——

【华泰金工林晓明团队】华泰单因子测试之海量技术因子——华泰多因子系列之十一

【华泰金工林晓明团队】华泰单因子测试之海量技术因子——华泰多因子系列之十一

摘要

本文对101个技术因子进行测试,其中存在具备长期稳定选股能力的因子

本文测试的101个技术因子均是由价量数据计算得来的,有些因子的构建公式较为复杂,难以直观理解其中蕴含的逻辑。我们对不同调仓周期、不同因子处理方式、不同回测区间下的因子测试结果进行对比,筛选出7个比较有效的因子,与4个常见风格因子(对数总市值、过去20日收益率、过去20日平均换手率、过去20日波动率)进行对比,发现筛选出的因子具有长期稳定选股能力,IC_IR(信息比率)值明显高于4个风格因子。观察这些因子的计算公式发现,它们的构建逻辑比较类似,都是选择存在价量背离现象的个股。


因子处理方式、调仓周期的改变会对测试结果造成一定影响

在本文测试的技术因子中,大部分选股效果较好的因子在做行业及市值中性处理时IC_IR值较高,说明剔除了行业、市值这两个最重要的风险因素后因子效果得到了普遍提升。我们筛选出的7个有效因子的Rank IC衰减速度都与过去20日收益率因子相当或稍慢一些,而过去20日收益率因子是比较传统的适于月频调仓的因子,因此可以推测这7个有效因子也适于月频调仓。实际上,通过分层测试法可以证实这7个因子确实都比较适合月频调仓,其中也存在2个因子同时适合月频或双周频调仓。这些因子在周频调仓设置下受到过高的交易成本影响,效果有所降低。


筛选出的7个因子头部选股能力均有限,构建组合时需配置适量数目个股

为了考察因子的头部选股能力,我们将所有个股按截面因子值排序,选前j只股票等权配置构建投资组合,j取值范围为10~1500。测试结果显示,在达到年化收益率最高时,因子Alpha3,13,15,16,44,50,55的最优j取值分别为400,80,80,40,200,80,400,说明这些因子在只选取头部少量个股时效果均达不到最优,需选取适量股票构建较为稳健、分散的投资组合。并且,这些因子头部组合的超额收益并不是十分稳定,而多空收益则稳定得多,说明因子多空收益的良好表现部分源于空头组合,而A股市场很难做空个股,所以要理性看待。

 

筛选出的7个因子构建逻辑类似,都是选择存在价量背离现象的个股

我们筛选出的7个有效因子构建逻辑比较类似,核心算法都是f(X,Y,d),其中函数f为计算相关系数或协方差的函数,变量X为日频价格数据,变量Y为日频交易量数据,d是一个取值在3~10之间的常数。f(X,Y,d)的作用在于探查个股在过去d个交易日的价量联动或背离属性,结合测试结果来看,这些因子的逻辑都是选择存在价量背离现象的个股。实际上,这些因子的计算公式都是比较简洁、易理解的,说明因子的构建方式并不是越复杂越好,我们在挖掘因子的过程中也可以借鉴本文待测因子中比较好的选股逻辑,通过替换变量、函数等方式获得属于自己的Alpha因子。


风险提示:单因子测试结果是历史经验的总结,如果市场环境改变,存在失效的可能。本文仅对因子在全部A股内的选股效果进行测试,测试结果不能直接推广到其它股票池内。技术因子的构建方式比较复杂,其中一些因子的构建逻辑难以解释,使用需谨慎。


技术因子的选取及测试框架

技术因子的选取


本文是华泰多因子系列研究第十一篇,是单因子测试系列的第九篇。在多因子系列首篇报告中,我们系统地阐述了多因子模型的基本理论,详细描述了多因子模型构建的流程,在多因子系列第二篇到第九篇报告中,我们分别对估值、成长、动量反转、换手率、波动率、资金流向、财务质量、一致预期类因子单独进行详细的研究和检验,通过综合对比评价,筛选出能持续获得稳健收益的优质因子,这正是构建多因子选股模型的关键一步。在多因子系列第十篇报告中,我们对因子合成环节进行了一些粗浅的探讨,本报告作为该系列第十一篇,我们将视角移回单因子测试环节,将主要针对101个技术因子(下文将该待测因子集简称为“101技术因子”)进行分析测试,通过回归法、IC值分析、分层测试法等方法检验各因子的有效性,并试图对某些有效因子的逻辑进行解释。

 

本文将要测试的101个因子计算公式详见图表2~4,它们大多是由日频的价量数据计算得来,有些因子的构建公式较为复杂,难以直观理解其中的构建逻辑。这一点与多因子系列前作中涉及的风格因子有较大区别,之前测试的估值、成长、波动率等因子可以认为是投资者经验的演绎,“先有逻辑、后有公式”;本文中待测因子则是通过一些技术手段生成的,需要通过检验确定这些因子的有效性,再试图去解释其中一些有效因子的内涵,“先有公式、后有逻辑”。以上两种方式对应于选股方法中的“演绎法”与“归纳法”,都有一定的存在基础,本文中我们就要对这101个技术因子进行详细分析,从中挖掘出适用于A股市场的选股因子。这些因子构建公式中涉及的变量、函数、算符定义如图表1所示。



技术因子的测试框架


101技术因子是基于价量数据计算的,因子值变化比较快,一般而言因子有效时间也比较短。本报告选择5、10、20个交易日作为持仓周期,分别用回归法、IC值分析法对这101个因子进行测试并进行初步筛选,再用分层测试法对重点因子进行回测,主要观察TOP组的表现,最后将几种测试方法的结果综合对比筛选出有效因子,并试图对其中的构建逻辑进行解释。



技术因子与传统价量因子的相关性


我们将全回测期切分为三个时间阶段,时间阶段1(2010/1/4~2015/6/12)对应2010年初至2015年中,时间阶段2(2015/6/15~2016/12/30)对应2015年中至2016年底,时间阶段3(2017/1/3~2019/4/30)对应2017年初至回测期末。我们分别计算101技术因子与对数总市值、过去20日收益率、过去20日平均换手率、过去20日波动率因子的日频截面因子值相关系数,并在三个时间阶段内分别求平均值,如下表所示(若某因子在任一时间阶段与任一因子的相关系数均值都不大于0.2,则略去不展示)。

 

三个阶段内因子相关情况大体一致、细节略有不同。实际上,大部分因子与4个传统价量因子相关性都不大,可与后文因子测试结果形成参考对照。



单因子测试方法简介及结果分析

在多因子系列首篇报告《华泰多因子模型体系初探》(2016.09)中,我们系统地介绍了有效因子识别(即单因子测试)的理论基础和研究思路,在多因子系列第二篇报告《华泰单因子测试之估值类因子》中我们着眼于实践过程,给出了详细的流程操作说明。之后的第三至第六篇报告中均沿用第二篇报告的测试方法。在第七篇报告中,由于资金流向因子适于更短持仓周期,我们将月调仓改为10日调仓,其余测试细节保持不动。本报告中101技术因子的属性与测试细节与资金流向因子相仿,为避免阅读障碍,我们此处将单因子详细测试流程再复述一遍。


单因子测试方法简介


回归法

回归法是一种最常用的测试因子有效性的方法,具体做法是将第 T+1 期的因子暴露度向量与期的股票收益向量进行线性回归,所得到的回归系数即为因子在期的因子收益率,同时还能得到该因子收益率在本期回归中的显著度水平——t值。在某截面期上的个股的因子暴露度(Factor Exposure)即指当前时刻个股在该因子上的因子值。第期的回归模型具体表达式如下。


在所有截面期上,我们对T+1回归测试,能够得到该因子的因子收益率序列(即所有截面期回归系数构成的序列)和对应的t值序列。t值指的是对单个回归系数的t检验统计量,描述的是单个变量显著性,t值的绝对值大于临界值说明该变量是显著的,即该解释变量(期个股在暴露度)是真正影响因变量(期个股收益率)的一个因素。也就是说,在每个截面期上,对于每个因子的回归方程,我们设:


该假设检验对应的t统计量为

其中SE(a^T)代表回归系数a^T的标准差的无偏估计量。一般t值绝对值大于2我们就认为本期回归系数a^T是显著异于零的(也就是说,本期因子X对下期收益率具有显著的解释作用)。注意,我们在回归模型中加入了市值、行业因子,能在一定程度上规避市值、行业因素对财务质量因子的影响。

回归模型构建方法如下:

1.  股票池:全A股,剔除ST、PT股票,剔除每个截面期下一交易日停牌的股票。

2.  回溯区间:2010/1/4~2019/4/30。

3.  截面期:每个交易日作为截面期计算因子值,与该截面期之后5、10、20个交易日内个股收益进行回归。

4.  数据处理方法:

a)     因子计算方法详见图表1~4;

b)     中位数去极值:设第T期某因子在所有个股上的暴露度向量为D_i,D_M为该向量中位数,D_M1为向量|D_i - D_M|的中位数,则将向量D_i中所有大于|D_M +5D_M1|的数重设为D_i +5D_M1,将向量D_i中所有小于D_M -5D_M1的数重设为D_M -5D_M1;

c)      中性化:以行业及市值中性化为例,在第T期截面上用因子值(已去极值)做因变量、对数总市值因子(已去极值)及全部行业因子(0/1哑变量)做自变量进行线性回归,取残差作为因子值的一个替代,这样做可以消除行业和市值因素对因子的影响;

d)      标准化:将经过以上处理后的因子暴露度序列减去其现在的均值、除以其标准差,得到一个新的近似服从N(0,1)分布的序列,这样做可以让不同因子的暴露度之间具有可比性;

e)     缺失值处理:因本文主旨为单因子测试,为了不干扰测试结果,如文中未特殊指明均不填补缺失值(在构建完整多因子模型时需考虑填补缺失值)。

5.  回归权重:由于普通最小二乘回归(OLS)可能会夸大小盘股的影响(因为小盘股的财务质量因子出现极端值概率较大,且小盘股数目很多,但占全市场的交易量比重较小),并且回归可能存在异方差性,故我们参考Barra手册,采用加权最小二乘回归(WLS),使用个股流通市值的平方根作为权重,此举也有利于消除异方差性。

6.  因子评价方法:

a)     t值序列绝对值均值——因子显著性的重要判据;

b)     t值序列绝对值大于2的占比——判断因子的显著性是否稳定;

c)      t值序列均值——与a)结合,能判断因子t值正负方向是否稳定;

d)     因子收益率序列均值——判断因子收益率的大小。


IC值分析法

因子的IC值是指因子在第T期的暴露度向量与T+1期的股票收益向量的相关系数,即

上式中因子暴露度向量X^T一般不会直接采用原始因子值,而是经过去极值、中性化等手段处理之后的因子值。在实际计算中,使用Pearson相关系数可能受因子极端值影响较大,使用Spearman秩相关系数则更稳健一些,这种方式下计算出来的IC一般称为Rank IC。

 

IC值分析模型构建方法如下:

1.      股票池、回溯区间、截面期均与回归法相同。

2.      先将因子暴露度向量进行一定预处理(下文中会指明处理方式),再计算处理后的T期因子暴露度向量和T+1期股票收益向量的Spearman秩相关系数,作为T期因子Rank IC值。

3.      因子评价方法:

a)      Rank IC值序列均值——因子显著性;

b)      Rank IC值序列标准差——因子稳定性;

c)      IC_IR(Rank IC值序列均值与标准差的比值)——因子有效性;

d)      Rank IC值序列大于零的占比——因子作用方向是否稳定。


分层回测法

依照因子值对股票进行打分,构建投资组合回测,是最直观的衡量因子优劣的手段。分层测试法与回归法、IC值分析相比,能够发掘因子对收益预测的非线性规律。也即,若存在一个因子分层测试结果显示,其Top组和Bottom组的绩效长期稳定地差于Middle组,则该因子对收益预测存在稳定的非线性规律,但在回归法和IC值分析过程中很可能被判定为无效因子。


分层测试模型构建方法如下:

1.      股票池、回溯区间、截面期均与回归法相同。

2.      换仓:在每个截面期核算因子值,构建分层组合,在截面期下一个交易日按当日收盘价换仓,交易费用默认为单边0.15%。

3.      分层方法:先将因子暴露度向量进行一定预处理(下文中会指明处理方式),将股票池内所有个股按处理后的因子值从大到小进行排序,等分N层,每层内部的个股等权重配置。当个股总数目无法被N整除时采用任一种近似方法处理均可,实际上对分层组合的回测结果影响很小。

4.      多空组合收益计算方法:用Top组每天的收益减去Bottom组每天的收益,得到每日多空收益序列r_1, r_2, r_3,...r_n,则多空组合在第n天的净值等于(1+r_1)(1+r_2)(1+r_3)...(1+r_n)。

5.      评价方法:全部N层组合年化收益率(观察是否单调变化),多空组合的年化收益率、夏普比率、最大回撤、月胜率等。

 

三种方法的关系

首先介绍一下回归法和IC值分析法之间的关系。

 

我们先介绍一个引理。设X,Y为两个向量,则[corr(X,Y)]^2=R^2,其中R^2为线性回归Y=aX + b或线性回归X=aY+b的可决系数(其中a, b是待回归系数)。

 

如果我们在单因子测试(线性回归法)中使用模型

(r是股票收益率,X是因子暴露度,c是常数项,c可以理解为市场因子)并且假设我们在计算因子IC值的时候,不预先对因子暴露度进行市值、行业调整了,就使用原始的因子暴露度X,则本期因子IC值为corr(X, r),根据引理,因子IC值的平方就等于单因子测试的回归模型的R^2。

 

所以,因子IC值本质上反映的是下期收益率和本期因子暴露度的线性相关程度(R^2的平方根),是使用该因子预测收益率的稳健性(IC值越大,这个因子的收益越稳定,波动越小);而回归法中计算出的因子收益率本质上是一个斜率,反映的是从该因子可能获得的收益率的大小,这并不能说明任何关于线性拟合优度的信息(也就是说,因子收益率很大时,也可能出现R^2很小的情形);至于回归法中计算出的t值,在一元线性回归中t值与R^2反映的信息一致(二者对应关系为,当R^2=0时t值也为0,当R^2=1时t值为无穷大),但是由于我们所采用的回归模型包括了行业变量,所以t值仅代表被测因子对股票收益的解释能力(而不能代表模型的整体拟合优度)。实际计算过程中因子会进行一些预处理,回归方程也有可能引入其它风格变量使其表达形式更复杂,导致IC值和t值无法理论上互推,但前面所述结论的本质不变。

 

总结一下,IC值反映模型整体线性拟合优度,t值反映被测单因子对模型的解释能力是否显著,因子收益率与前两者差别较大,它反映的是可能获得的收益率的大小,而对这个收益是否稳健未知。

 

其次介绍一下回归法和分层测试法之间的关系。

 

假设本期因子值与下期收益完全线性相关,满足。此时IC值绝对值为1,回归法中的因子收益率为。并且假设本期因子值X服从[0,1]均匀分布,那么当按因子从小到大等分N层测试时,第i层组合的下期收益为,多空收益(第N层收益减去第1层收益)为

【声明】内容源于网络
0
0
概率游戏耐心等待
股票、期货、期权、A股、美股、港股、基金、股指期货、商品期货、全球ETF、国债、外汇、黄金、石油、全球市场、全球品种、融资融券投资交流。涉足技术、宏观、心态、量化交易、机器学习、大盘统计。交易原则:概率游戏、耐心等待属于自己原则的交易机会。
内容 292
粉丝 0
概率游戏耐心等待 股票、期货、期权、A股、美股、港股、基金、股指期货、商品期货、全球ETF、国债、外汇、黄金、石油、全球市场、全球品种、融资融券投资交流。涉足技术、宏观、心态、量化交易、机器学习、大盘统计。交易原则:概率游戏、耐心等待属于自己原则的交易机会。
总阅读431
粉丝0
内容292