跳转至




Index

论如何白嫖论文

上一期我们介绍了金融人最常看的顶刊。有同学问,要怎么订阅这些杂志。

其实答案只有一个,就是美金。因为它们的订阅地址在官网都有。

养活这个世界的,是阳光、雨水和知识。我知道我们都应该尊重知识产权。不过,作为个人研究者,订阅所有的杂志、软件和书籍也是不太现实的。

我通常的做法是,先看先用,如果确实有用且需要,我会去书店、电影院、官网加倍返还。我的书也是这样,我也赞同你先免费看,只有你真正喜欢了,才去购买纸版。

这里就介绍两个免费下载论文的网站。


75%

sci-hub,它已经保存了 25million 篇论文,光是索引,压缩包就达 478M。

不过,它的搜索方式稍微有一点不好用,只能按标题和按引用,似乎不支持模糊匹配。如果你有了 DOI 标识,只是无法下载的话,会比较好用。

能找到你想要的论文吗?史上引用次数最多的论文是发表于 1951 年的一篇研究蛋白质的,标题是《Protein measurement with the folin phenol reagent》,要不您试试?

freefullpdf,如果你没有完整的论文信息,只有只言片语在手,那么试试 freefullpdf 吧。它的搜索使用了 google,提供了不错的搜索体验。

75%

动能反转:二阶导动量因子年化Alpha达到61%!

这一期,我们将介绍一个二阶导因子。我们将演示二阶导因子的探索优化过程,进一步介绍因子分析的原理,包括:

  1. 如何让 Alphalens 使用我们指定的分层
  2. 二阶导动量因子的数学原理
  3. By quantiles or By bins, 分层究竟意味着什么

最后,我们在 A 股 40%的抽样中,得到最近半年二阶导因子的最佳参数是 5 天。在此参数下,年化 Alpha 分别是 38.4%(多空)和61.5%(单边做多), beta 为-0.12,即收益独立于市场。

这是在不同周期、多空组合条件下产生的收益情况:

条件 Alpha Beta 累计收益
多空、2 30.6% -0.06 15%
多空、4 35.3% -0.1 17%
多空、5 38.4% -0.12 19%
多空、6 37.3% -0.12 18%
多空、8 32.4% -0.06 14.8%
多空、10 23.2% -0.07 11%
单多、10 17.6% -0.60 15%
单多、5 61.5% -0.58 37%

我们任意抽取一天选出的样本,绘制7天的走势平及样本均值的趋势线,验证因子分析结果可靠:

全部代码及数据购买本文后,私信留言,您将会收到一个在线网址和登录密码。这里有本文全部代码、A股2005年以来的行情数据(含分钟线)和回测引擎,支持在线运行和验证。


上一期我们检视了斜率因子。本质上,斜率因子是一阶导动量因子。比如,以如下方式生成的数组,它的斜率和一阶导是相等的:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from scipy.stats import linregress

slope = 0.2
x = np.arange(10)
y = slope * x + 1

d1 = np.diff(y).mean()

# 如果我们通过线性回归来求斜率
alpha, beta, *_ = linregress(x, y)

print(f"slope is {slope:.1f}")
print(f"first derivative is {d1:.1f}")
print(f"slope by linear regression is {alpha:.1f}")

三项输出都是 0.2。如果我们对价格序列求二阶导作为因子,它会对未来趋势有预测作用吗?我们先看结果,再来讨论背后的原理。

二阶导动量因子检验

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def d2_factor(close: NDArray, win: int = 10) -> NDArray:
    n = len(close)

    d1 = close[1:]/close[:-1] - 1
    d2 = d1[1:] - d1[:-1]

    factor = move_mean(d2, win)
    # 进行左填充,使之与输入等长
    factor = np.pad(factor, (n-len(factor), 0), ...)

    return factor

上面这段代码可以生成一个二阶导动量因子。注意我们用close[1:]/close[:-1]-1代替了通常意义上的一阶导,以起到某种标准化的作用。如果我们不这样做,那么高价股的因子将永远大于低价股的因子,从而永远有更高的因子暴露。

因子本身的参数是win,表示我们是在多长的时间段内计算的二阶导。

然后我们通过 Alphalens 来进行因子检验。第一次调用 Alphalens,我们按 quantiles 分层,分层数为 10。

从分层图来看,继续进行收益分析是没有意义的,我们必须先进行优化。

第一次调优

考虑到做多收益在第 9 层达到最大值,所以,我们考虑 drop 掉第 10 层后进行分析,看看结果如何。

通过 Alphalens 进行分析中,一般有三个步骤:

  1. 构造因子。
  2. 数据预处理,一般是通过调用 get_clean_factor_and_forward_returns 来实现的。
  3. 调用 create_full_tearsheet 来执行因子检验并输出报表。它的输入是第 2 步中的输出。

Alphalens 是在第二步实现的分层。然后它将第二步的输出,用作第 3 步的输入。

所以,我们可以在拿到第 2 步的输出之后,drop 掉第 10 层,然后调用 create_full_tearsheet 来进行收益分析。这样,在 Alphalens 看来,top 分层就是第 9 层,所有的分析都是在这个基础上进行。

根据 Alphalens 的官方文档,这样做是允许的。

第 2 步输出的是一个 DataFrame,它的格式如下:

所以,要 drop 掉第 10 层,可以这样做:

1
factor_data = factor_data[factor_data.factor_quantile <= 8]

Tip

这是本文介绍的第一个技巧。在前面的课程中,为了让 Alphalens 按照我们的意愿,按指定的对空分层进行收益分析,我们使用的是改造因子本身的方法,比这个方法在阶段上更提前一些。两个方法都可以使用,但这里的方法更简单。

