WorldQuant 部分函数解释说明
Arithmetic
- abs
x的绝对值 - add(x, y, filter = false), x + y
添加所有输入(至少需要2个输入)。如果filter=true,则在添加之前将所有输入NaN过滤为0 - densify(x)
如果x中唯一值的数量为n,则将这些值映射到0和(n-1)之间。数量级不需要保留。 - divide(x, y), x / y
x除以y - inverse(x)
1 / x - log(x):对数; max(x, y, …):最大值; min(x, y …):最小值; multiply(x ,y, … , filter=false):乘以; power(x, y):x ^ y; reverse(x): -x;
- sign(x)
当x>0,sign(x)=1;
当x=0,sign(x)=0;
当x<0, sign(x)=-1;
当x=NaN,sign(x)=NaN; - signed_power(x, y)
x提高到y的幂,使得最终结果保留x的符号。
If x = 3, y = 2 ⇒ abs(x) = 3 ⇒ abs(x) ^ y = 9 and sign(x) = +1 ⇒ sign(x) * (abs(x) ^ y) = signed_power(x, y) = 9 - subtract(x, y, filter=false), x - y
x-y。如果filter=true,则将之前将所有输入NaN过滤为0
Logical
- and(input1, input2)
逻辑AND运算符,如果两个操作数都为真,则返回真,否则返回假 - if_else(event, input1, input2)
如果提供的事件条件event为真,则将返回input1。如果提供的事件条件为false,则将返回input2。 - is_nan(input)
判断是否为NaN - not(x)
取反,如果x=true,则返回false
Time Series
- days_from_last_change(x)
自上次更改x以来的天数 - hump(x, hump = 0.01)
限制投入变化的数量和幅度。
如果今天的值与昨天的值相比只有微小变化(不超过阈值),则驼峰运算符的输出与昨天保持不变。如果变化大于限制,则输出为昨天的值加上变化方向的限制。 - kth_element(x, d, k)
通过查看回溯天数d返回输入的第K个值。如果k=1,此运算符可用于回填缺失的数据 - last_diff_value(x, d)
返回过去d天中不等于当前x值的最后一个x值 - ts_arg_max(x, d)
返回过去d天时间序列中最大值的相对指数。如果当前日期具有过去d天的最大值,则返回0。如果前一天具有过去d天的最大值,则返回1。
例如:d=6,过去6天的值为[6,2,8,5,9,4],第一个元素为今天的值,则最大值为9,并且在今天之前4天存在。因此,ts_arg_max(x,d)=4 - ts_arg_min(x, d)
返回过去d天时间序列中最小值的相对索引;如果当前日期具有过去d天的最小值,则返回0;如果前一天具有过去d天的最小值,则返回1。 - ts_mean(x, d)
返回过去d天x的平均值。 - ts_av_diff(x,d)
如果d=6,过去6天的值为[6,2,8,5,9,NaN],则ts_mean(x,d)=6,因为NaN在平均值计算中被忽略了。因此,ts_av_diff(x,d)=6-6=0 - ts_backfill(x,lookback = d, k=1, ignore=“NAN”)
如果数据字段x的输入值为非NaN,则输出为x
如果数据字段x=NaN,则输出过去252天内x的最新可用且非NaN的值 - ts_corr(x, y, d)
返回过去d天x和y的相关性 - ts_count_nans(x ,d)
返回过去d天内x中NaN值的数量 - ts_covariance(y, x, d)
返回过去d天y和x的协方差
在实际计算中,协方差通常通过以下公式计算:
[ \text{Cov}(X, Y) = \frac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y}) ] - ts_decay_linear(x, d, dense = false)
返回过去d天x的线性衰减。dense =false表示运算符在稀疏模式下工作,我们将NaN视为0。在密集模式下会。 - ts_delay(x, d)
返回d天前x值 - ts_delta(x, d)
返回x - ts_delay(x,d) - ts_product(x, d)
返回过去d天x的乘积 - ts_rank(x, d, constant = 0)
对过去d天内每个仪器的x值进行排名,然后返回当前值+常数的排名。如果未指定,默认情况下,常量=0。 - ts_quantile(x,d, driver=“gaussian” )
它计算ts_rank,并将驱动器分布的逆累积密度函数应用于其值。
driver:gaussian,uniform,cauchy - ts_regression(y, x, d, lag = 0, rettype = 0)
从过去d个交易日的数据中,使用x估算y时,从方程中返回β系数。
列如:得到d天内回报率和分析师评级之间的关系,返回线性回归系数,如果系数的排名(rank)较高说明过去预测得比较准确 - ts_scale(x, d, constant = 0)
返回_x-ts_min(x,d))/(ts_max(x,d)-ts_min[x,d])+常数。 - ts_std_dev(x, d)
返回过去d天x的标准偏差 - ts_step(1), step(1)
返回天数计数器 - ts_sum(x, d)
过去d天x的总和 - ts_zscore(x, d)
描述了一个值与一组值的平均值之间的关系。ts_zscore分数是根据平均值的标准偏差来衡量的:(x-tsmean(x,d))/tsstddev(x,d)。此运算符可能有助于减少异常值和下降。
Cross Sectional
- normalize(x, useStd = false, limit = 0.0)
计算某个日期的所有有效alpha值的平均值,然后从每个元素中减去该平均值
此运算符计算某个日期的所有有效alpha值的平均值,然后从每个元素中减去该平均值。如果useStd=true,则运算符计算结果值的标准偏差,并将每个归一化元素除以它。如果limit不等于0.0,则运算符将结果α值(在-limit到+limit之间)。
例子:
如果在某个日期,某个输入x的仪器值为[3,5,6,2],平均值=4,标准偏差=1.82
normalize(x,useStd=false,limit=0.0)=[3-4,5-4,6-4,2-4]=[-1,1,2,-2]
normalize(x,useStd=true,limit=0.0)=[-1/1.82,1/1.82,2/1.82,-2/1.82]=[-0.55,0.55,1.1,-1.1] - quantile(x, driver = gaussian, sigma = 1.0)
对原始向量进行排序,移动排序后的阿尔法向量。driver:gaussian,uniform,cauchy - rank(x, rate=2)
在所有仪器中对输入进行排名,并返回一个在0.0和1.0之间均匀分布的数字 - scale(x, scale=1, longscale=1, shortscale=1)
将输入缩放标准尺寸。
例:scale(returns, scale=4); scale (returns, scale= 1) + scale (close, scale=20); scale (returns, longscale=4, shortscale=3) - winsorize(x, std=4)
x以确保x中的所有值都在下限和上限之间,上限被指定为std的倍数。 - zscore(x)
zscore是一种数值测量方法,描述了一个值与一组值的平均值之间的关系。zscore是根据平均值的标准偏差来衡量的
Vector
- vec_avg(x)
取x的平均值 - vec_sum(x)
x之和
Transformational
- bucket(rank(x), range=“0, 1, 0.1” or buckets = “2,5,6,7,10”)
将浮点值转换为用户指定bucket的索引。Bucket可用于创建组值,这些值可以作为输入传递给组运算符。
buckets = “2,5,6,7,10” [-1,3,6,8,12] 变为 [0,1,2,4,5],解释:-1小于2,则为0,3在2和5之间则为1,6在5和6之间则为2,8在7和10之间则为4,12大于10则为5,如果有13也为5.
range=“0.1, 1, 0.1” [0.05,0.5,0.9]变为[0,4,8] - trade_when(x, y, z)
用于仅在指定条件下更改Alpha值,并在其他情况下保持Alpha值。它还允许在指定条件下关闭Alpha位置(分配NaN值)
如果触发器z>0,则Alpha=NaN。
如果触发器x>0,则Alpha=AlphaExp;
否则,Alpha=previousAlpha
Group
-
group_backfill(x, group, d, std = 4.0) *
如果某个日期和仪器的某个值是NaN,则从同一组仪器中计算过去d天内所有非NaN值的winsorized平均值
如果d=4,并且组中有3个仪器(i1,i2,i3),其过去4天的值为x[i1]=[4,2,5,5],x[i2]=[7,NaN,2,9],x[i]=[NaN,-4,2,NaN],其中第一个元素是最新的,那么如果我们想回填x,我们只需要回填x[i3]的第一个元素,因为其他所有仪器的第一个元件都是非NaN的 -
group_mean(x, weight, group)
组中的所有元素都等于平均值 -
group_neutralize(x, group)
如果10个仪器在某个日期的字段x值为[3,2,6,5,8,9,1,4,8,0],前5个仪器属于一组,后5个属于另一组,则第一组的平均值=(3+2+6+5+8)/5=4.8,第二组的平均数=(9+1+4+8+0)/5=4.4。从各组仪器中减去平均值得到[3-4.8、2-4.8、6-4.8、5-4.8、8-4.8、9-4.4、1-4.4、4-4.4、8-4.4、0-4.4]=[-1.8、-2.8、1.2、0.2、3.2、4.6、-3.4、-0.4、3.6、-4.4] -
group_rank(x, group)
组中的每个元素都被分配了该组中的相应排名 -
group_zscore(x, group) *
计算组Z分数——描述一个值与一组值的平均值之间关系的数值度量。z-score是根据平均值的标准偏差来衡量的。zscore=(data-mean)/stddev of x,用于其组内的每个仪器。