今天,我们来学习下量化选股因子alpha101,alpha101是一组由WorldQuant发表的论文《101 Formulaic Alphas》中给出的101个基于行情数据的因子,这些因子可以结合机器学习来进行量化选股。WorldQuant是一家全球量化资产管理公司,该公司被认为是全球量化界的黄埔军校,培养出了一批顶级的Quant人才。根据资料显示这里面还有不少因子仍然有效,我们先来看看函数定义,然后分析一下公式含义,在后续的系列文章中我们将自己跑一下代码分析这些因子在A股的有效性。
函数定义abs(x) - 绝对值log(x) - 自然对数sign(x) - 正负号,等于1或-1rank(x) - 截面排名delay(x, d) - x的d天前的值correlation(x, y, d) - x和y过去d天的时间序列相关性covariance(x, y, d) - x和y过去d天的时间序列协方差scale(x, a) - 重新缩放x使得sum(abs(x)) = a(默认a = 1)delta(x, d) - 今天x的值减去d天前x的值signedpower(x, a) - x^adecay_linear(x, d) - 过去d天内以线性衰减权重(归一化为1)的加权移动平均值indneutralize(x, g) - 根据g(子行业,行业,部门等)进行截面中性化,即在每个g内截面平均值ts_{O}(x, d) - 在过去d天的时间序列上应用操作符O;非整数d天数转换为floor(d)ts_min(x, d) - 过去d天时间序列的最小值ts_max(x, d) - 过去d天时间序列的最大值ts_argmax(x, d) - ts_max(x, d)发生的那一天ts_argmin(x, d) - ts_min(x, d)发生的那一天ts_rank(x, d) - 过去d天时间序列排名min(x, d) = ts_min(x,d)max(x, d) = ts_max(x,d)sum(x, d) - 过去d天时间序列之和product(x, d) - 过去d天时间序列乘积stddev(x, d) - 过去d天移动时间序列标准差Alpha#1(rank(ts_argmax(signedpower((($returns < 0) ? stddev($returns, 20) : $close), 2), 5)) -0.5)
解析:
$returns:表示每日股票的收益率,这是原始数据。
stddev($returns, 20):表示过去20天的收益率的标准差,衡量过去20天内收益率的波动性。
($returns < 0):判断当日收益率是否小于0,返回True或False。如果为True,说明当日收益率为负数。
(($returns < 0) ? stddev($returns, 20) : $close):如果当日收益率为负数,则将20日收益率的标准差作为基础价格;否则,将当日的收盘价作为基础价格。
signedpower((((($returns < 0) ? stddev($returns, 20) : $close)) ^ 2), 2):将基础价格平方,并取其符号,即得到基础价格的平方的绝对值,再乘以-1或1,表示基础价格的平方的方向。
ts_argmax(signedpower((($returns < 0) ? stddev($returns, 20) : $close), 2), 5):对基础价格的平方的方向进行排名,并返回过去5天中排名最高的一天的排名序号。
rank(ts_argmax(signedpower((($returns < 0) ? stddev($returns, 20) : $close), 2), 5)):对上述排名序号进行排名,得到排名序号的排名。
rank(ts_argmax(signedpower((($returns < 0) ? stddev($returns, 20) : $close), 2), 5)) - 0.5:将上述排名序号的排名减去0.5,表示排名越靠前,该量化因子值越小(越好)。
综上所述,该量化因子的值越小,表示在过去5天中,基础价格的平方的方向排名越高,即基础价格的平方的波动性越大,可能因此反映出一些特定的市场趋势或者交易时机。
Alpha#2(-1 * correlation(rank(delta(log($volume), 2)), rank((($close - $open) / $open)), 6))解析:
$volume:表示每日股票的成交量,这是原始数据。
log($volume):对每日成交量取对数,得到对数成交量。这可以帮助平滑成交量的波动性并提高其可比性。
delta(log($volume), 2):计算对数成交量的2天变化,即当日对数成交量减去2天前的对数成交量。这个量化因子是成交量的2天变化,表示成交量的变化趋势。
rank(delta(log($volume), 2)):对上述变化进行排名,得到排名序号。
$close:表示每日股票的收盘价,这是原始数据。
$open:表示每日股票的开盘价,这是原始数据。
($close - $open) / $open:计算开盘价相对于收盘价的变化率,表示当日收盘价相对于开盘价的表现。
rank((($close - $open) / $open)):对上述变化率进行排名,得到排名序号。
correlation(rank(delta(log($volume), 2)), rank((($close - $open) / $open)), 6):计算过去6天中成交量变化排名和开盘价相对于收盘价变化率排名的时序相关系数。这个量化因子是成交量变化与开盘价相对于收盘价变化率之间的相关性,表示成交量变化与价格变化之间的关系。
-1 * correlation(rank(delta(log($volume), 2)), rank((($close - $open) / $open)), 6):将时序相关系数乘以-1,表示相关性越小(越负相关),该量化因子值越小(越好)。
综上所述,该量化因子的值越小,表示在过去6天中,成交量变化排名与开盘价相对于收盘价变化率排名之间的负相关性越强,即成交量变化与价格变化之间的负相关越大,可能因此反映出一些特定的市场趋势或者交易时机。
Alpha#3(-1 * correlation(rank($open), rank($volume), 10))
解析:
$open:表示每日股票的开盘价,这是原始数据。
$volume:表示每日股票的成交量,这也是原始数据。
rank($open):对每日开盘价进行排名,得到排名序号。
rank($volume):对每日成交量进行排名,得到排名序号。
correlation(rank($open), rank($volume), 10):计算过去10天中开盘价排名和成交量排名的时序相关系数。这个量化因子是开盘价和成交量的相关性,表示在过去10天里,开盘价和成交量是否呈现出一定的相似性。
-1 * correlation(rank($open), rank($volume), 10):将时序相关系数乘以-1,表示相关性越小,该量化因子值越小(越好)。
综上所述,该量化因子的值越小,表示在过去10天里,开盘价和成交量的相关性越小,即开盘价与成交量出现较少的一致性表现,可能因此反映出一些特定的市场趋势或者交易时机。
Alpha#4(-1 * ts_rank(rank($low), 9))解析:
$low:表示每日股票的最低价,这是原始数据。
rank($low):对每日的最低价进行排名,得到排名序号。注意,排名是按照每日最低价,而不是按照时间序列的顺序计算的。
ts_rank(rank($low), 9):对过去9天的每日最低价排名序号进行排名,得到排名序号的排名。这个量化因子是对近期最低价排名的排名,表示最近9天股票的最低价相对于其他9天的最低价的表现。
-1 * ts_rank(rank($low), 9):将排名的排名乘以-1,表示越靠前的排名越好,即最近9天的最低价排名越高,该量化因子值越小(越好)。
因此,该量化因子的值越小,表示最近9天的股票最低价表现越好,就是相对于过去9天的最低价排名越高。
Alpha#5(rank(($open - (sum($vwap, 10) / 10))) * (-1 * abs(rank(($close - $vwap)))))
解析:
$open:表示每日股票的开盘价,这是原始数据。
$vwap:表示每日股票的成交量加权平均价,这也是原始数据。
sum($vwap, 10):对过去10天的$vwap进行求和,得到10日均价。
(sum($vwap, 10) / 10):将10日均价除以10,得到10日平均成交量加权平均价。
($open - (sum($vwap, 10) / 10)):表示当日开盘价与10日平均成交量加权平均价之差,衡量当日开盘价相对于短期均价的表现。
rank(($open - (sum($vwap, 10) / 10))):对上述差值进行排名,得到排名序号。
($close - $vwap):表示当日收盘价与$vwap之差,衡量当日收盘价相对$vwap的表现。
abs(rank(($close - $vwap)))):对上述差值取绝对值并进行排名,得到排名序号。
(-1 * abs(rank(($close - $vwap))))):将上述排名序号乘以-1并取绝对值,表示越靠前的排名越好,即收盘价与$vwap之差越小的日期排名越高,该量化因子值越小(越好)。
rank(($open - (sum($vwap, 10) / 10))) * (-1 * abs(rank(($close - $vwap)))):将第6步和第9步的排名序号相乘,表示开盘价表现排名和收盘价与$vwap之差的排名的乘积,表示当日股票表现的综合评价。
综上所述,该量化因子的值越小,表示当日股票的表现越好,即开盘价相对于短期均价的表现越好且收盘价与$vwap之差排名越高。
Alpha#6(-1 * correlation($open, $volume, 10))解析:
$open:表示每日股票的开盘价,这是原始数据。
$volume:表示每日股票的成交量,这也是原始数据。
correlation($open, $volume, 10):计算过去10天的开盘价和成交量的时序相关系数。这个量化因子是开盘价和成交量的相关性,表示在过去10天里,开盘价和成交量是否呈现出一定的相似性。
-1 * correlation($open, $volume, 10):将时序相关系数乘以-1,表示开盘价和成交量的相关性越小,该量化因子值越小(越好)。
综上所述,该量化因子的值越小,表示在过去10天里,开盘价和成交量的相关性越小,即开盘价与成交量出现较少的一致性表现,可能因此反映出一些特定的市场趋势或者交易时机。
Alpha#7((mean($volume,20) < $volume) ? ((-1 * ts_rank(abs(delta($close, 7)), 60)) * sign(delta($close, 7))) : (-1* 1))
解析:
$volume:表示每日股票的成交量,这是原始数据。
mean($volume,20):表示过去20天的成交量的平均值,衡量过去20天内的成交量水平。
$volume > mean($volume,20):判断当日成交量是否大于过去20天的成交量平均值,返回True或False。如果为True,说明当日成交量高于过去20天的平均水平。
delta($close, 7):计算股票收盘价的7天变化,即当日收盘价减去7天前的收盘价。这个量化因子是收盘价的7天变化,表示股票价格的变化趋势。
abs(delta($close, 7)):对上述7天变化取绝对值,得到价格变化的绝对值。
ts_rank(abs(delta($close, 7)), 60):对过去60天中价格变化的绝对值进行排名,得到排名序号。
-1 * ts_rank(abs(delta($close, 7)), 60):将上述排名序号乘以-1,表示排名越靠前,该量化因子值越小(越好)。
sign(delta($close, 7)):计算股票收盘价的7天变化的符号,表示价格变化的方向。
((-1 * ts_rank(abs(delta($close, 7)), 60)) * sign(delta($close, 7))):将排名序号乘以价格变化的方向,表示价格变化的趋势。
((mean($volume,20) < $volume) ? ((-1 * ts_rank(abs(delta($close, 7)), 60)) * sign(delta($close, 7))) : (-1* 1)):如果当日成交量高于过去20天的平均水平,则将价格变化趋势作为基础量化因子;否则,将-1作为基础量化因子。
综上所述,该量化因子的值是基于股票价格和成交量的一些特定关系来计算。如果当日成交量高于过去20天的平均水平,则将股票收盘价的7天变化的绝对值在过去60天中的排名与其符号相乘作为基础量化因子,表示价格变化的趋势。如果当日成交量低于过去20天的平均水平,则将-1作为基础量化因子的值。因此,这个量化因子的值越小,表示当日成交量高于过去20天的平均水平且价格变化趋势明显,可能因此反映出一些特定的市场趋势或者交易时机。
待续 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。恒瑞行配资提示:文章来自网络,不代表本站观点。