这一次我们得到了令人满意的分层收益均值图,单调且递增,完全适合进一步进行因子分析。


这个图其实基本上就是完全还原了上一个图,只不过缺少第 10 层而已。但是,现在第 9 层就成了 top 分层,这是 Alphalens 在计算多空收益时,将要做多的一层。

Tip

由于我们在实盘交易中也一样可以 drop 掉第 10 层,因此这种操作是合理的。类似的手法,我们在 Alpha101 中也可以看到。

现在我们得到的 Alpha 是 23.2%(1D 年化),Beta 是-0.07,7 个月的累计收益是 11%左右。

纯多的情况

我们在之前的几期里讲过,由于制度因素,并不是所有人都能条件做空。所以我们看看纯做多的情况下,因子表现如何。

这一次,年化 Alpha 只有 17.6%,beta 为-0.6。但 7 个月的累积收益是 15%左右,还略高了一些。


条件 Alpha Beta 累计收益
多空、10 23.2% -0.07 11%
单多、10 17.6% -0.60 15%

我们对比一下前后两次的累积收益图,可以发现,多空组合绝对收益低了一些,但平抑风险的能力更强了:

多空组合

单边做多


为什么多空的 Alpha 大于纯多,多空组合的累积收益还低于单边做多?这可能是在对二阶导因子做空的过程中,有一些负面效应。一些强势股,在急杀之后(二阶导为负),往往还会有一个小反弹,如果刚好在小反弹前做空,就会带来损失。

寻找最有效的窗口

到目前为止,我们使用的都是 10 天的窗口来计算的二阶导。如果使用其它窗口呢?我们分别测试了 2、4、6、8 天的数据。现在,我们把所有的数据汇总起来:

条件 Alpha Beta 累计收益
多空、2 30.6% -0.06 15%
多空、4 35.3% -0.1 17%
多空、5 38.4% -0.12 19%
多空、6 37.3% -0.12 18%
多空、8 32.4% -0.06 14.8%
多空、10 23.2% -0.07 11%
单多、10 17.6% -0.60 15%
单多、5 61.5% -0.58 37%

看起来在 A 股市场上,二阶导动量因子使用周期为 5 时表现最好。此时如果能构建多空组合,年化 Alpha 是 38.4%,今年以来累计收益是 19%;如果只能构建单多组合,年化 Alpha 是 61.5%,今年以来累计收益是 37%。

回顾一点高中数学

前一期讨论的斜率因子(即一阶导因子)反映的是价格上涨的速度。

那么二阶导因子代表什么呢?


二阶导因子反映的是价格变化的加速度。当一阶导为正,而二阶导为负时,价格将仍然上涨,但趋势减缓,有可能出现变盘。反之亦然。下面的公式显示了一个存在二阶导的函数:

\[ y = a x^2 + b x + c \]

当 a 和 b 分别在 [-1, 0, 0, 1] 和 [10, 10, -10, -10] 之间取值时,我们就得到下面的图形:

50%

这个图说明,二阶导对证券价格运行的趋势具有修正效应。本来处于上涨趋势的品种,如果二阶导持续为负,它迟早会到达峰顶、然后转为下跌;反之,本来处于下跌趋势的品种,如果二阶导持续为正,它迟早会触及谷底,然后转为上涨。

正因为这样,与一阶导不同,二阶导有能力提前预测价格趋势的变化。它是一种反转动能

在测试中,表现最好的参数是 5 天。考虑到二阶导需要额外多两个窗口才能计算,因此我们实际上是基于过去 7 天的数据来发出交易信号。

7 天,这是上帝之数。


眼见为实

看到 38%的 Alpha,老实说有点吃惊。

这是真的吗?还是说什么地方 Pseudo-Logoi,这位谎言之神悄悄地溜了进来?

尽管可以相信 Alphalens 是品质的保证,但比起一堆统计数字,你可能更愿意相信自己的卡姿兰大眼睛。

所以,我决定把第 9 层的个股走势画出来。绘制方法是,先取出某一天(记为 T0)quantile = 9 的所有标的,然后再取出最近 9 天(截止 T0 为止)的收盘价。在绘图之前,先对收盘价起点归一化到 1。

绘图中,我们共使用了199个样本,代表性和稳健性都足够了。


图中的红色线是趋势线,其斜率是 0.001,表明总体上是上涨的;颜色的深浅,代表了样本的分布密度,可以看出,零线上方分布更多一些。

我很喜欢从一些股谚中寻找灵感。因为公司底色、市场机制和交易制度的不同,照搬海外股市的做法是行不通的。我们这边博弈的底色更重一点。

按理说,跟二阶导动量因子有关的股谚是黄金坑和圆弧顶或者 V 反。那么,能直观地画出来在这些标的中,有多少漂亮的黄金坑吗?

很难只用一张图、同一个参数就绘制出来:每个黄金坑的周期、深度和构造阶段等指标都是不一样的。环肥燕瘦,我们很难一笔画尽美人风姿。

By bins, or By quantiles?

在这次测试中,我们一直使用的都是 by quantiles 进行的分层,没有探索 by bins 分层。

by quantiles 是一种排名分层。这是 quantiles 的定义决定的。使用 by bins 方法,我们更关注的是因子值本身的金融含义。

比如,对 RSI 来说,它的值在 0 到 100 之间,大家会认为超过 80 的值是“超买”,低于 20 的值是“超卖”。因此,直接使用因子值是有意义的。

本文没有使用 by quantiles 方法,一方面因子值本身的信号意义可能没那么强:

