worldquant操作笔记

一、世坤WorldQuant介绍

不多介绍,自行AI。

二、一个最简单的alpha例子

首先解释下,在传统金融领域中,alpha的定义是超额收益,与之对应的基准收益就是beta,例如沪深300和标普500。而在worldquant中,alpha的含义是因子就是,例如上图中的左边的一行代码就是一个alpha。

2.1 该代码的详细含义

仔细看下该代码
zscore(rank(ts_rank(pretax_income, 250) * ts_rank(sales, 250)))

需要详细解释下每个变量的意义。
pretax_income 表示的是税前利润,是分子端的核心盈利指标
sales营业收入,是分母中的核心指标
ts_rank对每只股票,在过去250个交易日,也就是一年的时间里,计算它当天的税前利润在过去一年中的相对排名,相对排名在0-1之间。反映这只股票最近的盈利能力在自身历史中的相对强弱。
rank是python中的常用函数,对变量进行排名

综合来看,该因子可以理解为:

寻找同时满足以下两个条件的股票:

1)最近的税前利润在自身过去一年的历史中处于高位,或靠前的位置;

2)最近的营业收入在自身过去一年的历史中也处于高位。

说白了就是寻找过去一年的时间中净利润和营收都在同时增长的股票。

2.2 回测结果说明

再详细解释下该因子信号,也就是该alpha的结果说明。
Sharpe,最常见的夏普比率,就是说每承担一单位的波动风险,可以获得多少单位的超额收益。
turnover,换手率,官方解释是average measure of daily trading activity, Turnover= Value Traded / Value Held,这里指的是每日换手率。正常来说,每日换手率在3%以下属于偏低水平,在3%-6%区间属于正常的换手率水平。

补充疑问:税前利润和营收每个季度才会更新一次,为何这里的换手率并不是极低的?

答案:因为股票池里的股票数量足够多,每个股票的财报发布日期不一致,从而导致每日都有可能排名发生改变,从而进行调仓。
Fitness适应度 ,官方解释是Hybrid metric that indicates overall performance. Higher values indicates better performance. Fitness=Sharpe * Sqrt( Abs(Returns) / Max(Turnover, 0.125))

这是一个非常重要的概念,正常机构在给alpha进行排名时不会用sharpe,而是用该指标。以前的我一直没有想明白一件事情,个人投资和机构投资,就是说资金规模的不同,会导致投资策略有和不同。在这里突然就找到了答案。

分解下Fitness计算公式的三个指标
Fitness=Sharpe * Sqrt( Abs(Returns) / Max(Turnover, 0.125))

  1. Sharpe,夏普比率,夏普比率越高,Fitrness越高,这个很好理解。
  2. Abs(Returns), 收益率的绝对值,收益率越高,Fitness越高。这里用绝对值的原因是考虑到了做空的因素,做空也可以产生正收益。
  3. 核心就在于第3点,取每日换手率和12.5%中的较大值。如果每日换手率小于12.5%,就按照12.5%来惩罚。如果每日换手率大于12.5%,就按照真实换手率更狠地惩罚。

Abs(Returns) / Max(Turnover, 0.125)其实就表示说,每换手1%,你赚了多少钱。也可以称之为单位换手的收益。

最终的整体公式为Fitness=Sharpe⋅单位换手收益Fitness= Sharpe \cdot \sqrt{单位换手收益}Fitness=Sharpe⋅单位换手收益

考虑到的维度有2个:

1、 看你赚了多少钱,承担了多少风险;

2、为了挣这些钱换了多少手;

将这两个维度相乘起来,得到的一个综合评分就是Fitness。

问题 :前面不是说一般好的alpha的每日换手率会控制在3%-6%之间吗,为何这里用12.5%来和日换手率做比较?
答案:这里的12.5%是下限。虽然说排名前100的alpha日换手率确实不高,但是不想让大家卷"谁换手率更低"。有一些做高频策略的,不可避免就是天然的换手率就会高。不想因为设置过低的日换手率惩罚机制从而使得高频策略无用武之地。

