财新传媒
位置:博客 > 上善若水 > 炼数成金:有关量化策略的回测、躲坑与改进

8
2016

炼数成金:有关量化策略的回测、躲坑与改进

为什么要回测?

我们首先来看一下什么叫做回测。作者认为,回测就是基于过去发生的历史信息产生历史交易,并考察这些交易业绩的过程。
 
如果我们把传统的交易投资视为主观交易,把量化投资视为客观交易的话,那么他们之间的一个重要的区别就产生了:量化交易可以用客观的标准制作一面镜子,让你看到这个标准之下的策略从现在返回到过去任意一个时点的表现。
 
我们在上一篇文章说到过,其实有很多渠道可以找到有详尽历史业绩数据的策略,但是我们还是需要亲自对其进行回测。这样做有三个目的,一是对策略的重复研究将确保你对可以完整地理解该策略,并在交易系统中对其准确复制并加以实施;二是我们在复制他人的研究成果的过程中,有助于我们确认和发现原始研究中是否存在干扰研究过程和研究结论的常见错误,算是对策略进行一个尽职调查;三是在回测中看看是否可以尝试修改原始策略,达到改进策略的目的。

回测工具与数据来源

在这样一个充满分享精神的互联网时代,我们是幸运的,无论是免费还是收费的回测平台,都做到了非常优秀的水平。小善按照几个维度划分,总结了A股量化分析的工具和平台,大家可以按照表格中的关键词进行检索研究。

细心的朋友可能会发现,对于平台和可以用于回测或者取数的API都是用Python实现的。不得不说,小善很喜欢Python,正如坊间名言:“Life is short, I Use Python”(人生苦短我用Python)。其实用什么语言都差不多,关键还是自己擅长哪一种。

数据的甄别和使用

无论是我们使用开源的Tushare从主流财经网站爬回来的数据,还是我们从收费金融终端取回来的数据,都面临很多问题需要在进行回测之前先行确认,这主要包括:
 
1. 数据是否经过分拆及股息调整?这决定了你是使用真实价格回测还是使用复权价格回测。

2. 数据是否有存活偏差?这是一个上一篇文章已经述及的问题,但是对于大部分人来说,获取无存活偏差的数据可能没那么容易,一个可行的方法是,用相对近期的数据做回测,这样可以降低可能发生的错误的程度。

3. 策略使用最高或者最低价吗?因为几乎所有股票的日数据中,最高最低价的噪声远远大于开盘和收盘价,使用最高最低价做回测不如使用开盘收盘价来得可靠。
 
其实还有一个步骤是检验数据的可靠性,虽然说理论上是要做这么一个检查,但是实际上必要性不大,这主要是因为我们使用的数据的获取渠道本身已经很权威了(如WIND,新浪)。而且就算你发现了一些异常,自己也没有能力或者没有依据进行改正。小善觉得一个可行的做法是用两个独立的数据源的数据分别算一下,做一个交叉对比。

业绩度量

量化交易员有很多不错的业绩度量指标,究竟使用哪些指标很大程度上取决于个人偏好。本书作者认为,在策略之间、交易员之间进行横向比较的时候最重要的两个指标是夏普比率和挫跌。注意,作者并没有提到平均年化收益率这个投资者最常用的度量指标,因为使用这个指标就必须得详细说明计算收益率所用到的分母,例如在多空策略中,分母用一个方向的资本还是两个方向的资本?如果是使用杠杆,是使用杠杆收益率还是无杠杆收益率呢?如果使用夏普比率和挫跌,在对比不同策略的时候,上述绝大多数问题都可以避免。
 
小善觉得作者说的很有道理,但是我们在市场里本来就是为了赚钱,所以收益率还是非常重要的。只是说,我们不应该只考虑收益率本身,它本身不是一个全面的评判指标,这一点小善尤其要提醒大家注意。

回测陷阱

计算机算法产生交易的回测看似简单,但实际上很容易出错。历史业绩高估是常见的错误,无论投资者还是交易者对此都应当十分谨慎小心,一个看上去特别牛逼的模型,实际上可能有致命BUG或者可能是因为主要业绩是前期超高的收益率积累的。我们已经知道使用有存活偏差的数据会导致回测业绩高估,除此之外,还有一些与如何编程写回测程序以及如何构造交易策略相关的常见陷阱,作者主要列举了以下几类:
 