我们寻找买入或者卖出信号,是根据后面是涨还是跌来验证的。但是,二阶导只能告诉我们趋势的改变方向,并不能立即决定涨跌。

因此,我们可能更应该使用它的排名来做因子,因为资金往往会寻找反转动能最强的标的。


Info

题外话:by quantiles 分层用的是排名,有点 Rank IC 的感觉,但计算收益时,又是根据因子值来进行权重分配的,则与 Ranked IC 的方法区别。

通过这些参数以及它们之间的混搭,Alphalens 赋予了我们强大的探索能力。

另一方面,我并不清楚它的最小值、最大值和分布情况,所以在实操上难以给出bins数组。这也是没有使用 by bins 的原因。

当然,这并非绝对。也许,有时间的话,也应该探索下 by bins 分层。

7月:斜率动量因子表现回顾

斜率因子是动量因子中的一种,它由Andreas F. Clenow 首先发表在Stocks on the Move: Beating the Market with Hedge Fund Momentum Strategy一书中。

这个因子比起卡哈特的动量因子更符合人的直觉,特别是喜欢看K线的投资者,因此也得到了很多人的喜爱。其实现在Quantopian和QuantConnect网站上都有文章讨论。

题图:Andreas Clenow的著作: Stock on the Move 封面


Tip

我们简单回顾一下Mark Carhart提出的动量因子,它是计算单个股票过去一年的回报率,排除最近一个月数据(以防股价操纵),再按回报率排序,取前10%的股票作为买入信号,末尾10%的股票作为卖出信号。

在Andreas Clenow的策略中,他使用了过去90天的年化指数的回归斜率作为动量因子。由于信号只响应过去90天的数据,因此,信号就比卡哈特的动量因子更灵敏一些。

不过,我们今天测试的因子,是用过去10天的回归斜率作为动量因子。主要目标是尝试下新的可能性,也是考虑到在A股,动量因子的半衰期一般比较短的缘故。

我们的计算方法如以下代码所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def moving_slope(close: NDArray, win:int, *args):
    # 创建滑动窗口的视图
    shape = (win, close.size - win + 1)
    strides = (close.itemsize, close.itemsize)
    cw = np.lib.stride_tricks.as_strided(close, 
                                         shape=shape, 
                                         strides=strides)

    # 对每个窗口应用linregress,获取斜率
    x = np.arrange(win)
    slopes = np.apply_along_axis(lambda y: linregress(x, y)[0],
                                  axis=0, arr=cw)

    return slopes

测试参数如下:随机抽取2000支,从今年的1月4日,测试到7月31日,计算斜率时,使用过去10天的收盘价;计算收益时,使用开盘价,从次日起。


因子分层如下:

分层收益均值图如下:

显然,10期的斜率因子成了反向指标,也就是短期上涨越快,买入后亏损越多。


既然如此,我们就取斜率因子的负数作为新的因子,再运行一次:

理所当然,这个图只是前面的图的镜像。我们来看看收益:

7个月的累积收益接近15%了,最大回撤5%左右,在今年来看,表现还可以。

Tip

上一篇RSI的因子测试中,我们也对因子构成做了一些微调。有同学认为,微调之后,数据变好,这是过拟合了。今天写这个因子时,想起来在Alpha101中,他们抛弃掉了动量最大前n%的因子,这也是一种修正。警惕过拟合是对的,但不是数据一变好就是过拟合。


再深入到分层累积收益:

可以看出,因子的稳定性比较好,期间没有发生明显的风格转换的情况。

当然这个因子要投入实战的话,可能不适合个人和中小机构。因为从分层图来看,它的收益主要是由做空产生的。

如果我们没有机会做空,因子的表现又将如何?下图是纯多情况下的收益:

这个表现并不出人意料。在2月有一个强反弹,在此期间,因子的表现不错。但随后市场越走越弱,动量因子的半衰期越来越短,单多收益就一路走低。


L50

前天,七八月之交,A股出现一轮牛市,跨越两个月,长达86400秒。随后再次进入休眠状态。这个现象,也许不能用今天的介绍的动量因子来预测,但动量因子表现如此之弱,却能在一定程度上,说明为什么连续上涨未能出现。

另一个结论,正是因为做空的收益比较确定,所以易跌难涨。方主席下岗了,看看后面做空机制上能否有所变化。毕竟,能做空的机构也只是少数。制度应该对所有参与者都公平。

左图是Andreas Clenow的著作,Stocks on the Move: Beating the Market with Hedge Fund Momentum Strategy。Andreas Clenow是一位瑞典裔瑞士籍作家、资产管理人及企业家,现居于苏黎世,在一家家族办公室担任首席投资官。在其辉煌的职业生涯中,他曾是一名科技创业者、金融顾问、对冲基金经理、金融工程师、量化交易员、财务顾问、董事会成员,以及企业中层管理官僚。

在这本书中,Clenow详细解释了动量策略的原理,即买入过去表现优秀的股票,卖出或做空表现不佳的股票,利用市场趋势的持续性来获利。书中对比了技术分析和基本面分析在动量策略中的应用,以及如何结合两者的优势来提高交易效果。

当我在星巴克连上家里的服务器,IPV6,你是值得的

我们的课程环境是构建在一个256GB内存,192核CPU的集群上,学员可以通过浏览器,输入地址访问。要在阿某云上租这样一个服务器,价格并不便宜。所以,这些服务器一直放在公司里,创业期间,公司也就是租的民用宽带,没有公网IP,所以,在阿某云上租了个机器,做的端口转发。