Returns,回报率,官方解释为Annualized average gain or loss as a fraction of th invested amount. In worldquant brain the invested amount is equal to half the book size. 这里的回报率指的是特定条件下的年化收益。特定条件指的是年化收益率是算在实际动用的保证金上的,不是算在总账户本金上面的。实际动用的保证金永远只有本金book size的一般。因此看到的returns,实际相当于2倍杠杆下的年化收益。

Drawdown,最大回撤,无需多说。
Margin,单边交易额的净收益率,就是说每交易1美元,平均赚了多少钱。官方解释是Average gain or loss per dollar traded, calculated as Pnl divided by total dollars traded in a given time period

2.3 回测的底层操作逻辑

这里我们再深入了解下,在worldquant brain平台中,我们点击运行时,brain后台做了哪些操作。

通常在alpha回测中,股票池会有200-3000种股票工具,为了更好理解概念,我们假设回测股票池中只有8只股票,我们回测表达式排名,并且使用市场中性化、延迟1和衰减0设置。

补充,市场中性化+延迟1+衰减0设置是一个通用设置。

市场中性化:先将所有股票按照市值分成3-5档,然后在每一档里面分别做一次zscore处理,然后再根据因子信号选择股票。避免出现持仓全是大盘股或者全是小盘股的情况。避免因为市值影响而带来策略评估的失真。

延迟1:今天算出来的因子信号,不在今天交易,而是在明天开盘时才去调仓。

衰减0:因子信号一旦产生,就永远使用当天的最新值,alpha的计算只和当天有关,和昨日无关。不会随着时间的变化而稀释掉alpha。

设定好市场中性化、延迟1和衰减0之后,我们就执行做多因子信号排名靠前的股票,做空因子信号排名靠后的股票。

我们假定我们要回测的alpha为
rank(-returns)。该alpha的意思就是今日收益率大跌的股票,明日买入,今天收益率大涨的股票,明日卖出。注意这里的收益率是指alpha的收益率,而不是股票本身的涨跌。
步骤1:为每只股票评估表达式 ,以生成给定日期的alpha向量。可以看到,在C列中,2-1日大涨3%的股票在因子信号排名中得分为0,排名最后。D列为因子信号排名。

步骤2:从向量的每个值中减去该组向量的平均值,这称为中性化 。改组可以是整个市场,我们也可以在该股票所处的行业分组上执行这个操作。

假设我们减去整个市场,也就是减去0.50,得到F列。

步骤3:将生成的值缩放或标准化,使得alpha向量值的绝对值总和为1。称为标准化权重。我们将G列的值加和,得到sum=2.3. 将F列除以2.3,得到H列和I列。

步骤4:使用归一化权重。brain回测器将资金分配给每个股票以构建投资组合,得到J列。J列的含义是指,对股票1的头寸为440万美元做空,对股票5的头寸为60万美元做多。

步骤5:根据当天观察到的股票回报率计算alpha生成下一天的收益率,如K列所示。并且得到每日的Pnl。

步骤6:对于历史时间跨度中的每个日期重复执行步骤1-5的操作,以获取每日生成的日收益。

步骤7:计算样本期间从开始到现在的累积Pnl,以获取alpha的Pnl图表。

相关推荐
摇滚侠18 小时前
Vue 项目实战《尚医通》,实名认证模块获取用户信息,笔记54
vue.js·笔记
lxp19974121 小时前
vue笔记摘要-更新中
前端·vue.js·笔记
wh_xia_jun1 天前
桑拿控制器项目持久化层笔记
笔记
立志成为大牛的小牛1 天前
数据结构——五十二、散列函数的构造(王道408)
数据结构·笔记·程序人生·考研·算法
yuxb731 天前
Kubernetes 核心概念与微服务架构解析
笔记·kubernetes
d111111111d1 天前
关于STM32的选项字节的问题:如果我通过操作指针把数据写在了单片机的选项字节区域那么换别的程序时候数据会进行变化吗?
笔记·stm32·单片机·嵌入式硬件·学习
ouliten1 天前
C++笔记:std::stringbuf
开发语言·c++·笔记
安如衫1 天前
【机器学习基础】Attention in Transformers:注意力机制
笔记·深度学习·学习·机器学习·注意力机制
十安_数学好题速析1 天前
幂次之争:巧用对称性破解指数不等式
笔记·学习·高考