寻找市场中的Alpha(上):WorldQuant的阿尔法设计理念
本文旨在向读者介绍Alpha的相关基本概念,以及寻找和检验Alpha的主要流程和方法。之前我们梳理了 WorldQuant经典读本FindingAlphas的概要以及WebSim的使用,在下篇中我们会介绍相关方法在BigQuant平台上的实现。
一、初识Alpha
1、什么是Alpha?
WorldQuant中提及的alpha是一个数学表达式,用来预测各种金融工具的未来走势。alpha同时也是对每种金融证券收益率的预测。如果用alpha反映每日每种金融证券收益率,同时每种金融证券的配置头寸比例与alpha成正比,则组合的回报率与标准差之比(也称为α的信息比率)可以达到最大化。
2、Alpha来自哪里?
如果数据永远不会改变那么就没有alpha。价格数据的变化反应并包含了信息,一个信息变化会导致alpha的变化。每个alpha都是一个表达式,其背后也对应了一个假设或者投资模式。例如:收盘价close这个alpha因子表达式,背后的假设就是股价越高未来收益越大。
市场中存在alpha是由于具有竞争目标的市场参与者之间的信息流不完善的结果。不同的短线、长线投资者之间理念不同且共存,每个投资者在市场中的行为都会合并产生模式。
因此Alpha就是一个表达式,其本质是一个信息流。如果投资组合中每只股票按照这个表达式的值作为投资权重比例并定期更新换仓就会得到一种投资策略,因此alpha也代表了一种投资模式/策略。例如:收盘价close这个alpha因子表达式,背后的假设就是股价越高未来收益越大,以此因子构建组合的权重比例起始就是定期轮仓购买高价股的投资模式/策略。
3、寻找Alpha
一个非常复杂的系统会表现出某种程度的可预测性。市场不断诞生有效的alpha(投资模式)并随着资金的介入而逐渐缩小,直到其逐渐失效。但这一过程将在市场上引入/创造其它的模式,从而诞生新的alpha。良好的样本内性能无法保证良好的样本外性能。历史数据的校验越多,对alpha的信心越大,但基本市场结构的变化也会让alpha无法继续有效。因此,需要不断在对alpha的验证和使用之间权衡和尝试。
alpha可以根据交易周期分类为
- 日内alpha:在某个事件后对仓位更新,例如跳空、涨停等
- 每日alpha:使用过去n天的数据对仓位每日更新
- 每周/每月alpha等,每周/每月对仓位更新
二、Alpha的来源
1、Alpha的典型来源如下:
- 价格/成交量
- 基本面
- 宏观数据
- 文本:如期刊、新闻、会议记录、社交媒体信息
2、很多学者研究并发现了一些市场上曾经有效的alpha:
Fama和French(1992)在CAMP模型的基础上增加了两个风险溢价,规模和价值,以解释股票回报率。规模效应表示较小的股票倾向于表现优于较大的股票。价值效应表示股票的市净率较高的股票在回报上有一个正的风险溢价。
Amihud和Mendelson(1986)记录了流动性较小的股票具有较高预期收益的流动性效应。
Pastor和Stambaugh(2003)专注于全市场流动性,衡量股票对总流动性的敏感性为“流动性β”。
Jegadeesh和Titman(1993)记录了股票动量效应,最近的赢家往往优于最近的输家。
考虑到这些alpha的高知名度,它们的夏普比率可能不会高,否则聪明的资金就会蜂拥而至,直到收益不再具有吸引力。
3、有时alpha不是直接从信息模型中获取:
1) 风险因素模型:通过控制风险暴露或者消除某些因素的风险暴露来提高阿尔法
2) 关系模型:某些工具可能导致或滞后于另一些工具,从而产生套利机会
3) 微结构模型
三、组合Alpha
每个回报来源都来自一个风险源,因此任何投资组合都可以被看作是风险的组合。
两个投资组合的业绩差异来自于它们所利用的风险来源和回报的数量,以及它们在每个来源上的相对权重。每个alpha提供了一个新的收益来源,并进一步稀释了投资组合的风险负荷(假设它与投资组合中的风险正交),从而降低了这些单个风险中任何一个对投资组合产生重大影响的可能性。
理想的投资组合将保持对任何一个广为人知的风险因素(Beta)的零负荷,以及对他所能发现的尽可能多的未知因素(Alpha)的非零负载。而搜索新alpha的过程中,需要不断拷证alpha的稀缺性/背后的逻辑/规模和持久性。
任何阿尔法或投资组合的风险都可以通过多样化来降低。值得注意的一点是,任何一个好的阿尔法都是试图分别选择赢家和输家去做多头和做空。但它并不总是100%的准确性。如果投资标的范围不够大应该做好止盈止损的预案。
此外,基本数据通常表现出明确的季度周期,而且价格量是统一的,如果模型包含来自许多不同类别的数据,则显着增加了模型的复杂性,并且模型变得更容易受到数据中的噪声的影响。
四、评价alpha
1、评价单一Alpha的质量好坏标准:
- 表达式简单;
- 具有良好的样本内sharpe;
- 对于数据和参数的微小变化不敏感;
- 适用于多个市场;
- 适用于多个地区;
- 最近的收益曲线创新高;
- 通常可以使用信息比率(alpha的平均值/标准差)来粗略评估其预测能力;
- 使用保证金(投资金额/交易数量)粗略衡量alpha对交易成本的敏感度,较高的保证金意味着不受交易成本影响。
2、评价单一Alpha的失效:
- 回撤超过正常水平
- 夏普比率下降
3、评价某个Alpha在一个Alpha组合中的价值:
检验alpha是要看它为交易带来多少的风险调整后利润,实践中很难精确衡量,因为很难将利润准确地归因给各alpha,但我们可以通过与其它alpha的相关性来检验其价值。
五、Alpha的研究过程
1、开发Alpha
阿尔法逻辑→数据形式的信息→想法→数学表达式→应用操作→最终稳健的α→转换为金融工具中的头寸→检查历史损益,其他性能度量(信息比、周转率、回撤等)。
- 首先确定表达式
选取流动性最高的3000只股票作为研究范围
转换为金融工具中的头寸,根据alpha进行头寸的确定方式如下:
Final_alpha_stock = (alpha_stock/sum_of_alphas_of_all_stocks) - 然后回测收益率曲线,并计算信息比率
2、检验Alpha
检查alpha的健壮性主要考察:
- 高样本内信息比
- 良好的样本外信息比
- 最大回撤、回撤时间等方面
- 每日成交量,用来衡量调整投资组合的速度
- 总收益/交易总额,用来衡量每交易1元钱所得的利润
一个好的alpha应该尽可能地分布在尽可能多的行业上,而不是过于集中。此外分层回测也是检验alpha的一个好方法,可以辅助我们查看alpha的头部或者尾部的预测能力。如果多空收益大部分来源于头部分组的盈利,那么如果头部分组收益下降就可能对此阿尔法的性能造成较大的影响。
但是,我们不应该仅仅根据历史测试模拟结果来做判断。原因有以下几点:
- 当前的市场与历史时期不一样,市场规则可以改变,投资主体、新理论、新技术也会发生变化。因此, 测试周期越长越好,这是不一定正确的。
- 模拟假设可能不是真实的。交易过程可能会影响市场,需要支付交易成本或佣金。在评估模拟结果时,对这些数字的合理估计至关重要。
- 可能的前瞻性偏见。 如果你看到有人追随趋势并获利,那么你可以测试趋势跟踪模型,也许你可以得到一个很好的历史模拟。 没有更好的理解,你可能会或可能不会在未来的投资中获利。
- 过度优化。 有时候会看到很好的模拟结果,可能只是随机误差或噪声,但没有预测能力。在更长的历史中测试模型,在更广泛的市场中测试模型,都有助于降低过度拟合的风险。不幸的是,在现实世界中,存在着限制。没有一个系统的方法来提高夏普比率。要么没有足够长的可用历史数据,要么市场发生了变化,历史也发生了变化。与机器学习模型类似,如果alpha的参数较少,模型对参数变化的敏感性较低,这有助于降低过度拟合的风险。
- 敏感性测试和显着性测试是很重要的。 一个好的α信号应该对噪声不敏感。测试稳健性的最常用技术包括对不同时间段、不同持续时间、随机数据子集、每个股票部门等的数据进行测试,我们对那些对这些输入变化不敏感的信号更有信心。另一方面,每个输入数据都应该对结果作出重大贡献。检验显着性的最简单方法是删除一个输入变量,并检查结果是否有显着变化。如果每个输入变量都做出了重大贡献,则我们更好地信任信号。
此外,当样本外Alpha的数量增加时,样本外的测试也可能有偏差。单alpha水平上的样本外性能可能由于检验数据不足而导致验证是不充分的。
3、改进Alpha
- 去除原始数据的异常值
- 改变数据表达方式
例如: 将一个绝对数量含义的变量转化为当前值与其历史值的比值,用来表示该变量的变动 - 数据的中性化处理
通常市场风险和行业风险是最大的风险,我们通过中性化保证每个行业内的alpha总和为0,同时保证全市场的所有股票alpha的总和为0,这样可以有效消除市场风险和行业风险从而降低最大回撤,提高信息比率。此外通过采用alpha值的rank可以进一步提高信息比率。如果换手率偏高,可以通过利用衰变(时间尺度上的长周期均匀化)在一个时间窗口内平均这个alpha。 - 提高alpha的鲁棒性
排序:使用因子的排序将原始alpha转换到[0,1]区间
分位数:使用因子分位数
Fisher变换:将原始alpha转换为近似服从正态分布。
Z变换:将原始alpha转化为零均值和单位标准差的分布。
4、Alpha研究中的算法技术
- AdaBoost
在α研究中,我们经常处理弱分类器/预测器,通过对弱学习者学习适当的加权函数,可以在很多情况下利用机器学习的概念,从几个弱学习者中培养出一个强学习者。 - 数字滤波
α研究还涉及时间序列数据的处理。从数字信号处理中提取的时间序列可以有效地去噪时间序列数据,并将时间序列分解为趋势和周期分量。 最简单和最广泛使用的数字滤波器是简单的移动平均线;数字滤波的另一个流行应用是将时间序列分解为趋势和周期分量。趋势提取涉及抑制高频分量(低通滤波),而周期提取涉及抑制低频分量(高通滤波)。 - 特征提取
α研究的另一种感兴趣的技术是特征提取。 诸如主成分分析(PCA)/聚类之类的算法有助于减小特征空间的维数。
六、WebSim平台
WebSim™是一种专有的基于Web的仿真平台。使用WebSim™,用户可以根据他们的交易策略创建alpha。然后,这些想法通过WebSim™网站提交,并根据实际历史数据进行反向测试,以确定应用于过去市场时期的效果。为了避免必须处理结构化编程语言,实现了一个简单的命令行来输入alpha表达式。如下图所示:
- 输入测试的alpha表达式
- 选择市场标的范围:WebSim™仅交易流动股票。 WebSim™提供TOP3000,TOP2000,TOP1000等标准Universe。OP3000是一组3000只股票,在三个月内流动性最高; TOP2000是一组2,000只股票,在过去三个月内流动性最高。
- 设置Delay: 延迟是指相对于决策时间的数据可用性。延迟1(默认设置)表示alpha将使用昨天的数据(价格等)。延迟0意味着alpha将使用今天的数据。
- 设置Decay: 在过去的n天中,它通过将今天的值和前一天的衰减值结合起来,来执行线性衰减函数。它形成以下函数:
Decay_linear (x, n) = (x[date] * n x[date - 1] * (n - 1)… X[date - N - 1]) / (n (n - 1)… 1) - 设置中性化: 中性化是一种使我们的市场/行业/子行业中立的操作。
当选择“Market”时,它做以下操作:
alpha = alpha – mean(alpha)
基本上,它使α向量的均值为零,因此对市场没有净头寸,也就是说,多头头寸完全抵消空头头寸,使我们的战略保持市场中性。当选择“行业”或“子行业”时,alpha首先按对应的行业或子行业分组,并且在每个组内进行中性化操作。 - 设置最大权重限制:默认为0,表示对个股的仓位没有限制。
- 设置单位检查 :这可确保单位量纲在表达式中匹配。假设alpha是一个无意义的数学表达式,例如:adv20 + close。可以通过打开“单元检查”设置在WebSim™内部检查alpha,该设置检查相应的单位量纲是否匹配。
- 模拟持续时间: 这表示需要回溯测试的历史数据长度。
- 代码语言: 要输入单行alpha表达式,请选择“表达式”。要使用Python脚本输入alpha,请选择“Python”。
- 运行并查看结果,WebSim™将获取alpha模拟的结果并立即显示它们供用户查看,如下图所示
可以立即看到此alpha策略的整体PnL,夏普比率和每日周转等因素,以确定α的有效性。
PNL : 盈亏(也称pnl)是头寸和交易产生的货币(这意味着你在一年中损失或赚的钱),以美元表示。
每日_PNL=(头寸*每日_回报)的总和,这里没有考虑手续费,且不考虑复利效果,即假设每日的盈亏为单利方式计算。
每日换手: 它表示交易的频率。它可以定义为交易价值与持有股票的比率
每美元交易的利润: 它衡量您的交易的盈利程度。每交易的利润= PnL /美元交易。这个数字不考虑交易成本
夏普比率 : 在观察到的时间段内Sharpe = Avg(返回)/ Std_dev(返回)。
最大回撤: 最大峰值到谷值回报的绝对值
累积利润图由两个图组成,一个用于PnL与时间,另一个用于夏普比率与时间。表格中显示每年的模拟结果和整个模拟持续时间的累积结果。
一个好的阿尔法将持续增加的盈利和较高的年回报率、夏普比率、利润百分比和每美元交易所得利润。而且,更重要的是,它不应该在累积利润图中有很大的波动。如果图表的曲线波动较大,尽管回报率很高,但不会认为alpha值足够好。
WorldQuant认为对于日内 alpha而言,其夏普应该大于3.95;对于延迟1 日的alpha而言,其夏普应该大于2.5。最大回撤应小于10%。
总结: 本文介绍了alpha的相关知识以及WorldQuant的WebSim测试平台,阐述了alpha开发、测试与改进过程中的流程和方法,下篇我们将讲述如何在BigQuant平台上实现相似的因子开发功能。
前往BigQuant——人工智能量化平台实现!