有了这个端口转发,也就把VPN装上了,这样一来,也可以在回家或者外出时,连回公司办公。但最近VPN不知为啥,坏了。

刚好今年国家政策在推IPV6。于是决定试一把。IPV6最大的优点,就是地址管够,所以,每一台设备都可以获得一个公有的IPV6地址。

花了4小时左右,把IPV4和IPV6都弄通了,并且增加了免费的DDNS,这样,就可以在星巴克办公了。

意外的惊喜,我之前开的阿某云服务器带宽是5M。用了IPV6后,直连的效果真棒,现在我们的教学网站是秒开了。

Info

如果你的路由器支持IPv6桥接模式(一般在网络、或者Wan设置里),那么可能直接打开它、打开光猫中的IPv6就ok了。直接跳转到第3节检查是否获得了IPV6地址。

光猫改桥接

IPV6地址也有公网和私域之分。公网地址以2开头,私域地址以F开头。如果你的设备用的是F开头的IPV6,仍然是不可通的。

新装的宽带,民用的基本上都默认开通了IPV6。我们要做的是,其实是如何打通光猫与内部路由器之间的IPV6屏蔽。

这主要是,

  1. 你的路由器太旧,不支持IPV6
  2. 路由器设置没有支持IPV6

首先,我们将光猫的连接方式由PPPoE改成桥接模式。这一步完成后,光猫就不再担任路由器的功能,因此拨号的工作也交给你自己的路由器。

Info

这一步需要超级管理员密码,跟负责片区的宽带师傅要,只要你能证明自己懂网络,他们一定会给。

在网络配置中,找到宽带设置,找到最符合当前网络设置的那一项。比如,在我这里,这一项如下图所示:

我们要修改的正是红框内的连接,而不是其它连接。当前它的连接方式是PPPoE,一般来说,其它模式,比如桥接,也会在这个单选框下。另外,IP协议版本这里要注意,一定要选择IPv4/IPv6。

在同一个对话框中,还显示了PPPoE的账号。我们必须把这个账号及其密码记录下来。因为我们改为桥接模式之后,建立连接的任务将由你的路由器来完成,路由器需要知道这个账号。

密码是以mask的方式显示的。如果你不知道密码,可以在chrome中打开开发者模式,找到密码框,将它的type="password"去掉,这样密码就还原显示了。

下图就是我们修改后的配置:

注意核心点就是IP协议版本、模式,其它保持不变即可。

配置路由器

Notice

注意路由器与光猫的物理连接。要用线缆将路由器的wan口连接到光猫的lan口,而不是lan对lan。如果是后者,那么路由器将无法进行拨号。

路由器的配置中,我们要调整wan与lan的设置。有的路由器本身有IPv6桥接模式,在将光猫改为桥接之后,我们是要禁掉这里的格桥接模式的。

在WAN设置中,我们将连接方式改为PPPoE,并填写光猫的IP地址、用户名和密码。如果它同时提供了IPv4和IPv6两个选项,我们在IPv6中,选择启用,并且设置为复用IPv4拨号线路即可。其它的都保持默认。

再转到LAN设置,我们需要对IPv6进行一些设置。

我们还要开启DHCPv6服务,并设置IPv6地址池,重点是设置DNS:

测试是否获得公网IPv6地址

ipw.cn网站提供了测试服务。喜欢命令行的可以使用以下命令:

1
curl 6.ipw.cn

如果你的机器有了IPv6地址,它就会返回你的IPv6地址。再检查如果它是以2开头的,则说明是公网IP。如果是以F开头的,那你的设置仍然是在私域。

通过下面的命令检测IPv4是否仍然工作:

1
curl 4.ipw.cn
这会返回你的IPv4地址。

如果不习惯使用命令行,也可以登录ipw.cn的网站。它将返回你当前的IP地址。如果使用了IPv6,它将提示IPv6优先,否则,就是配置不成功。

配置DDNS

尽管IPv6地址是公网地址,而且很充裕,但也不排除ISP有时候会更换你的IPv6地址。因此,我们需要DDNS服务,及时更新变化后的IP。平常只使用域名来访问。

最好用的DDNS服务是Cloudflare。要做到这一点,首先,你要在Cloudflare上已有托管的域名。然后,在dashboard中,申请一个API token。

DDNS使用go-ddns的容器就好。每一个需要在外网能独立访问的设备都需要安装。

1
sudo docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go

然后打开 http://ip:9876 更新配置即可。由于于API token,所以不需要在Cloudflare上事先创建子域名。直接在这里的界面输入子域名,go-ddns会自动帮你创建。

设置完成后,看一下日志就好了。

注意事项

不要通过域名暴露你的http服务。有可能被ISP封。据说使用https服务和高于40000的端口会降低风险。

[0728] QuanTide Weekly

本周要闻回顾

  • 高频交易费率或将提升 10 倍
  • 巴黎奥运开幕,奥运概念板块新鲜出炉
  • 广东私募自查,量化交易、基金规模是否达标成是重点
  • 纳斯达克大跌 3.64%,日经指数创 2021 年 10 月来最长连跌记录

下周重要日历

  • 下周“降息”大潮开启
  • 全球股市迎来超级央行周
  • 本周将有三支...

本周精选

  • 圣杯依然闪耀!基于短时 RSI 的均值回归策略
  • 看得到,吃不到!7 年 2500 倍的多空策略
  • 量化投资顶刊有哪些(一)?

