今天,我们来继续学习量化选股因子alpha101,alpha101是一组由WorldQuant发表的论文《101 Formulaic Alphas》中给出的101个基于行情数据的因子,这些因子可以结合机器学习来进行量化选股。WorldQuant是一家全球量化资产管理公司,该公司被认为是全球量化界的黄埔军校,培养出了一批顶级的Quant人才。根据资料显示这里面还有不少因子仍然有效,我们先来看看函数定义,然后分析一下公式含义,在后续的系列文章中我们将自己跑一下代码分析这些因子在A股的有效性。
系列文章1:解锁大厂量化交易秘诀:选股因子分析(一)
(资料图片)
系列文章2:解锁大厂量化交易秘诀:选股因子分析(二)
系列文章3:解锁大厂量化交易秘诀:选股因子分析(三)
系列文章4:解锁大厂量化交易的秘籍:选股因子分析(四)
系列文章5:解锁大厂量化交易的秘籍:选股因子分析(五)
系列文章6:解锁大厂量化交易的秘籍:选股因子分析(六)
Alpha#61(rank(($vwap - ts_min($vwap, 16.1219))) < rank(correlation($vwap, mean($volume,180), 17.9282)))
解析:
rank(($vwap - ts_min($vwap, 16.1219)))
表示在过去 16.1219 天内的最小值与当前值的差,然后对这个差值在当前截面期内进行排序后的排名。【16.1219 天,奇葩的天数,后面这几个公式都有点玄学,但实际上无法取16.1219天的数据,程序内部肯定是要化为整数天数的】
rank(correlation($vwap, mean($volume,180), 17.9282))
表示在过去 17.9282 天内与过去 180 天的平均交易量()的相关系数,然后对这个相关系数在当前截面期内进行排序后的排名。
整个量化因子的逻辑是,如果在过去 16.1219 天内的最小值与当前值的差在当前截面期内的排名小于在过去 17.9282 天内与过去 180 天的平均交易量的相关系数在当前截面期内的排名,那么这个量化因子的值为真(1),否则为假(0)。
这个量化因子的意义是,当前的表现如果在过去短期内较好,同时与过去长期内的平均交易量的波动有较低的相关性,那么这个因子的值就会更接近1,反之则更接近0。这个因子可以用于衡量交易品种的短期价格表现相对于长期交易量的表现。
Alpha#62((rank(correlation($vwap, sum(mean($volume,20), 22.4101), 9.91009)) < rank(((rank($open) +rank($open)) < (rank((($high + $low) / 2)) + rank($high))))) * -1)
解析:
rank(correlation($vwap, sum(mean($volume,20), 22.4101), 9.91009))
表示在过去 9.91009 天内与的过去 20 天的平均值加上过去 22.4101 天内的总和的相关系数,然后对这个相关系数在当前截面期内进行排序后的排名。
((rank($open) +rank($open)) < (rank((($high + $low) / 2)) + rank($high)))
表示的排名加上的排名是否小于 (($high + $low) / 2)的排名加上的排名。如果小于,则为真(1),否则为假(0)。
最近的价格趋势与成交量的总和之间的相关性与开盘价和最高价、最低价之间的关系,来判断当前市场的走势。如果与成交量之间的相关性表现更好,而开盘价与最高价和最低价之间的关系较弱,则这个因子的值越接近1,反之则越接近0。这个因子可以用于衡量市场走势的强弱程度并作为交易的参考。
Alpha#63((rank(decay_linear(delta(indneutralize($close, indclass.industry), 2.25164), 8.22237))- rank(decay_linear(correlation((($vwap * 0.318108) + ($open * (1 - 0.318108))), sum(mean($volume,180),37.2467), 13.557), 12.2883))) * -1)
解析:
indneutralize($close, indclass.industry) 表示对(收盘价)进行行业中性化处理,即消除行业对价格的影响。
delta(indneutralize($close, indclass.industry), 2.25164) 表示计算上述行业中性化后的收盘价与两天前的收盘价之间的差异。
decay_linear(delta(indneutralize($close, indclass.industry), 2.25164), 8.22237) 表示对上述差异进行线性加权移动平均处理,权重为8.22237天。
rank(decay_linear(delta(indneutralize($close, indclass.industry), 2.25164), 8.22237)) 表示对上述线性加权移动平均值进行排名。
(($vwap * 0.318108) + ($open * (1 - 0.318108))) 表示计算加权平均价格)和(开盘价)的加权和,其中的权重为0.318108,的权重为1-0.318108。
sum(mean($volume,180),37.2467) 表示计算过去180天的平均交易量的37.2467天加权和。
correlation((($vwap * 0.318108) + ($open * (1 - 0.318108))), sum(mean($volume,180),37.2467), 13.557) 表示计算上述加权和与过去180天的平均交易量的37.2467天加权和之间的13.557天时间序列相关性。
decay_linear(correlation((($vwap * 0.318108) + ($open * (1 - 0.318108))), sum(mean($volume,180),37.2467), 13.557), 12.2883) 表示对上述相关性值进行线性加权移动平均处理,权重为12.2883天。
rank(decay_linear(correlation((($vwap * 0.318108) + ($open * (1 - 0.318108))), sum(mean($volume,180),37.2467), 13.557), 12.2883)) 表示对上述线性加权移动平均值进行排名。
将第4步和第9步的结果相减,并乘以-1,即 * -1。如果第四步的结果排名较低,而第九步的结果排名较高,则表示股票价格可能会下跌,因此返回-1;否则返回0。
综上所述,该量化因子的目的是通过比较行业中性化的收盘价与两天前的收盘价之间的差异以及加权平均价格和开盘价之间的相关性与过去180天平均交易量的关系来预测股票价格的涨跌。具体而言,该因子认为如果行业中性化的收盘价与两天前的收盘价之间的差异的线性加权移动平均值排名较低,并且加权平均价格和开盘价之间的相关性与过去180天平均交易量的关系的线性加权移动平均值排名较高,则股票价格可能会下跌。
Alpha#64((rank(correlation(sum((($open * 0.178404) + ($low * (1 - 0.178404))), 12.7054),sum(mean($volume,120), 12.7054), 16.6208)) < rank(delta((((($high + $low) / 2) * 0.178404) + ($vwap * (1 -0.178404))), 3.69741))) * -1)
解析:
(($open * 0.178404) + ($low * (1 - 0.178404))) 表示计算开盘价和最低价的加权和,其中开盘价的权重为0.178404,最低价的权重为1-0.178404。
sum((($open * 0.178404) + ($low * (1 - 0.178404))), 12.7054) 表示计算上述加权和的12.7054天加权和。
mean($volume,120) 表示过去120天的平均交易量。
sum(mean($volume,120), 12.7054) 表示计算过去120天平均交易量的12.7054天加权和。
correlation(sum((($open * 0.178404) + ($low * (1 - 0.178404))), 12.7054),sum(mean($volume,120), 12.7054), 16.6208) 表示计算上述加权和与过去120天平均交易量的12.7054天加权和之间的16.6208天时间序列相关性,并对该相关性值进行排名。
(((($high + $low) / 2) * 0.178404) + ($vwap * (1 -0.178404))) 表示计算最高价和最低价的平均值与的加权和,其中最高价和最低价的平均值的权重为0.178404,的权重为1-0.178404。
delta((((($high + $low) / 2) * 0.178404) + ($vwap * (1 -0.178404))), 3.69741) 表示计算上述加权和与3.69741天前的加权和之间的差异。
rank(delta((((($high + $low) / 2) * 0.178404) + ($vwap * (1 -0.178404))), 3.69741))) 表示对上述差异进行排名。
将第5步和第8步的结果相减,并乘以-1,即 * -1。如果第5步的结果排名较低,而第8步的结果排名较高,则表示股票价格可能会下跌,因此返回-1;否则返回0。
综上所述,该量化因子的目的是通过比较开盘价和最低价的加权和与过去120天平均交易量的关系以及最高价和最低价的平均值与的加权和之间的差异来预测股票价格的涨跌。具体而言,该因子认为如果开盘价和最低价的加权和与过去120天平均交易量的关系的相关性排名较低,并且最高价和最低价的平均值与的加权和之间的差异的排名较高,则股票价格可能会下跌。
Alpha#65((rank(correlation((($open * 0.00817205) + ($vwap * (1 - 0.00817205))), sum(mean($volume,60),8.6911), 6.40374)) < rank(($open - ts_min($open, 13.635)))) * -1)
解析:
(($open * 0.00817205) + ($vwap * (1 - 0.00817205))) 表示计算开盘价和的加权和,其中开盘价的权重为0.00817205,的权重为1-0.00817205。
mean($volume,60) 表示过去60天的平均交易量。
sum(mean($volume,60),8.6911) 表示计算过去60天平均交易量的8.6911天加权和。
correlation((($open * 0.00817205) + ($vwap * (1 - 0.00817205))), sum(mean($volume,60),8.6911), 6.40374) 表示计算上述加权和与过去60天平均交易量的8.6911天加权和之间的6.40374天时间序列相关性,并对该相关性值进行排名。
ts_min($open, 13.635) 表示计算过去13..635天内的最低开盘价。
($open - ts_min($open, 13.635)) 表示计算当前开盘价与过去13.635天内的最低开盘价之间的差异。
rank(($open - ts_min($open, 13.635))) 表示对上述差异进行排名。
将第4步和第7步的结果相减,并乘以-1,即 * -1。如果第4步的结果排名较低,而第7步的结果排名较高,则表示股票价格可能会下跌,因此返回-1;否则返回0。
综上所述,该量化因子的目的是通过比较开盘价和的加权和与过去60天平均交易量的关系以及当前开盘价与过去13.635天内的最低开盘价之间的差异来预测股票价格的涨跌。具体而言,该因子认为如果开盘价和的加权和与过去60天平均交易量的关系的相关性排名较低,并且当前开盘价与过去13.635天内的最低开盘价之间的差异的排名较高,则股票价格可能会下跌。
Alpha#66((rank(decay_linear(delta($vwap, 3.51013), 7.23052)) + ts_rank(decay_linear((((($low* 0.96633) + ($low * (1 - 0.96633))) - $vwap) / ($open - (($high + $low) / 2))), 11.4157), 6.72611)) * -1)
解析:
delta($vwap, 3.51013) 表示计算(加权平均价格)与3.51013天前的之间的差异。
decay_linear(delta($vwap, 3.51013), 7.23052) 表示对上述差异进行线性加权移动平均处理,权重为7.23052天。
rank(decay_linear(delta($vwap, 3.51013), 7.23052)) 表示对上述线性加权移动平均值进行排名。
(($low* 0.96633) + ($low * (1 - 0.96633))) 表示计算最低价的加权和,其中最低价的权重为0.96633,最高价的权重为1-0.96633。
(($high + $low) / 2) 表示计算最高价和最低价的平均值。
($open - (($high + $low) / 2)) 表示计算当前开盘价与最高价与最低价的平均值之间的差异。
(((($low* 0.96633) + ($low * (1 - 0.96633))) - $vwap) / ($open - (($high + $low) / 2))) 表示计算最低价的加权和与之间的差异与当前开盘价与最高价与最低价的平均值之间的差异的比值。
decay_linear((((($low* 0.96633) + ($low * (1 - 0.96633))) - $vwap) / ($open - (($high + $low) / 2))), 11.4157) 表示对上述差异比值进行线性加权移动平均处理,权重为11.4157天。
ts_rank(decay_linear((((($low* 0.96633) + ($low * (1 - 0.96633))) - $vwap) / ($open - (($high + $low) / 2))), 11.4157), 6.72611) 表示计算上述线性加权移动平均值的排名,并对该排名进行排名。
将第3步和第9步的结果相加,并乘以-1,即 * -1。如果第3步和第9步的结果排名较高,则表示股票价格可能会下跌,因此返回负数;否则返回0。
综上所述,该量化因子的目的是通过比较与3.51013天前的之间的差异的线性加权移动平均值与最低价的加权和与之间的差异与当前开盘价与最高价和最低价的平均值之间的差异的比值的线性加权移动平均值的排名来预测股票价格的涨跌。具体而言,该因子认为如果上述两个排名的结果较高,则股票价格可能会下跌。
Alpha#67((rank(($high - ts_min($high, 2.14593)))^rank(correlation(indneutralize($vwap,indclass.sector), indneutralize(mean($volume,20), indclass.subindustry), 6.02936))) * -1)
解析:
ts_min($high, 2.14593) 表示计算过去2.14593天内的最低最高价。
($high - ts_min($high, 2.14593)) 表示计算当前最高价与过去2.14593天内的最低最高价之间的差异。
rank(($high - ts_min($high, 2.14593))) 表示对上述差异进行排名。
indclass.sector 表示将股票按行业分类。
indclass.subindustry 表示将股票按子行业分类。
indneutralize($vwap,indclass.sector) 表示对进行行业中性化处理。
mean($volume,20) 表示过去20天的平均交易量。
indneutralize(mean($volume,20), indclass.subindustry) 表示对过去20天平均交易量进行子行业中性化处理。
correlation(indneutralize($vwap,indclass.sector), indneutralize(mean($volume,20), indclass.subindustry), 6.02936) 表示计算上述中性化处理后的和平均交易量之间的6.02936天时间序列相关性,并对该相关性值进行排名。
rank(correlation(indneutralize($vwap,indclass.sector), indneutralize(mean($volume,20), indclass.subindustry), 6.02936))) 表示对上述时间序列相关性进行排名。
将第3步和第10步的结果相乘,并乘以-1,即 * -1。如果第3步和第10步的结果排名较高,则表示股票价格可能会下跌,因此返回负数;否则返回0。
综上所述,该量化因子的目的是通过比较当前最高价与过去2.14593天内的最低最高价之间的差异的排名和与平均交易量之间的行业和子行业中性化处理后的时间序列相关性的排名来预测股票价格的涨跌。具体而言,该因子认为如果上述两个排名的结果较高,则股票价格可能会下跌。
Alpha#68((ts_rank(correlation(rank($high), rank(mean($volume,15)), 8.91644), 13.9333)
解析:
ts_rank(correlation(rank($high), rank(mean($volume,15)), 8.91644), 13.9333)
:
这个部分计算了两个时间序列的相关性,并在过去的 8.91644 天内对其进行了计算。第一个时间序列是高价的排名,第二个时间序列是过去 15 天平均交易量的排名。然后,将这个相关性序列在过去的 13.9333 天内进行排序,返回最终的排名值。
rank(delta((($close * 0.518371) + ($low * (1 - 0.518371))), 1.06157))
:
这个部分计算了由收盘价和最低价加权得出的价格,并计算了当前这个价格和一天前价格之间的差值(delta)。然后对这个差值序列进行排名,返回最终的排名值。
最后,整个公式将这两个排名值进行比较,如果前一个排名值小于后一个排名值,则返回-1,否则返回0。这个公式的主要目的是根据技术指标来判断买卖信号,如果返回-1,则可以认为是一个卖出信号。
Alpha#69((rank(ts_max(delta(indneutralize($vwap, indclass.industry), 2.72412),4.79344))^ts_rank(correlation((($close * 0.490655) + ($vwap * (1 - 0.490655))), mean($volume,20), 4.92416),9.0615)) * -1)
解析:
rank(ts_max(delta(indneutralize($vwap, indclass.industry), 2.72412),4.79344))
:
这个部分首先将 vwap(加权平均价格)在行业内进行截面中性化处理,并计算其相对变化量(delta)。接下来,在过去 2.72412 天内计算这些相对变化量的最大值,并将其排名。最后,在过去 4.79344 天内对这些排名进行排序,返回最终的排名值。
ts_rank(correlation((($close * 0.490655) + ($vwap * (1 - 0.490655))), mean($volume,20), 4.92416),9.0615)
:
这个部分计算了两个时间序列的相关性,并在过去的 4.92416 天内对其进行了计算。第一个时间序列是由收盘价和加权平均价格加权得出的价格,第二个时间序列是过去 20 天的平均交易量。然后,将这个相关性序列在过去的 9.0615 天内进行排序,返回最终的排名值。
最后,整个公式将这两个排名值进行比较,如果第一个排名值的 ts_max 操作的结果大于等于第二个排名值的相关性操作的结果,则返回-1,否则返回0。这个公式的主要目的是根据技术指标来判断买卖信号,如果返回-1,则可以认为是一个卖出信号。
Alpha#70((rank(delta($vwap, 1.29456))^ts_rank(correlation(indneutralize($close,indclass.industry), mean($volume,50), 17.8256), 17.9171)) * -1)
解析:
rank(delta($vwap, 1.29456))
:
这个部分计算了由 vwap(加权平均价格)构成的时间序列,然后计算了当前价格和一天前价格之间的差值(delta)。然后对这个差值序列进行排名,返回最终的排名值。
ts_rank(correlation(indneutralize($close,indclass.industry), mean($volume,50), 17.8256), 17.9171)
:
这个部分计算了两个时间序列的相关性,并在过去的 17.8256 天内对其进行了计算。第一个时间序列是在行业内进行截面中性化处理的收盘价,第二个时间序列是过去 50 天的平均交易量。然后,将这个相关性序列在过去的 17.9171 天内进行排序,返回最终的排名值。
最后,整个公式将这两个排名值进行比较,如果第一个排名值的 delta 操作的结果大于等于第二个排名值的相关性操作的结果,则返回-1,否则返回0。这个公式的主要目的是根据技术指标来判断买卖信号,如果返回-1,则可以认为是一个卖出信号。
TODOCopyright 2015-2023 今日知识产权网 版权所有 备案号:沪ICP备2023005074号-40 联系邮箱:5 85 59 73 @qq.com