今天,我们来继续学习量化选股因子alpha101,alpha101是一组由WorldQuant发表的论文《101 Formulaic Alphas》中给出的101个基于行情数据的因子,这些因子可以结合机器学习来进行量化选股。WorldQuant是一家全球量化资产管理公司,该公式被认为是全球量化界的黄埔军校,培养出了一批顶级的Quant人才。根据资料显示这里面还有不少因子仍然有效,我们先来看看函数定义,然后分析一下公式含义,在后续的系列文章中我们将自己跑一下代码分析这些因子在A股的有效性。 系列文章1:解锁大厂量化交易秘诀:选股因子分析(一)
系列文章2:解锁大厂量化交易秘诀:选股因子分析(二) 系列文章3:解锁大厂量化交易秘诀:选股因子分析(三) 系列文章4:解锁大厂量化交易的秘籍:选股因子分析(四) Alpha#41((($high * $low)^0.5) - $vwap)
解析: $high : 当天的最高价。
$low : 当天的最低价。
$vwap : 当天的加权平均价格。
($high * $low) : 计算当天最高价和最低价的乘积。
($high * $low)^0.5 : 计算步骤4的结果的平方根。
(($high * $low)^0.5) - $vwap : 计算步骤5的结果减去当天的加权平均价格。
因此,这个量化因子的作用是基于股票的最高价、最低价和加权平均价格,计算出一个综合得分。其中,步骤4计算了最高价和最低价的乘积,以反映出价格的波动范围;步骤5计算了步骤4的结果的平方根,以反映出价格的波动幅度;步骤6将步骤5的结果减去当天的加权平均价格,以反映出价格和平均价格之间的差异。 Alpha#42(rank(($vwap - $close)) / rank(($vwap + $close)))
解析: $vwap : 当天的加权平均价格。
$close : 当天的收盘价。
($vwap - $close) : 计算当天的加权平均价格和收盘价之差。
rank(($vwap - $close)) : 在股票池中排名上述结果。
($vwap + $close) : 计算当天的加权平均价格和收盘价之和。
rank(($vwap + $close)) : 在股票池中排名上述结果。
rank(($vwap - $close)) / rank(($vwap + $close)) : 将步骤4的结果除以步骤6的结果,并在股票池中排名。
因此,这个量化因子的作用是基于股票的加权平均价格和收盘价,计算出一个综合得分。其中,步骤3计算了当天的加权平均价格和收盘价之差,以反映出价格与平均价格之间的差异;步骤4和6分别在股票池中排名步骤3中的加权平均价格和收盘价之差以及它们之和的结果,反映出它们在股票池中的重要性;步骤7将步骤4的结果除以步骤6的结果,并在股票池中排名,得到一个综合得分。 Alpha#43(ts_rank(($volume / mean($volume,20)), 20) * ts_rank((-1 * delta($close, 7)), 8))
解析: $volume : 当天的成交量。
mean($volume,20) : 计算过去20个交易日的平均成交量。
($volume / mean($volume,20)) : 计算当天成交量与过去20个交易日的平均成交量之比。
ts_rank(($volume / mean($volume,20)), 20) : 计算上述比率在过去20个交易日内的排序排名。
delta($close, 7) : 计算收盘价在过去7个交易日内的变化量。
(-1 * delta($close, 7)) : 取步骤5的结果的相反数。
ts_rank((-1 * delta($close, 7)), 8) : 计算步骤6的结果在过去8个交易日内的排序排名。
(ts_rank(($volume / mean($volume,20)), 20) * ts_rank((-1 * delta($close, 7)), 8)) : 将步骤4和7的结果相乘,得到最终得分。
因此,这个量化因子的作用是基于股票的成交量和收盘价,计算出一个综合得分。其中,步骤3计算了当天成交量与过去20个交易日的平均成交量之比,以反映出成交量的变化情况;步骤4计算了该比率在过去20个交易日内的排序排名,以反映出当天成交量在近期的表现;步骤5计算了收盘价在过去7个交易日内的变化量,以反映出价格的短期趋势;步骤6将步骤5的结果取相反数,以反映出价格的变化越大,其得分越高;步骤7计算了步骤6在过去8个交易日内的排序排名,以反映出价格变化在近期的表现;步骤8将步骤4和7的结果相乘,得到一个综合得分。 Alpha#44(-1 * correlation($high, rank($volume), 5))
解析: $high : 当天的最高价。
$volume : 当天的成交量。
rank($volume) : 计算当天成交量在股票池中的排名。
correlation($high, rank($volume), 5) : 计算最高价和当天成交量在股票池中排名的相关性,时间周期为5个交易日。
(-1 * correlation($high, rank($volume), 5)) : 将步骤4的结果取相反数,并乘以-1,以反映出相关性越低,得分越高。
因此,这个量化因子的作用是基于股票的最高价和成交量,计算出一个综合得分。其中,步骤3计算了当天成交量在股票池中的排名,以反映出成交量在股票池中的相对表现;步骤4计算了最高价和当天成交量在股票池中排名的相关性,以反映出价格和成交量之间的关系;步骤5将步骤4的结果取相反数,并乘以-1,以反映出相关性越低,得分越高。 Alpha#45(-1 * ((rank((sum(delay($close, 5), 20) / 20)) * correlation($close, $volume, 2)) *rank(correlation(sum($close, 5), sum($close, 20), 2))))
解析: $close : 当天的收盘价。
$volume : 当天的成交量。
delay($close, 5) : 计算5个交易日前的收盘价。
sum(delay($close, 5), 20) : 计算过去20个交易日中,5个交易日前的收盘价的总和。
sum(delay($close, 5), 20) / 20 : 计算过去20个交易日中,5个交易日前的收盘价的平均值。
rank((sum(delay($close, 5), 20) / 20)) : 计算上述平均值在股票池中的排名。
correlation($close, $volume, 2) : 计算收盘价和成交量的相关性,时间周期为2个交易日。
sum($close, 5) : 计算过去5个交易日的收盘价的总和。
sum($close, 20) :计算过去20个交易日的收盘价的总和。
correlation(sum($close, 5), sum($close, 20), 2) : 计算过去5个交易日的收盘价总和和过去20个交易日的收盘价总和之间的相关性,时间周期为2个交易日。
rank(correlation(sum($close, 5), sum($close, 20), 2)) : 计算上述相关性在股票池中的排名。
(rank((sum(delay($close, 5), 20) / 20)) * correlation($close, $volume, 2)) : 将步骤6和7的结果相乘。
(-1 * ((rank((sum(delay($close, 5), 20) / 20)) * correlation($close, $volume, 2)) *rank(correlation(sum($close, 5), sum($close, 20), 2)))) : 将步骤12和步骤11的结果相乘,并将结果取相反数乘以-1。
因此,这个量化因子的作用是基于股票的收盘价和成交量,计算出一个综合得分。其中,步骤5计算了过去20个交易日中,5个交易日前的收盘价的平均值,以反映出价格的长期趋势;步骤6计算了该平均值在股票池中的排名,以反映出该股票在过去20个交易日的表现;步骤7计算了收盘价和成交量在过去2个交易日内的相关性,以反映出价格和成交量之间的关系;步骤10计算了过去5个交易日的收盘价总和和过去20个交易日的收盘价总和之间的相关性,以反映出价格的短期趋势;步骤11计算了步骤10在股票池中的排名,以反映出该股票在短期内的表现;步骤12将步骤6和7的结果相乘,反映出平均价和成交量以及价格和成交量之间的关系对得分的影响;步骤13将步骤12和11的结果相乘,并将结果取相反数乘以-1,得到一个综合得分。 Alpha#46((0.25 < (((delay($close, 20) - delay($close, 10)) / 10) - ((delay($close, 10) - $close) / 10))) ?(-1 * 1) : (((((delay($close, 20) - delay($close, 10)) / 10) - ((delay($close, 10) - $close) / 10)) < 0) ? 1 :((-1 * 1) * ($close - delay($close, 1)))))
解析: $close : 当天的收盘价。
delay($close, 20) : 计算20个交易日前的收盘价。
delay($close, 10) : 计算10个交易日前的收盘价。
(delay($close, 20) - delay($close, 10)) : 计算20个交易日前的收盘价和10个交易日前的收盘价之差。
(delay($close, 10) - $close) : 计算10个交易日前的收盘价和当天的收盘价之差。
((delay($close, 20) - delay($close, 10)) / 10) : 计算20个交易日前的收盘价和10个交易日前的收盘价之差的平均值。
((delay($close, 10) - $close) / 10) : 计算10个交易日前的收盘价和当天的收盘价之差的平均值。
(((delay($close, 20) - delay($close, 10)) / 10) - ((delay($close, 10) - $close) / 10)) : 计算步骤6和步骤7的结果之差。
0.25 < (((delay($close, 20) - delay($close, 10)) / 10) - ((delay($close, 10) - $close) / 10))) : 判断步骤8的结果是否大于0.25,如果是,则执行步骤10,否则执行步骤11。
(-1 * 1) : 将-1乘以1,得到-1。
((((delay($close, 20) - delay($close, 10)) / 10) - ((delay($close, 10) - $close) / 10)) < 0) ? 1 :((-1 * 1) * ($close - delay($close, 1))) : 判断步骤8的结果是否小于0,如果是,则得分为1,否则执行步骤12。
((-1 * 1) * ($close - delay($close, 1))) : 将步骤10的结果(-1)乘以($close - delay($close, 1)),得到一个负数,表示当天收盘价与前一天收盘价的差值乘以-1。
因此,这个量化因子的作用是基于股票的收盘价,计算出一个综合得分。其中,步骤6和7计算了过去20个交易日和过去10个交易日中,收盘价的平均变化率,以反映出价格的长期和短期趋势;步骤8计算了步骤6和7的结果之差,以反映出价格变化率的变化情况;步骤9判断步骤8的结果是否大于0.25,如果是,则得分为-1,反映出价格变化率的变化超过了一定的阈值;步骤10将得分设定为-1;步骤11判断步骤8的结果是否小于0,如果是,则得分为1,反映出价格变化率的变化方向为下降;步骤12将得分设定为当天收盘价与前一天收盘价的差值乘以-1,反映出价格的短期趋势,并且在价格下跌时得分更高。 Alpha#47((((rank((1 / $close)) * $volume) / mean($volume,20)) * (($high * rank(($high - $close))) / (sum($high, 5) /5))) - rank(($vwap - delay($vwap, 5))))
解析: $close : 当天的收盘价。
$volume : 当天的成交量。
rank((1 / $close)) : 计算收盘价的倒数,并在股票池中排名。
mean($volume,20) : 计算过去20个交易日的成交量的平均值。
($volume) / mean($volume,20) : 计算当天成交量与过去20个交易日的平均成交量的比值。
(rank((1 / $close)) * $volume) / mean($volume,20) : 将步骤3和步骤5的结果相乘。
$high : 当天的最高价。
($high - $close) : 计算最高价和收盘价之差。
rank(($high - $close)) : 计算步骤8的结果在股票池中的排名。
rank(($high - $close)) * $high : 将步骤7和步骤9的结果相乘。
sum($high, 5) : 计算过去5个交易日的最高价的总和。
sum($high, 5) / 5 : 计算过去5个交易日的最高价的平均值。
(($high * rank(($high - $close))) / (sum($high, 5) /5)) : 将步骤7、步骤9和步骤12的结果相乘。
((rank((1 / $close)) * $volume) / mean($volume,20)) * (($high * rank(($high - $close))) / (sum($high, 5) /5)) : 将步骤6和步骤13的结果相乘。
$vwap : 当天的加权平均价格。
delay($vwap, 5) : 计算5个交易日前的加权平均价格。
($vwap - delay($vwap, 5)) : 计算当天加权平均价格和5个交易日前的加权平均价格之差。
rank(($vwap - delay($vwap, 5))) : 计算上述差值在股票池中的排名。
rank(($vwap - delay($vwap, 5))) * -1 : 将步骤18的结果乘以-1,得到一个负数。
((((rank((1 / $close)) * $volume) / mean($volume,20)) * (($high * rank(($high - $close))) / (sum($high, 5) /5))) - rank(($vwap - delay($vwap, 5)))) : 将步骤14和步骤19的结果相减,得到一个综合得分。
因此,这个量化因子的作用是基于股票的收盘价、最高价和成交量,计算出一个综合得分。其中,步骤3计算了收盘价的倒数并排名,以反映出价格的相对水平;步骤5计算了当天成交量与过去20个交易日的平均成交量的比值,以反映出成交量的相对水平;步骤6将步骤3和步骤5的结果相乘,反映出价格和成交量对得分的影响;步骤7和步骤9计算了最高价和收盘价之差的排名和最高价,以反映出价格的短期趋势;步骤11计算了过去5个交易日的最高价的平均值,以反映出价格的短期趋势;步骤13将步骤7、步骤9和步骤12的结果相乘,反映出价格和最高价之间的关系对得分的影响;步骤14将步骤6和步骤13的结果相乘,得到一个综合得分;步骤18计算了当天加权平均价格和5个交易日前的加权平均价格之差的排名,以反映出价格的短期趋势;步骤19将步骤18的结果乘以-1,得到一个负数,表示当天加权平均价格和5个交易日前的加权平均价格之差的排名越高,得分越低;步骤20将步骤14和步骤19的结果相减,得到一个综合得分,反映出股票的价格和成交量对得分的影响以及价格的短期趋势对得分的影响。 Alpha#48(indneutralize(((correlation(delta($close, 1), delta(delay($close, 1), 1), 250) *delta($close, 1)) / $close), indclass.subindustry) / sum(((delta($close, 1) / delay($close, 1))^2), 250))
解析: $close : 当天的收盘价。
delta($close, 1) : 计算当天收盘价与前一天收盘价之差。
delay($close, 1) : 计算前一天的收盘价。
delta(delay($close, 1), 1) : 计算前一天收盘价与前两天收盘价之差。
correlation(delta($close, 1), delta(delay($close, 1), 1), 250) : 计算过去250个交易日中,当天收盘价与前一天收盘价之差和前一天收盘价与前两天收盘价之差的相关系数。
(correlation(delta($close, 1), delta(delay($close, 1), 1), 250) * delta($close, 1)) : 将步骤2和步骤5的结果相乘。
(correlation(delta($close, 1), delta(delay($close, 1), 1),250) * delta($close, 1)) / $close : 将步骤6的结果除以当天的收盘价,得到一个相对强度指标。
indneutralize(...) : 对步骤7的结果进行行业中性化处理,即将每个股票的得分调整为其所在行业的平均得分。
indclass.subindustry : 指定行业分类方式为subindustry,即按子行业分类。
((delta($close, 1) / delay($close, 1))^2) : 计算每个交易日的价格变化率的平方。
sum(((delta($close, 1) / delay($close, 1))^2), 250) : 计算过去250个交易日中,每个交易日的价格变化率的平方之和。
indneutralize(...) / sum(((delta($close, 1) / delay($close, 1))^2), 250) : 将步骤8的结果除以步骤11的结果,得到一个相对强度指标的标准化值。
因此,这个量化因子的作用是基于股票的收盘价,计算出一个相对强度指标的标准化值。其中,步骤2、步骤3和步骤4计算了价格变化率的差值;步骤5计算了过去250个交易日中,价格变化率的差值的相关系数,以反映出价格变化率的趋势和相关性;步骤6将步骤2和步骤5的结果相乘,得到一个综合的价格变化率指标;步骤7将步骤6的结果除以当天的收盘价,得到一个相对强度指标;步骤8对步骤7的结果进行行业中性化处理,以消除行业因素对得分的影响;步骤10计算了价格变化率的平方;步骤11计算了过去250个交易日中,价格变化率的平方之和,以反映出价格变化率的波动性;步骤12将步骤8的结果除以步骤11的结果,得到一个相对强度指标的标准化值,以消除波动性对得分的影响。 Alpha#49(((((delay($close, 20) - delay($close, 10)) / 10) - ((delay($close, 10) - $close) / 10)) < (-1 *0.1)) ? 1 : ((-1 * 1) * ($close - delay($close, 1))))
解析: $close : 当天的收盘价。
delay($close, 20) : 20个交易日前的收盘价。
delay($close, 10) : 10个交易日前的收盘价。
(delay($close, 20) - delay($close, 10)) : 计算20个交易日前收盘价与10个交易日前收盘价之差。
(delay($close, 20) - delay($close, 10)) / 10 : 将步骤4的结果除以10,得到20个交易日的平均收盘价变化率。
(delay($close, 10) - $close) : 计算10个交易日前收盘价与当天收盘价之差。
(delay($close, 10) - $close) / 10 : 将步骤6的结果除以10,得到10个交易日的平均收盘价变化率。
`(((delay($close, 20)解析: $close : 当天的收盘价。
delay($close, 20) : 20个交易日前的收盘价。
delay($close, 10) : 10个交易日前的收盘价。
(delay($close, 20) - delay($close, 10)) : 计算20个交易日前收盘价与10个交易日前收盘价之差。
(delay($close, 20) - delay($close, 10)) / 10 : 将步骤4的结果除以10,得到20个交易日的平均收盘价变化率。
(delay($close, 10) - $close) : 计算10个交易日前收盘价与当天收盘价之差。
(delay($close, 10) - $close) / 10 : 将步骤6的结果除以10,得到10个交易日的平均收盘价变化率。
(((delay($close, 20)- delay($close, 10)) / 10) - ((delay($close, 10) - $close) / 10)) : 将步骤5和步骤7的结果相减,得到20个交易日的平均收盘价变化率和10个交易日的平均收盘价变化率之差。
(-1 * 0.1) : 将-0.1与步骤8的结果相乘,得到一个阈值。
((delay($close, 20) - delay($close, 10)) / 10) - ((delay($close, 10) - $close) / 10)) < (-1 * 0.1) : 判断步骤8的结果是否小于阈值,如果是,则返回1;如果否,则执行步骤11。
((-1 * 1) * ($close - delay($close, 1))) : 计算当天收盘价与前一天收盘价之差的相反数,并乘以-1,得到一个相对强度指标。
因此,这个量化因子的作用是基于股票的收盘价,计算出一个相对强度指标。它的计算过程如下: 计算20个交易日的平均收盘价变化率和10个交易日的平均收盘价变化率之差; 将该差值与一个阈值-0.1相比较,如果小于阈值,则返回1,否则执行步骤3; 计算当天收盘价与前一天收盘价之差的相反数,并乘以-1,得到一个相对强度指标。
因此,这个量化因子主要是用来判断股票的短期趋势是否下跌。如果股票的20日和10日平均收盘价变化率之差小于-0.1,则认为股票的短期趋势处于下跌状态,返回1;否则,认为股票的短期趋势没有下跌,返回当天收盘价与前一天收盘价之差的相反数,并乘以-1,得到一个相对强度指标。 需要注意的是,这个量化因子只考虑了短期趋势的变化,没有考虑其他因素,如市场情况、行业因素等。在进行选股时,需要综合考虑多个因素。 Alpha#50(-1 * ts_max(rank(correlation(rank($volume), rank($vwap), 5)), 5))
解析: $volume : 当天的成交量。
$vwap : 当天的加权平均价格。
rank($volume) : 对每个交易日的成交量进行排名。
rank($vwap) : 对每个交易日的加权平均价格进行排名。
correlation(rank($volume), rank($vwap), 5) : 计算过去5个交易日中,成交量排名和加权平均价格排名之间的相关系数。
rank(correlation(rank($volume), rank($vwap), 5)) : 对步骤5的结果进行排名。
ts_max(rank(correlation(rank($volume), rank($vwap), 5)), 5) : 计算过去5个交易日中,步骤6的结果的最大值。
(-1 * ts_max(rank(correlation(rank($volume), rank($vwap), 5)), 5)) : 将步骤7的结果乘以-1,得到一个相对强度指标的负值因此,这个量化因子的作用是基于股票的成交量和加权平均价格,计算出一个相对强度指标的负值。它的计算过程如下:
对每个交易日的成交量和加权平均价格进行排名; 计算过去5个交易日中,成交量排名和加权平均价格排名之间的相关系数; 对步骤2的结果进行排名; 计算过去5个交易日中,步骤3的结果的最大值; 将步骤4的结果乘以-1,得到一个相对强度指标的负值。
因此,这个量化因子主要是用来判断股票的相对强度。它的计算过程中,使用了成交量和加权平均价格的排名和相关系数来反映股票的表现。在过去5个交易日中,如果股票的成交量和加权平均价格的排名之间的相关系数较高,则说明该股票的表现较好,排名较高,得分也就比较高;反之,则说明该股票的表现较差,得分较低。最后,将过去5个交易日中,得分最高的结果取负值,得到一个相对强度指标的负值。需要注意的是,该量化因子只考虑了成交量和加权平均价格的表现,没有考虑其他因素,如市场情况、行业因素等。 TODO
|