本周要闻回顾

  • 财联社消息,监管起草了高频交易买卖费用从当前每笔 0.1 元提升至 1 元。有量化私募交易人士表示,手续费超过 5 倍以上,当下策略就没有超额了,从而达到限制高频量化的目的。当前对高频交易的认定是,每秒超过 300 笔或者全天申报及撤单不超过 2 万笔。
  • 巴黎奥运会开幕,与此相关的设施器材、配套设备、体育营销、文化衍生品等领域,均有 A 股企业参赛,包括中集集团、舒华体育、艾比森、洲明科技、元隆雅图等多家上市公司。东方财富、同花顺等顺势推出奥运概念股。
  • 21 财经消息,广东证监局组织辖内私募基金开展自查:私募基金管理机构在宣传推介、资金募集、投资运作等业务环节是否合规,是否存在基金产品逾期,是否开展量化交易,是否存在异地经营情形等,量化交易、基金规模是否达标成自查重点。
  • 7 月 25 日,纳斯达克 100 指数下跌 3%,创下自 2022 年 12 月以来最大跌幅。日经指数本周继续下跌 5.9%,连跌 8 个交易日,创 2021 年 10 月来最长连跌记录。不过,美股周五全线上涨,道指更是周线 4 连涨。
  • 北向资金持续卖出。近 2 周以来累计已减持 307 亿元,月内净卖额达 288 亿元。
  • 央行罕见加场MLF操作 稳定月末流动性。7月25日,中国人民银行在月末时点新增一次中期借贷便利(MLF)操作,中标利率为2.3%,较前次下降20个基点。
  • 证监会研究谋划进一步全面深化资本市场改革开放的一揽子举措。吴清开展专题座谈会,与 10 家在华外资机构、QFII 代表深入交流,听取意见建议。

信息来源:财联社等,通过 Tushare.pro 接口综合汇编。


下周重要日历

  • 多家银行下周起降息。7月26日招商银行、平安银行调整了人民币存款挂牌利率表,最高下调幅度为30个基点。广发银行也将在下周下调银行存款。广发银行对记者表示,下周银行存款下调的幅度会与四大行调整幅度保持一致。除了存款之外,大额存单也在下周同步下调。
  • 下周全球投资者将迎来超级周。首先,三大央行将公布利率决议。美联储将在周三召开议息会议。此外,几大科技巨头如微软、META、苹果等都将在这一周发布财报。
  • 7月31日(周三)统计局将发布PMI指数。前值读数为49.5。8月1日,财新发布制造业PMI。

信息来源:财联社等,通过 Tushare.pro 接口综合汇编。

基于短时 RSI 的均值回归

这篇文章发表于周二公众号上。获得超过 4000 次阅读。

策略概要

所有人应该都已经熟悉 RSI 指标了。我们常用的 RSI 指标是基于 6,12 和 24 周期计算出来的。

\[ RS = \frac{\text{SMMA}(U,n)}{\text{SMMA}(D,n)} \]
\[ RSI = 100\cdot\frac{\text{SMMA}(U,n)}{\text{SMMA}(U,n) + \text{SMMA}(D,n)} = 100 - { 100 \over {1 + RS} } \]

但是 Larry Connors 认为,2 周期的 RSI 可以更好的反映市场趋势,很可能是技术指标中的圣杯。他把这个观点发表在 2008 年出版的《华尔街的顶级交易员》一书中。在此后的 Connor's RSI 指标中,streak 的 RSI 正是使用 2 周期来计算的。

基于这样的 RSI,Connors 给出了以下均值回归策略:

  1. 标普 500 指数超过 200 日均线;
  2. 标普 500 指数的 2 周期 RSI 低于 5;
  3. 信号发出时,按收盘价买入;
  4. 当标普 500 高于 5 日均线时卖出。

用交易员的话来讲,这是一个在牛市(指数大于 200 日均线)短线回调(RSI 低于 5)时的买入策略。

因子检验

首先 quantitativo 进行了单因子检验。检验方法是对对所有 2 天 RSI 收于 5 以下的标的进行买入并持有 5 天,再计算收益。

75%

这个统计包含了超过 21000 个标的,超过 250 万次事件(标普 500 收于 200 天均线之上)。测试中的亮点:

  1. 当任何给定股票的 2 天 RSI 低于 5 并在牛市中持有 5 天时,买入其平均回报率为 3.3%;
  2. 其中 60% 的事件获得正回报,每笔交易的预期回报为 9.8%;
  3. 40%的交易是负面的,每笔交易的预期回报率为-6.6%;
  4. 分布呈正偏。

quantitativo 还统计了反过来的情形,即如果我们在每只标的的 2 天 RSI 收于 5 以上时买入每只股票,并在牛市中持有 5 天的数据。我们将得到:


  1. 当任何给定股票的 2 天 RSI 高于 5 时,买入其预期回报率为 0.3%;
  2. 交易转为正值的可能性为 52%,预期回报率为 5.5%;
  3. 交易转为负值的可能性为 48%,预期回报率为 -5.1%。

quantitativo 还对两次测试是否属于同一分布进行了假设检验,结果 p 值远低于 0.05,证明两个分布显著不同。因此,第一次测试中的因子是存在 Alpha 的。

策略回测

接下来 quantitativo 进行了策略回测。这里策略设计如下:

  1. 使用 SPY 作为测试标的。
  2. 当以下条件满足时,在下一次开盘时买入 SPY:
  3. 标普指数的 RSI(2) 收于 5 之下
  4. SPY 高于 200 日均线
  5. 退出条件
  6. 当 SPY 收盘价高于前一天高点,则在下一次开盘时退出。
  7. 如果 SPY 收盘价低于 200 日均线

可以看出,回测策略与 Connor 提出的策略略有不同。为什么要进行这样的差异化?

