2025/5/18
本篇是general tech的第二篇,第一篇中我们探讨了alpha合成的相关内容,从向量的角度理解了为什么相同datafield的alpha合成合理、如何再利用没用预测能力的alpha。本文聚焦于single alpha的绩效考核问题。在你是否知道为什么Brain回测出来的曲线是流动性最好的若干支股票的信号值加权组合?换手率低的因子透露了什么?为什么时序求均值可以提升alpha效果?为什么有时候
主要通过衡量不同行业在该行业中压力时段(不是整体市场的危机)中的表现来衡量一个公司质量的好坏,而不需要用到任何公司基本面的信息。不同行业的压力时段不同,因而grouping是这个alpha的一个难题。
相关数据集:
mdf_qty:公司质量
fn6_beta:β
某一种grouping
问题一:
在这个表达式`group_mean(returns, volume, densify(sector))`中,`volume`被用作权重。这意味着在计算每个组(由`densify(sector)`确定)的平均收益率时,每个样本的收益率将根据其`volume`进行加权。具体来说,如果一个样本的`volume`值较大,那么它在计算平均值时的影响力将会更大。
问题二:
"all elements in group equals to the mean value of the group"的意思是,在每个组内,所有元素的值会被替换为该组的平均值。这里的"平均值"是用每个元素的值和它的权重(在这个例子中是`volume`)来计算的。
举个例子来说明:
"all elements in group equals to the mean value of the group"的意思是,在每个组内,所有元素的值会被替换为该组的平均值。这里的"平均值"是用每个元素的值和它的权重(在这个例子中是`volume`)来计算的。
举个例子来说明:
假设我们有以下数据:
| sector | returns | volume |
|行业 |退货 |体积 |
|--------|---------|--------|
| A | 10 | 100 |
|一个 |10 |100 元 |
| A | 20 | 200 |
|一个 |20 元 |200 元 |
| B | 30 | 300 |
|乙 |30 元 |300 元 |
| B | 40 | 400 |
|乙 |40 元 |400 元 |
在这个例子中,`group_mean(returns, volume, densify(sector))`会计算出每个部门的加权平均收益率,然后将每个部门内的所有收益率替换为该部门的加权平均收益率。
对于部门A,加权平均收益率 = (10*100 + 20*200) / (100 + 200) = 16.67。
因此,部门A中的所有收益率都将被替换为16.67。
同样,对于部门B,加权平均收益率 = (30*300 + 40*400) / (300 + 400) = 36。
因此,部门B中的所有收益率都将被替换为36。
所以,处理后的数据如下:
| sector | returns | volume |
|行业 |退货 |体积 |
|--------|---------|--------|
| A | 16.67 | 100 |
|一个 |16.67 元 |100 元 |
| A | 16.67 | 200 |
|一个 |16.67 元 |200 元 |
| B | 36 | 300 |
|乙 |36 元 |300 元 |
| B | 36 | 400 |
|乙 |36 元 |400 元 |
关于多个alpha的correlation如何计算?
- 1 year ago
请问老师,多个alpha之间的correlation是如何计算的?
是计算他们的pnl之间的correlation么还是
分别计算不同asset的correlation然后求平均还是怎样呢?
平台的方式是计算两两Alpha之间PnL的相关系数。
是根据PnL的结果计算的。
一个Alpha每天都会产生一个盈亏,多天的盈亏值即一个数列。将不同Alpha的PnL数列进行比对,计算相关系数得出correlation。
有intraday的数据,但目前暂不对用户提供intraday的交易,例如一天内多次交易。
谢谢解答!希望您通过下述样例数据检查我的理解是否准确:
1. Drawdown是只考虑峰到其后的谷吗?
对Drawdown,如果某时段的数据为4, 14, 3, 21, 9, 32, 17, 49,则Drawdown是否是15(32 - 17)而非46(49 - 3)?
2. 年化收益率是等于((日收益率 + 1)的累乘) - 1吗,即:
如果Booksize是2000,某时段的PnL为3000, 2000, 1000, 4000,则日收益率是否是0.5, 0, -0.5, 1,年化收益率是否是(1.5 * 1 * 0.5 * 2) - 1 = 0.5
其中,Da,Zhi (2014) 认为动量的积累路径很重要。如果股票A的走势是每天稳定1%的上涨,而另一只股票B每天都在大涨大跌,那么在两只股票总收益率一样的情况下,投资者会更注意到股票B。对此。他们提出了一个新的指标,信息离散度(ID),来衡量股票价格波动的特性。他们发现,信息离散度较小,即股价波动较连续的股票,投资者反应会不足。 从整个长期角度来说,Huang (2021) 强调了动量缺口对股票动量效应的影响。动量缺口是通过比较不同股票在特定时间段内收益的分布差异来定义的。Huang 发现,当动量缺口较大时,动量效应表现较差。因此,选择在动量缺口不高的情况下实施动量策略可以提高策略的表现。
这个是我们看过山车,投资者的心理跟随改变
由于两篇文章涉及到的核心思想是短期与长期数据的波动性对于动量效应的负面影响,而A股市场的反转效应要远远强于动量效应,故认为可以利用两篇文章的思路来强化A股的反转因子表现
-
- 并没有想到怎样可以在brain平台上表示一段时间的下跌日期和上涨日期数量?我在这里用变异系数来衡量,变异系数越大越离散,越小越连续
- 动量缺口:定义为全部股票 t-12 至 t-2 月累计收益的四分位差(或者 90% 分位数减 10% 分位数,二者高度相关)动量缺口窗口设置为60,思路是动量缺口越大,股票越有可能反转,结果发现并没有对因子的表现显著提高,如果改变想法为trade_when条件,可能会有更好的结果
- 并没有想到怎样可以在brain平台上表示一段时间的下跌日期和上涨日期数量?我在这里用变异系数来衡量,变异系数越大越离散,越小越连续”
-
这个实现起来并不难。你可以这么做:希望能帮助到你实现更好的Alpha绩效
您好,换手率实际上是衡量投资组合的交易活跃度或频率的一个指标。
这个公式表示的是在一定时期内,投资组合的买入和卖出交易额占投资组合总市值的比例。换手率越高,说明投资组合的交易频率越高。
在Fitness公式中,换手率的作用是为了调整投资策略的收益,考虑到交易频率的影响。一般来说,交易频率越高,交易成本就越高,这会影响投资策略的实际收益。因此,Fitness公式通过除以换手率,来对高交易频率的策略进行惩罚。
在Fitness公式中,Turnover的分母位置实际上是在考虑到了交易成本和市场影响成本。
-
交易成本:每次交易都会产生一定的费用,如佣金、印花税等。如果一个投资策略的换手率非常高,即频繁买卖,那么这些交易成本就会累积起来,对总的投资回报产生负面影响。
-
市场影响成本:大规模的交易可能会影响市场价格。例如,大量买入可能会推高价格,而大量卖出可能导致价格下跌。这种市场影响成本在高换手率的策略中尤为显著。
因此,Fitness公式中的Turnover是在尝试平衡投资回报和交易成本。在Sharpe和Returns保持不变的情况下,如果Turnover过高,可能意味着支付了更多的交易成本,从而降低了整体的Fitness。这就是为什么在公式中,Turnover越高,Fitness越低的原因。
Fitness = Sharpe * Sqrt( Abs( Returns ) / Max( Turnover, 0.125 ) )
换手率 = (买入总额 + 卖出总额) / 2 / 投资组合市值
请问怎么对vector数据取20天之前的值
请使用vector operators对其进行操作后,再采用ts_delay即可
在设置的时候,设置decay
种。我主要就是不知道前面的decay系数exp(-n)该怎么设置
了解了,谢谢您的回复。我查找了一下,确实暂时没有实现您这个要求的功能。有个类似的operator可以实现自定义weight的为:
group_mean(x、权重、组)
组中的所有元素都等于该组的平均值。平均值 = 每组中的 sum(data*weight) / sum(weight)。
有大佬在用深度学习(例如时序模型)挖掘因子吗
- 1 year ago
最近用transformer挖掘因子,用量价做特征,收益率为target,损失函数是ICLoss,感觉模型效果在测试集上不行,有大佬做过类似的吗,求解
更多推荐
纯个人观点。
我感觉ML的模型在量化上的使用需要看输入和输出,看dataset的复杂程度。即使输入输出确定,损失函数确定,并不意味肯定有合适的模型可以跑出类型效果。想通过复杂的深度学习模型去直接找到好的策略,不是那么简单的事情;还是需要人脑去思考怎么探索可以获得合适的结果,且可能需要很多步。
针对transformer,不知道你是否考虑过它的适用性。量化里,基本都是时间序列数据,有seasonal的数据,也有event数据。通过过去的n个点来预测未来m个点,transformer真的适用吗?尤其在预测长时间序列,是否会带入更多噪声?参考一下这篇论文:https://arxiv.org/pdf/2205.13504.pdf
对于时间序列的预测,还需要确定的是,training,validation,test dataset怎么分,损失函数怎么确定,在什么维度上建立。
我觉得,很多时候,传统的ML算法可能就足够好了。如果想使用复杂的AI算法,甚至使用LLM/Generative AI,需要从逻辑上,看看如何去将任务细分,确定在每一个步骤中,使用什么会更好,然后将结果带入下一个步骤和模型中继续使用。这个,是可以深度研究一下,推荐了解一下langchain,autoGPT等。
对于Brain上的dataset,好像没办法去train某一个模型。更多的是针对2-3个数据,使用固定的那几种逻辑关系,去跑结果。逻辑关系的对应公式,可能会有多种,找到结果好的公式,把思路表达出来。通过API的使用,可以优化一些参数,类似于traning。其实,这一步,是可以编程,让python脚本自动化去找到最优参数。
https://support.worldquantbrain.com/hc/en-us/community/posts/19032039285783-%E6%9C%89%E5%A4%A7%E4%BD%AC%E5%9C%A8%E7%94%A8%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-%E4%BE%8B%E5%A6%82%E6%97%B6%E5%BA%8F%E6%A8%A1%E5%9E%8B-%E6%8C%96%E6%8E%98%E5%9B%A0%E5%AD%90%E5%90%97
4
感谢各位回答,我的思路是这样的,既然我们用一些简单的计算例如ts_mean之类的组合都可以获得比较好的因子,那用复杂的非线形模型不应该学不出来的一个因子,是因为引入更多的噪声挖不出有用的信号还是建模的对象或者方式有问题,最近也一直考虑这个问题没有答案。
关于 如何 表示连续持仓 和 实现分组排序 的问题
(1)在很多研报中,换仓周期为 n个交易日。想知道是否有相关方法可以在Fast expression 中表示?
(2)为了检验因子的有效性,常对因子进行分组检验。比如常见的分成10组,构建组1 - 组10 这种多空组合,想知道是否有相关方法可以在Fast expression 中表示这种持仓方式?
1.可以使用keep运算符
2.可以使用bucket运算符。请注意,这种分组方式,如果照搬过来,会造成coverage的下降,即仅交易20%的股票。
Weight concentration 49.96% is above cutoff of 10% on 10/10/2017.
用了pcr_vol_720 和 call_breakeven_720 field,发现数据里面有很多nan值。
然后Ts_backfill 做了填充,alpha还是会提醒权重过于集中。
请问要从哪方面去改进?
Truncation = 0.01
2. 一个公式
文中为了说明“因子挖掘”的概念,举了公式(5)这个例子,
https://support.worldquantbrain.com/hc/en-us/community/posts/19509071398679--Alpha%E7%81%B5%E6%84%9F-%E5%88%A9%E7%94%A8%E8%87%AA%E5%8A%A8%E5%8C%96-%E5%8F%AF%E8%A7%A3%E9%87%8A%E5%92%8C%E7%9F%A5%E8%AF%86%E9%A9%B1%E5%8A%A8%E7%9A%84%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%9B%E8%A1%8C%E5%B7%A5%E7%A8%8B%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84
一般来说alpha 为正数代表做多,负数代表做空。
我们持有这个投资组合一整天,并在模拟期的第二天把它卖掉。在一天之内,股票的价格都发生了变化,投资组合的总价值也发生了变化,用这一天的总盈亏表示今天的PnL值。
alpha 为0 和 NAN,以及trade_when 的退出条件alpha 为-1。都表示不做任何投资。可是alpha 为-1不是做空么?trade_when()涉及三个参数,您说的-1放在第三个参数,即退出条件时,它是一个bool变量,而非一个数值。基本等同于False
group_neutralize & group_normalize 的理解
在group_neutralize对于group_normalize的描述:
在 group_neutralize 对于 group_normalize 的描述:
Examples: 例子:
按照例子,gourp_normalize应该devided by mean of all absolute values of the group of instruments that it belongs on that day。
按照例子,gourp_normalize 应该按它当天所属的那组工具的所有绝对值来除以平均值
评价alpha时,有个Margin指标,含义是 每一元交易额的利润(或亏损),相当于利润率,我觉得这个利润率如果大于佣金率+滑点比率,就意味着会产生超过交易成本的实际利润?不知我这个理解对否?
如何解决Weight集中问题
Follow
也可以查看turnover的时序变化,如果ts_backfill或group_backfill的方式不能解决,可以考虑替换nan的值
费雪方程(Fisher Equation)是由美国经济学家欧文·费雪提出的,用于描述名义利率、实际利率和通胀之间的关系。费雪方程的基本形式为:
1 + 名义利率 = (1 + 实际利率) * (1 + 通胀率)
这个方程的含义是,名义利率等于实际利率加上通胀率,这是当通胀率较低时的近似形式。在通胀率较高时,需要使用上面的基本形式。这个方程被广泛用于经济学和金融学中,特别是在货币政策和投资决策等领域。
想剔除一些一些经营不善的公司的股票,如st股票,请问在平台上如何操作?
我个人认为st股票是不会在top3000/2000里的,因为他们的流动性一般不好。
重量浓度 100% 高于 2018 年 8 月 6 日的 10% 临界值。
看下数据集在这一天的缺失值或是表达式中是否有除以0的情况
写这个alpha遇到了困难,求建议
Follow
看起来是一个低换手率&高收益的指标。
Robust universe表现不好,我理解为在高流动性的股票上表现不好。看到因子中有一个 rank(volume) 的乘子,这个乘子可能会加剧 Universe 和 Robust universe 上的表现差距。
考虑反转这个乘子改成 1 - rank(volume),因子整体表现下降了(变成了Excellent)但是在 Robust universe 上表现提升可以提交。稍微调了下参数,达到了一个可以提交的比较好的整体评分:
z 评分(-mdl175_volatility)
*signed_power((1-等级(体积)), 0.43)
*(1+group_zscore(mdl175_revenuettm,子行业))
## 中国/D0/TOP3000/市场/衰减 0/TRUNCATION0.01
CHN 无法用加负号的方式反转pnl,可以从idea角度进行改进或者尝试其他idea。
WorldQuant把Alpha定义为未来金融资产价格变动的数学模型。
“如果我的alpha越好那么我的投资收益就会更好,会有较少的回撤并且曲线平滑向上”理解正确。
请问如何逆转交易?
Follow
在原本 short 的时候 long,在 long 的时候 short
是否采用负号,要根据Alpha本身的idea来确定,而非看到向下的信号就加负号,这样的操作对个人理解Alpha idea是有严重的损害。一个负号,它往往代表着从momentum到reversion的转变,这种转变是根本性的,要深刻理解。
另外,中国市场因为独特的交易条件,并不会像美国市场一样直接翻转它的表现,因此理解Alpha idea至关重要!因此,很重要的思考是,您觉得在什么条件下,这个idea翻转一下,就会有用呢。不要仅仅因为看到向下的信号就加负号。
如果把alpha分为量价基本面另类,那么另类下涵盖的alpha太过宽泛,或可分为
1.主要影响上市公司基本面,从而影响市场中主体对股票预期,预期作用于交易行为和股价的alpha
例如:财务基本面,和与上市公司行业密切相关的,或是绝大部分上市公司均存在,但不是财务因子的因子(例如论文,专利,招聘数据,职工与高管薪酬,esg,电商,信用卡)
2.对基本面影响较小,直接影响预期的alpha
例如:量价,社交媒体中对股票本身的数据,政策,宏观经济
前者的有效时间长于后者,原因在于金融市场是对系统行为预测结果会影响系统演化方向的二阶混沌系统。
通过此种分类方式,还可通过对alpha的门槛,技术含量等进行评估的方式,确定各类alpha的失效时间,其中,在量化越来越多越来越卷的背景下,量价alpha显然失效最快。
我当前的理解是keep运算符可以实现间隔特定时间进行调仓(例如间隔20个交易日,也就是一个月,进行调仓),那么能否更进一步地将这个调仓时间设定为特定的日期呢(例如月初、月末)?如果可以,该如何实现呢?https://support.worldquantbrain.com/hc/en-us/community/posts/24472160509719--%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99-%E4%B8%80%E6%96%87%E8%AF%BB%E6%87%82BRAIN%E7%9A%84%E9%87%8F%E5%8C%96%E5%AD%A6%E4%B9%A0%E4%BD%93%E7%B3%BB-%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E9%AB%98%E9%98%B6
概述:本篇是general tech的第二篇,第一篇中我们探讨了alpha合成的相关内容,从向量的角度理解了为什么相同datafield的alpha合成合理、如何再利用没用预测能力的alpha。本文聚焦于single alpha的绩效考核问题。
在你是否知道为什么Brain回测出来的曲线是流动性最好的若干支股票的信号值加权组合? 换手率低的因子透露了什么? 为什么时序求均值可以提升alpha效果? 为什么有时候我们需要做中性化neutralization? “减法”、“除法”以及“回归去残差”三种从A中消除B的方法有和同意你的观点,提交低相关性的阿尔法将有助于增加投资组合的价值,从而增加价值因子。然而,提交 alpha 并在很长一段时间内减少确实很困难,部分原因是池很大,也可能是因为前几个月的 corr 太低。
数据类型:Matrix、Vector & Group;
Matrix类型的数据属于二维数据,可以直接拿来,通过添加运算符进行回测
Vector类型的数据可以理解为三维数据,需要通过转换成二维数据(降维),才能进行回测
否则,回测的alpha会报错
如果在 10 天中 有一天 是
NaN
,那么ts_mean(close,10)
函数会 忽略 NaN 值,并基于其余有效数据计算均值。🔹 如果至少 有一个有效值,函数会计算这些有效值的均值。
🔹 如果 10 天全是 NaN,则返回
NaN
。总结来说,如果只有一天是 NaN,函数仍然可以正常计算,并会跳过 NaN 的那一天。
防止过拟合 —— 额外测试
子样本集 / 超样本集:Alpha 在较小或较大的样本集中不应完全失去其信号。
排序测试:对 Alpha 应用排序函数(rank ())后,其性能应保持不变。
符号测试:对 Alpha 应用符号函数(sign ())后,其夏普比率应仍为正。
小参数变化:Alpha 在进行微小的参数调整(如回顾天数、衰减)后,应保持性能。
测试期特征:基于训练期模拟结果开发的 Alpha,若在训练期和测试期都表现良好,则很可能是一个适合提交的有力候选,并且可能已经避免了过拟合
如何防止过拟合
过拟合是指模型针对特定的观测值(IS),而非一般结构(OS。
控制过拟合风险
经济意义上可解释
多种测试中有显著表现:在各种测试(子样本集、超样本集、符号、排名,或参数的微小变化)中保持显著表现的 Alpha,可以表明该 Alpha 的 “过拟合” 程度较低。
简洁性
没必要时,无需构建复杂的 Alpha。
不要在一个 Alpha 中使用过多的数据字段。
六、薪资发放周期
Base Payment每两月发放一次,Quarterly Payment每季度发放一次,所以每年的1月、3月、5月、6月、7月、9月、11月、12月都有发薪日,具体请见
要累计到下个周期内发放 值得注意的是:每次发钱你会收到邮件,需要你到Workday内确认金额和明细后,才会收到钱 如果你确认了但是银行卡填写错误,也是收不到钱的,也要确保你的银行卡没有转入金额的限制。银行卡填写规范请见 BRAIN量化研究顾问 - 银行卡信息填写注意事项
如果符合某一级别条件的顾问人数超过可用名额会怎样?
如果符合某一级别基本标准的顾问人数超过可用名额,则会使用决胜标准。这基于以下指标的总排名之和:
每个Alpha的平均不同操作符数量(越低越好) 每个Alpha的平均不同字段数量(越低越好) 总不同操作符数量(越高越好) 总不同字段数量(越高越好) 社区领导者对于每个顾问从自己的Alpha池提交的SuperAlpha,他们将被允许相应分配以选择是否在随后的一天使用扩展的Alpha池(基于当时的Genius级别)提交SuperAlpha。请注意,SuperAlphas的每日提交配额不会超过1。
例如,如果您在10个不同的日子里提交了由自己Alpha组成的SuperAlpha,您将被允许在其他10天里提交由其他池中的Alpha(根据您的Genius级别)组成的SuperAlpha;但是,如果之后您未能提交由自己Alpha组成的SuperAlpha,您将不被允许提交由其他池中的Alpha组成的SuperAlpha。
高级别的SuperAlpha访问权限是什么?
Qualification:任何顾问(包括Gold级别)提交100个Alpha后即可创建SuperAlphas。 Expert:还可以使用来自其大学顾问的Alpha提交SuperAlphas。 Master:还可以使用来自其国家顾问的Alpha提交SuperAlphas。 Grand Master:还可以使用来自全球所有顾问的Alpha提交SuperAlphas。