1. 前视偏差

这个就是我们常说的未来函数,犯了在策略中使用交易完成之后的信息的错误。例如,“在日最低价的1%之内买入股票”,这样的规则显然是存在未来函数的,因为在收盘之前你不可能知道最低价是什么。
 
我们如何避免前视偏差呢?关键就是要使用“滞后”的历史数据来计算策略信号,使用滞后的数据意味着,在计算移动平均值、最高价、最低价、成交量等指标的时候,只使用“上一期”的收盘数据。当然,如果是在本期交易结束之后才产生信号,是可以用本期数据的。
 
2. 数据迁就偏差

前一篇文章我们已经谈到过数据迁就偏差,其实并非所有的数据迁就偏差都是由参数的过度优化造成的,数据数量不足也会导致数据迁就偏差。因此降低数据迁就偏差的最基本方法是使用足够多的回测数据。
 
另外,可以采用样本外测试的方法,将历史数据根据时间先后分为两段,后一段数据用于样本外测试。构建模型的时候,参数优化和定性选择使用前一段数据,称为训练集,所得模型的测试使用后一段数据,称为测试集。在理想的情况下,基于训练集的最优参数和决策对于测试集也是最优的,不过实际上很难做到,在合理范围内即可。
 
最靠谱的样本外测试方法就是仿真交易,用尚未发生的真实数据运行模型。仿真交易的好处在于你可以对策略有一个直观的理解,包括盈亏的波动、所使用的资金、每天的交易次数和包括数据获取和使用在内的各种问题。回测是反应不了操作中面临的问题的,但是仿真交易可以。如果能够做一个月的仿真交易,那会有很大概率发现数据迁就偏差问题的。
 
在完成模型的参数和各种特征的优化、通过测试集的检验之后,可以通过改变这些参数或改变模型的定性决策,来观察模型业绩在训练集和测试集上面的变化。如果业绩变化很大,在参数取任何其他值的时候都很糟糕,那么模型就有可能存在数据迁就偏差。
 
最后,还可以尝试简化交易模型。如果开始的时候有五个变量,可以尝试着去把其中的一个去掉,观察去掉之后的模型表现以及跟原模型相比在那个点会发生显著变化,如果业绩没有显著降低,是可以考虑简化模型的。

交易成本

没有考虑到交易成本的模型的业绩是不真实的。如果策略没有考虑交易成本,并且策略的业绩累积时间非常长,或者策略本身交易频繁,或者策略要求大规模购买小盘股,那就要对已经得出的回测结果打折,因为佣金、流动成本、冲击成本这些因素会对这些策略有较为显著的影响。

策略改进

策略的本质是市场规律的概括,你对市场规律认识的越深刻,用代码表达思想的能力越高,你的策略就会越贴近市场。
 
对于市场长期的规律而言,其实大家都知道,你跟,或者不跟,她就在你手里,不离不弃。但是市场长期的规律不是一直显性存在的,而是以螺旋式的形式表达整体的策略规律的,简而言之,即便是长期的规律,也会有涨多了要跌,跌多了要涨的情况,例如价值投资。
 
对于市场短期的规律而言,小善觉得只能是今朝有酒今朝醉了。如果只有一个美丽的邂逅,那也是极好的。对于短期的策略,一旦市场阶段性的因素消失,就可能要对这个策略就永远的Say Goodbye了,比如证金概念。
 
本篇小善总结了书中关于量化策略的回测、躲坑与改进的方法,也分享了自己的认识和经验。截至目前,大家了解到的更多的是如何躲坑这一方面的知识,这只能让我们大概率的避免其中一些大BUG,不至于被策略美丽的曲线所迷惑。但我们始终无法逃避的另一个问题就是在面对继续交易和保全资本这两个完全不同的选项的时候,我们如何选择?

推荐 2

总访问量:博主简介

上善若水 上善若水

“上善若水”,来自《道德经》“上善若水,水利万物而不争”。我们从事对冲基金(私募基金)工作,欢迎大家关注和交流。本博主要是一些研究性的、思想性的文章,另在新浪有博客,里面文章更贴近市场,其地址是http://blog.sina.com.cn/ssrssslww 。

个人分类

最新评论