这里的差异化,其实就是回测与实盘的差异。Connor 给出的策略更理想化,而 quantitativo 的验证策略则更加接近实盘。这是我们做策略时一定要考虑的。

首先,尽管我们可以用标普 500 来回测,但在实盘中,更切合实际的方法是购买对应的 ETF。这里的 SPY 就是以标普 500 为标的的 ETF。


第二,Connor 的策略是以收盘价买入。如果你的回测系统不够精确的话,最好是以次日开盘价买入。当然,如果你的回测系统和行情数据精确到分钟级,那么在国内,也可以利用集合竞价前一分钟的收盘价计算信号,再以集合竞价买入。

退出条件的差异,可以看成是 quantitativo 对原策略的一个优化。不过,我并没有看出来这个优化的意义。它的背后似乎并不存在任何交易上的原理支撑。看起来,这更像是 quantitativo 通过数据做出的过拟合。

Question

quantitativo 在本次实验中,使用了长达 25 年的数据进行测试。如果经过这么长的时间回测,数据表现仍然很好,是否就可以说不存在过拟合?我很想知道你们怎么看。

那么,quantitativo 的实验结果又是如何呢?

在 SPY 上的测试简直就是灾难。在整个回测期(25 年)中,使用 SPY 交易此策略提供了 67% 的回报。主要原因是交易次数太少,仅执行了 157 笔交易。

75%


接着 quantitativo 改用了纳斯达克 100 指数 ETF(QQQ)和三倍杠杆纳斯达克 100ETF(TQQQ)。结果表明,在 TQQQ 上表现不错(见前图):

夏普比率分别达到了 2.3(QQQ)和 1.92(TQQQ),对指数标的而言,是相当不错的指标(特别是与 A 股对比)。

改进策略:增加因子

在前一次实验的基础上,quantitativo 增加了资产组合。

他们把资金分成十份 (10 slots),用于购买前一天 RSI 收于 5 以下的标的;如果 universe 中有 10 支以上的标的触发了入场信号,将按市值进行排序,优先考虑市值较小的股票。退出条件改为收盘价低于标的 200 日均线。

此外,他们还限制只交易流动性较好的标的: 1. 只交易过去 3 个月内完全没有停牌的标的 2. 如果标的过去 3 个月日均成交量中位数不足资金份额的 20 倍,则不纳入

75%


Tip

实际上,在这里 quantitativo 已经引入了另一个因子,小市值因子,只不过它的权重比较低--是在 RSI 触发之后才应用权重因子。

这次的结果很不错,整体年回报率达到 17.8%,是基准的 3 倍。但也存在问题,即所有这些都是在前 8-9 年实现的。该策略在 2008 年后停止执行,并从那时起输给基准。

原因何在?通过分析 25 年回测期间进行的 11,380 笔交易,quantitativo 发现了很多退市。这种幼稚方法的问题在于,该策略优先考虑小盘股(在通过流动性过滤器后),它们退市的概率为 +70%。

第二次改进:降低退市风险

75%

quantitativo 再次改进了策略,这次的改进是将 universe 限制在只交易大型和超大盘股,这些股票的退市概率较低(分别为 35%和 9%)。


这一次效果非常明显。策略的年化回报达到了 23.9%,是同期基准的 4 倍,夏普达到 1.23%,最大回撤为 32%,几乎只有标普的一半。但是,之前就存在的一个问题,交易次数过于频繁仍然存在。现在一年仍然会交易 461 次。

第三次改进:减少 slots

之前的实验使用了 10 个 slots,这可能是导致交易次数过多的主要原因。于是,quantitativo 将同时持有的标的数减少到 2 支。

现在,交易笔数由 461 次/年下降到 90 笔/年。并且实现 30.3%的年回报率,是基准的 5 倍。

结论

这篇文章介绍了一个基于短时 RSI 的均值回归策略,并在最后,给出了年化达 30.3%的一个实现(未考虑滑点和交易手续费)。

这个策略的内核是短时 RSI,尽管这个指标发明以来已经超过 45 年,但回测结果表明,只要你研究一件事足够深入,就很可能取得成功。

Quote

It's not that I'm so smart; it's just that I stay with problems longer. -- Albert Einstein

这个方案已经值回你的阅读时间,但更为重要的是,我们讨论了策略发现的一般流程和优化角度。


我们再梳理一次,作为本篇的结束语:

  1. RSI 代表着潮汐和回归,其背后是人性,因此它永远不会过时。
  2. 多因子策略也可以以某个因子为主,在交易过程中,以限制条件的方式引入其它因子。
  3. 文中给出了判断标的流动性强弱的方法,你也可以将其作为一个因子。
  4. 研发策略的步骤往往从单因子检验开始,再编写简单回测,然后根据回测结果一步步优化。
  5. 在优化过程中,quantitativo 先是使用 ETF,然后改用了 10 个 slots,最终回到 2 个 slots 的方案。

看到吃不到!7 年涨了 2500 倍

这一周我们继续探索 Alphalens 因子分析框架的使用。因子与收益之间的关系很少是线性的,但Alphalens本身就是一个线性分析框架,以揭示因子与收益之间的线性关系见长。它支持的三种分析方法是:

  • Regression (回归法)
  • IC/Rank-IC (相关系数、秩相关)
  • Tiered Regression (分层回溯)

都是基于线性回归或者准线性(相对于svm、nn等而言)。因此,如何让Alphalens在因子检验中,能够真正揭露出因子与收益之间的关系,是一个比较有技巧的活儿。

