上一期,我们重点介绍了一些常用的基础评价指标,例如收益类指标、风险类指标、部分风险度量比率类指标等。

本期将继续介绍一些常用的量化评价指标,主要集中于Sortino比率、滚动窗口指标(如滚动6个月的年化收益、波动、Sharpe……)。欢迎持续关注~

(在茶馆中写了一下午的我.jpg)

一、其他风险度量比率类指标

我们前面着重讨论了一些基础的风险度量类指标,主要是年化收益/回撤比和Sharpe比率。但这些指标都有其局限性:

  • 年化收益回撤比主要关注的是最大回撤作为风险度量,这对于经常面临最大回撤的策略评价起来效果会好,对其他策略效果就不太好;
  • Sharpe则主要关注的是所有的波动作为风险度量,其优点和缺点是同源的,就是这个波动囊括了所有情况。

那有没有其他的一些指标能反映一些特殊信息呢?有的有的,但今天我们仅介绍一个指标,那就是Sortino指标。这个指标我认为是比较典型的例子,大家一起来品品。

1.1 Sortino比率

前面我们提到一个Sharpe比率,这个比率衡量了所有的波动作为风险。但实际上,真的是所有的波动都是风险吗?似乎并不是这样的,我们可以将风险分为两类:

  • 上行风险:由正收益带来的收益风险;
  • 下行风险:由负收益带来的风险。

那实际上,这两种风险我们更关心哪种风险呢?这显然不是上行风险,也就是我们其实更关注的是下行风险。所以,Sortino比率使用下行风险度量总风险并作为分母,Sortino的计算方式大体是这样的:

$$
Sortino=\frac{E(r-r_f)}{\sigma_{downside}}
$$

其中$\sigma_{downside}$采用的是所有的负收益的收益标准差,也就是

$$
\sigma_{downside}=\sqrt{E(min(r-r_f,0)^2)}
$$

很明显能看出,这个比率和Sharpe的唯一区别就在于风险的度量方式,所以,这个指标的直觉解释如下:

  • 策略涨的多,涨的猛,不足为怪;
  • 但不能跌的猛,用跌的波动作为惩罚。

那说完了这个指标的构造方式以及解读方式,什么时候需要看这个指标呢?

  • 收益分布很偏,经常有大涨或大跌;
  • 有些策略有“偶尔暴力拉升”的特点,所以,用Sharpe会让“好的波动”拉低水平,也就是我们不希望统计这类波动的时候;
  • 想更关注下跌风险的时候。

所以,我们用一句话足以概括这个Sortino指标,那就是:

Sortino是只针对下跌的Sharpe

1.2 这类指标如何解读

大家可能仍感觉意犹未尽,但我想说:这类指标其实是很多的。因为大家总可以新做出一种风险度量和收益度量,只要收益度量能被风险度量进行解释,那就可以使用。所以,这类指标的核心在于什么地方?我们又应该如何看待这些指标?

那么首先,这类指标的核心在于使用风险来度量收益,所以风险和收益的“单位”,或者说量纲要统一;其次,当我们看到一个新的“风险度量比率”类指标的时候,我们可以关注三个方面:

  • 这个指标关心的是什么样的风险?
  • 这个指标关心的是什么样的收益?
  • 这个指标的风险度量收益的方式中,蕴含的逻辑是什么样的?

以Sharpe为例:

  • 这个指标关心的是所有收益率的波动,也就是整体风险;
  • 这个指标关心的是超额收益或绝对收益,也就是整体收益,超额收益或者绝对收益取决于是否采用基准、采用什么基准;
  • 这个指标度量方式蕴含的逻辑就是:整体的每一分波动,会带来多少收益?(因为波动在分母,收益在分子,所以是这样解释;当然,如果把话反过来说,那就需要收益在分母,波动在分子。)

但,最重要的一件事,还是上一篇中我们说过的那句:如果只是回测中得出的这个指标,那这个指标是历史的收益和历史的风险度量出的!并不能代表以后也是同样的表现!!(但在实际策略使用的时候,我们也往往会从回测时段之外的时间,不管是之后还是之前,去检测这些指标,看看一个策略是否失效。)

那,还有没有其他的指标了?难道只有这些指标?这够吗?

这还不够。继续!

二、滚动窗口类

2.1 什么是滚动窗口?

虽然这个概念很简单了,但我还是想说一嘴。其实也就是rolling这个函数对应的概念。

所谓滚动窗口,可以理解为一个“线段”在一条“直线”上逐渐“向前移动一个单位”的过程,然后在这个移动的过程中,我们去统计这个线段内,因子或者策略的表现、收益、风险是如何的。

  • 这条直线,就是所有我们想探究的时间,但这个想探究的时间,按照道理必须是连续的,不能从中间断开一段,那样就跳跃了,可能会造成一些意义上的混乱;
  • 这条线段,也就是我们的时间窗口,是一个固定长度的线段,也就是固定时间长度的窗口;
  • 滚动,也就是向前移动的动作。其实无关与向前还是向后,只要说明我们要统计所有可能的窗口。