我们在7月26日发表的视频号中,探索了如何运用 plot_quantile_statistics_table 和 mean period wise return by Factor quantile图来抽丝剥茧,重构因子,最终完美地揭示因子与收益之间的线性关系。

这里我们也对视频内容进行一个摘要。

在实验中,我们先是使用了400个ticker,1000天的数据。在实验方向确定后,我们扩大到2000个ticker, 2000天的数据,以排除偶然性。


我们要探索的因子是6期的RSI。作为因子,一般要求因子值越大,收益越高;但RSI恰好是反向的,一般认为,RSI越大,就越需要减仓。因此,我们实际构建的因子是:

$$

factor = 100 - RSI

$$

第一次实验

简单用Alphalens的默认值跑一下,我们得到以下结果:

多空组合的收益情况

默认参数下的因子分层情况


by quantiles分层下的mpwr图

看收益看不出什么问题。如果你是做纯数据挖掘,就会觉得这也没什么,反正这个因子也是盈利了呀,对不对?

但如果我们仔细看分层图,就会发现,这次实验没有任何意义。因为第一层的因子值从0跨到78.9,最后一层因子值,从22跨越到了97。

看分层收益均值图,会发现因子与收益之间没有线性关系。Alphalens只能做线性分析,在这种情况下,Alphalens又如何能揭示因子与收益之间的因果关系呢?

第二次实验

Alphalens的默认分层方式是by quantiles。我们能运用这种方式来分层的前提,是因子本身是均匀分布的。而RSI不是。

除了RSI之外,还有很多例子不适用by quantiles分层。比如,如果因子是语料情感类的,那么因子大概是0~5之样的标签。这种情况下,也不适合按quantiles分层。


Alphalens提供另一种分层方式,即by bins。我们提供的分箱是[0,10,20,30,70,80,90,100]。这里我们有一个假设,即我们对中间的RSI不感兴趣,认为它们不会提供交易信号。

现在分层的结果就很合理了:

by bins分层情况

但是我们如果看一下 mean period wise return by Factor quantile图,就会发现,因子与收益之间镜像的线性关系:

如果Alphalens能做多第4组,做空第1组,这样的策略结果应该不错。但是Alphalens并不能这么做。需要我们修改因子。


我们的方法是,抛弃掉因子值大于50的那一部分,再让Alphalens来分析因子与收益之间是否存在关系。

第三次实验

这次我们得到了非常完美的线性关系:

过滤掉部分因子

在这种情况下,可以认为,Alphalens的分析结果是有效的。

当然收益也很好看。

过于好看了。能够超过这个策略的,只有涨停板因子。


关于收益的讨论

一般来说,当我们看到这么好的收益时,就应该认为是实施步骤出现了问题。 在我们的实验中,是否存在实施问题呢?因子分析比较复杂,这就是为什么我们要尽可能地使用框架的原因。用对了框架,再离奇的结论也要接受。

那么,这个收益我们能否兑现?只有极少数人能够兑现这个收益。因为它的大部分收益是通过做空第一组来实现的。在我们的算法中,第一组实际上就是RSI大于90的那一组。

这一组的股票,往往是涨停股了,平常融券不易,此时融券就更难。但是,从今年以来披露的一些违规案例来看,有些机构先拉涨停板,再融券做空,这是充分利用了我们这里因子分析的结果:即RSI>90时,做空胜算很大。

所以,只有极少数人能兑现这么高的收益。

随着各种交易规则的完善,之前被这些人割走的利润,现在将回到市场中。

结论

Alphalens无法揭示复杂的非线性关系,这是由于它的因子检验方法所决定的。所以,对一些因子与收益之间不存在简单线性关系的因子,我们需要对它进行适当的变换,以适合分析框架。

否则,无论你的因子是好是坏,都不可能得到正确的结果。


量化投资顶刊有哪些(一)?

  1. Journal of Finance 创刊于1946年,是由美国金融协会(American Finance Association)主办的一份顶级学术期刊。它不仅吸引了世界各地顶尖学者的投稿,也是衡量学术成就和职业发展的重要指标。许多诺贝尔经济学奖得主的早期工作都曾在该期刊上发表,比如作为现代金融基石的现代资产组合理论(Markowitz)、资本资产定价模型(William Sharpe)、MM定理(Merton H. Miller)、有效市场假说(Eugene Fama)等。
  2. Journal of Financial Economics. Rolf Banz, 1981年发表《The relationship between return and market value of common stocks》(即小市值因子),就是选择的这一家。2015年Famma发表五因子模型,也是这家期刊。
  3. Review of Financial Studies,由牛津出版,是一本同行评审学术期刊。它在2020年的影响因子为5.814,在商业、金融类排名5/110。《Market Liquidity and Funding Liquidity》一文最早就发表在这里。在google学术上,它有超过6500次引用。
  4. Journal of Portfolio Management,专注于投资组合管理的实践和理论,包括量化策略和风险管理。
  5. Journal of Financial and Quantitative Analysis,简写JFQA,发表金融经济领域理论和实证研究。
  6. Journal of Empirical Finance,强调实证研究,包括市场效率、资产定价和投资策略的实证分析。
  7. The Journal of Trading,关注交易策略、市场动态和交易技术的期刊,不过已停刊。同类型的杂志有《The Traders' Magazine》

一些和颜色相关的网站

用Powerpoint做课件,动画编排太累了,于是找到了slidev。Slidev好用是好用,但研墨调色都得自己来,一时竟误入藕花深处,沈醉不知归路。

今天就此分享一下我用过的一些很“色”的网站。


Adobe Color

L50

首先是名气最大的 Adobe Color

它利用色彩理论,给出了常用的颜色搭配及它们之间的变换。有点传统了,但经典永不磨灭。

只此青绿 -- 中国色

我很喜欢有一年春晚的舞美,只此青绿。它是一个非常经典的中国味道的配色。类似的配色可以在中国色找到。

它的颜色多采自中国人熟悉的景和物,光从命名上听起来就古声古韵,美不胜收。比如远山青、合欢红、苋菜红、乌梅紫等,一下子就把你带回童年的记忆中。艺术的最高境界,就是要与人产生情感的共鸣和通感,这批人是懂设计的。

Coolors

Coolors.co是一个非常优秀的配色网站。它有强大的抽卡模式,只需要按空格就能随机抽出一批色彩搭配。

确实,色彩是很感性的东西,感觉到了就是有了,本不是精确的数字游戏。与其精心设计,不如顺从天意。

Colorion

Colorion类似于coolors,也给出了一些预生成的高质量的色彩组合。

如果用腻了coolors,也可以在这里试试手气。

过渡之美

渐变色往往能形成一种梦幻魅惑的效果。这就是web gradients能够为你带来的诱惑之美。

0to255

这个网站名有点意思,因为在RGB空间里,每种颜色的取值都是0到255,所以叫0to255。

最近看到一句话,可能跟巴黎奥运会的开幕式有关,大数据把这句话又推了出来,叫做 less is more。它比较另类的含义我就不讲了,大家结合开幕式去联想就对了。我觉得有一个翻译很信达雅:小满胜万全(不过似乎在“信”上略有瑕疵)。

但很多人、包括我很推崇less is more的理念。

0to255这个网站就是这样一种设计理念。只使用一种颜色,然后通过饱和度和亮度的变化,来形成浓淡深浅各不同的搭配,既简洁,又很rich。

量化金融人都在看哪些顶刊

精选了 7 种量化金融人都在看的顶刊,从最经典的有效市场假说理论,到最新的关于加密货币的研究,都发表在这些期刊上。


Journal of Finance

L50 应该是毫无争议的 No.1。

创刊于1946年,是由美国金融协会(American Finance Association)主办的一份顶级学术期刊。

它不仅吸引了世界各地顶尖学者的投稿,也是衡量学术成就和职业发展的重要指标。

许多诺贝尔经济学奖得主的早期工作都曾在该期刊上发表,比如作为现代金融基石的现代资产组合理论(Markowitz)、资本资产定价模型(William Sharpe)、MM定理(Merton H. Miller)、有效市场假说(Eugene Fama)等。


其它重要的论文还有《异象:赢家的诅咒》(Richard Thaler,2017)年,这是行为金融学的先驱,展示了市场参与者的行为偏差如何影响资产价格。

1968 年,Michael Jensen 在《The Performance of Mutual Funds in the Period 1945-1964》中首次明确阐述了 Alpha 的概念,沿用至今,这一理念犹如灯塔般指引着方向,成为了量化金融领域研究者与实践者共同追求的核心目标。

Journal of Financial Economics

1981 年,Rolf Banz 的文章《The relationship between return and market value of common stocks》(即小市值因子)就发表在这家期刊上。


2015 年 Eugene Famma 发表五因子模型,也是选择的这本期刊。

Journal of Empirical Finance

1994 年发刊。

强调实证研究,旨在推动金融理论与现实世界数据之间的紧密联系,已经成为实证金融研究的重要平台。拒稿率 85%,其中 40%都甚至收不到拒稿原因。

Review of Financial Studies

由牛津出版,是一本同行评审学术期刊。

它在 2020 年的影响因子为 5.814,在商业、金融类排名 5/110。


《Market Liquidity and Funding Liquidity》一文最早就发表在这里。在 google 学术上,这篇论文有超过 6500 次引用。

Journal of Portfolio Management

专注于投资组合管理的实践和理论,主要关注投资组合管理的各个方面,包括但不限于资产配置、风险管理、量化策略、市场分析、投资组合优化、智能贝塔策略、流动性管理以及全球宏观策略。

做资产管理的量化人应该一期不落地看。

JFQA

JFQA 是 Journal of Financial and Quantitative Analysis 的缩写。


该刊 1966 年起发行,每年出版 6 次,相当于双月刊。

涵盖的主题广泛,包括资产定价、公司财务、金融市场、市场微观结构、实证金融研究、金融计量经济学等。

The Journal of Trading

关注交易策略、市场动态和交易技术的期刊,不过已停刊。

同类型的杂志有《The Traders' Magazine》,它虽然不是顶刊,在交易技术方面独树一帜,实战性强于理论,也有不少订阅者。

12个参数,48个组合,这么复杂的函数怎么学?

在Alphalens中,get_clean_factor_and_forward_returns函数自动实现了收益计算、分层、缺失值处理和标准化,大大简化了因子分析的工作。

但是,这个函数有12个参数, 48个参数组合,复杂度量指数远超McCabe博士提出的高风险区域50。加上不太懂因子分析的原理,初学者很容易在这一步就犯错,但却茫然无知。

这十二个参数可以归类为5组。factor与price参数作为数据输入,前面已经介绍过了。这里就不再显示了。

通过这些参数的控制,就可以让Alphalens帮我们完成收益计算、分层、缺失值处理和标准化。

这些功能在整个因子分析体系中的位置如下:

函数在体系中的位置与作用。计算前向收益等功能未绘出

分层行为由参数quantiles, bins和zeroaware来控制。quantiles与bins是互斥的参数,当我们指定bins时,需要把quantiles显著地置为None,才能使bins生效。

这篇文章主要讲解这两个参数,请看视频。