那么,假如整个时间长度为$T$,时间窗口的长度为$T_0$,那么我们可以得到:

  • 一共有$T-T_0+1$个时间窗口(首尾都算所以+1,相信大家看到这里应该都明白了);
  • 站在时间点t上,这个时间点对应要统计的时间窗口,我们一般设置为$[t-T_0+1,t]$,也就是包括当前时间点,向过去看$T_0-1$个时间点。因为包括现在,所以一共的时间点共有$T_0$个;
  • 那假如单个时间窗口的时间长度就固定为$T_0$了,有人可能会问:最早可以从哪个时间点开始统计呢?我的回答是:从$T_0$这个时间点开始(这里我们假设第一个时间点为1)。

2.2 关于时间窗口长度大小的探讨

现在,我们知道要设置一个窗口大小作为固定时间窗口的长度了,那这个固定时间窗口的大小究竟应该多大/多小呢?

  • 在技术指标中,我们一般采用5个、10个、20个、60个、120个这些不容易造成过拟合且比较“整在”的时间窗口参数作为技术指标的参数(当然,用到的历史信息越多,这个指标就越对新数据“迟钝”,这也就是我们经常看5日、20日均线而不怎么看120日均线的原因,120日均线受过去119天的影响太大了。);
  • 但如果统计的是策略整体的评价指标,那我们一般设置固定时间窗口长度为3个月(60),6个月(120)甚至一年(252,注意是252不是240!这是一般用法!)等等,因为样本量大的时候,容易看出这个策略的一些脾气秉性。

不过嘛,要是这么简单我就不会单独写一个部分了。我在标题里可没写时间窗口的长度一定要固定。虽然我们知道统计的时间窗口长度一致的话,方便比较,这也是策略评价时的一般做法;但假如是技术指标,我们应该如何设置时间窗口大小呢?

聪明的你可能猜到了,rolling函数当中还有一个参数:min_periods

有时候,我们并不希望这些窗口的时间长度都为那么长的长度,因为这样会丢失很多开头的信息。假如是5日均线就还好,均线无非就是从第五天开始计算;但假如是120日均线呢?假如这个股票是比较新的,上市未满100天的股票呢?这个时候,我们为了让样本量尽可能的多,但又不至于影响到该指标的统计质量,我们就会用到这个参数,也就是时间窗口可以变小,但不能小于这个参数值。

但这样就够了吗?我前面也说了,“不至于影响到该指标的统计质量”,那如果一个指标,特别依赖于时间窗口长度,甚至被时间窗口直接支配,那这个时候,我们其实是不能用到min_periods这个参数的。例如使用窗口内成交额的所有总和这个技术指标,如果用了这个参数,就会导致值的大小不稳定,同时也无法比较。

2.3 时间窗口的意义及相关指标

为什么采用时间窗口这一技巧?原因就在于它本身是如何构造的。它本身,是利用过去一段时间的时间窗口进行指标构造或者策略评价,本质上没有用到全部历史时间。所以,就算120日的均线,也会比全部历史的均线要好得多,因为全部历史对于这个指标的影响太大了,从而未来的数据对这个指标造不成任何影响。

所以,我想,这个技巧的使用原因在于:过去多长时间的历史数据对当前的影响是有效的这个问题。

那么,我们现在有了时间窗口这一工具,自然就可以将过往的技术指标、策略评价指标都用这个工具改造一下;同时,当这些滚动技术指标用在回测时间之外的时候,就可以观察到策略是否失效(不一定是拥挤或者过拟合之类,但至少能观察到是否失效;但如果观察到Sharpe在拟合时段之后逐渐衰减,那大概率还是过拟合或者拥挤了的,这种情况应该也只对应这两种情况)。例如:

  • 滚动时间窗口Sharpe:可以使用3个月,6个月甚至一年的时间窗口长度,这个衡量的是当前策略的稳定性是否在过去都很稳定。因为有一种情况:这个策略稳定只是因为近期很稳定,但其他时间并不稳定,一平均,还是很稳定。这样的话,当前时间的全历史Sharpe就是无效的,反而应该用滚动窗口的Sharpe去观察。例如我们可以观察哪些连续月份联合起来Sharpe较高,甚至我们可以观察近一段时间固定时间窗口的滚动Sharpe的平均值来评价某些策略。
  • 滚动时间窗口年化收益(CAGR):同样的时间窗口长度参数,这个衡量的是当前策略在不同时段的收益程度,不管是绝对收益还是超额收益。这样我们就可以观察哪些连续时间段的收益较高,从而继续查其中的原因。
  • 滚动时间窗口的风险度量同理
  • ……

这就是时间窗口的强大之处,可以让一个单独的好坏现出原形,也可以让一个技术指标的性质发生变化。


以上就是这一期的评价指标解读。大家感兴趣的话,我后面还有一期,会专门讲讲交易及交易实施的部分是如何评价的。这一部分同样重要,且直接决定这个策略最大能容纳多少钱、会在交易过程中损耗多少、甚至你的持仓心态。

就这样。