楼主: 掘金队长
367 4

[程序化交易] 从回测到实盘系列二:如何让回测更贴近实盘结果 [推广有奖]

  • 0关注
  • 4粉丝

本科生

46%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
603 点
帖子
41
精华
0
在线时间
94 小时
注册时间
2018-1-8
最后登录
2018-12-4

掘金队长 发表于 2018-7-11 09:25:26 |显示全部楼层
本帖最后由 掘金队长 于 2018-7-11 09:30 编辑

前言:
在上一篇中,我们解读了三个不同技术指标,并千辛万苦,通过对技术指标的涵义解读,对不同技术指标进行结合,为了能够尽量去避免系统风险,我们甚至加入了大盘指数的判断,最后才勉勉强强有一个在回测区间内能看到正收益的策略。


但是,这样的策略是否就能用于实盘并且获取盈利了么?这想必也是很多读者关心的问题。不管回测结果如何,我们希望的不是说看到回测的收益曲线非常牛逼,而是希望回测能够尽量去贴近实盘情况,以便在实盘的时候,我们的策略能尽可能去达到回测时达到的正收益的效果,为了去贴近实盘,我们需要尽量去模拟实盘中可能或者必然需要考虑的情况,哪怕这会导致回测的收益曲线非常差,至少回测能告诉我们,真实市场,你很可能面临甚至比当前更糟糕的境况,而这,才是我们想要的。


手续费与滑点

在我们进行股票交易或者期货交易的时候,我们在交易的时候,都需要付给券商或者期货交易所一笔手续费,而如果股票在卖出的时候,我们不仅需要交手续费,还要交千一的印花税,可能看着这些钱不多,但是,日积月累,这些交易成本会对我们收益造成非常大的影响。


不仅是手续费与印花税等交易成本,如果我们买入的金额很大,但是对应股票交易量比较小,那么,很可能对应股票买入的价格,要比我们设定的最初买入价格要高,这是股票交易中的滑点。但是,股票交易的滑点,并不好进行计算,这和我们买入金额,对应股票成交量有很大关系。一个去尽量避免滑点的操作方式是,我们用小周期的 Bar进行回测,同时对我们每次买入的总量进行拆分,每次买入的数目不超过当前 Bar的交易量的譬如 25%,以此来避免滑点的出现。即便如此,我们依然可以在回测中设置滑点,以增加我们策略的回测的可靠性,那么,设置多少滑点比较合适呢,上交所一篇论文给出的数据是 0.246%,供参考,不过需要指出的是这是 2004 年发表 的论文。


在加入手续费,滑点后,我们之前写的一个赚钱的策略,此时收益会如何呢,简单起见,依然以日线数据进行回测,原始代码可以见《从量化角度告诉你常见的技术指标到底能不能赚钱》我们只需要在原始代码最后的 run函数中,添加对应的手续费与滑点影响,需要注意的是,回测代码中并没有印花税的设置选项,但是我们可以将之归到手续费中,将手续费相应加大。这里,我设置手续费为万五,滑点为千三,即0.3%,为了使得手续费与滑点展示效果,我同时设置了初始资金为一百万,每次符合条件股票买入10 手,最后的回测曲线如下图所示1:

作为对比,没有手续费,滑点的回测收益曲线如下所示:

可能因为开平仓没有那么频繁,在收益曲线图上没有太大差别,但是从绩效分析,简单的几个指标,包括收益率,最大回撤,能很明显到,加入了手续费和滑点后,回测的效益还是有比较明显的下滑:

复权对回测的影响

在回测时候,如果是股票的话,对于复权的处理需要比较小心,有些人不注意复权的处理,直接就用原始价格进行回测,回测的结果可能很好,也可能很差,但无论好坏,如果股票出现过除权除息,那么,用原始价格回测的结果是不可信的。举个简单例子,譬如有人用双均线策略作为自己的决策辅助,在回测区间内,某一天,选入的某支股票进行 10 送10,当天开盘,股票价格价格直接腰斩,按照双均线策略,这时候应该对该股票进行卖出的。但是,该股票的价值并没有变,假如原来有 1 手该股票,股票价格为 10元,持有股票价值为 1000 元, 10 送 10 后,股票价格变为 5 元,但是原来的1 手股票会变成 2 手,持有股票价值并没有变化。甚至于股票市场上可能会有填权行情,这时候去出场并不合适。


有鉴于此,回测的时候,对于回测股价的复权处理就显得很必要了。但是复权的方式有两种:前复权,后复权,应该选择什么复权方式去进行回测呢?


后复权是指以除权前的价格为基准来测算除权后股票的市场成本价。通过把除权后的价格按以前的价格换算过来,我们可以看到该股上市以来累计涨幅。往后进行复权处理,这样当然不会再有因为分红,送股等导致的股价"跳空"的问题,因此,有些人会喜欢用后复权进行回测,但是,后复权有一个问题,某些股票在历史上分红很多,后复权后,价格会变得非常高,当设定好初始资金后,回测的时候,能够买入的股票数目可能就会变得很少,甚至于买不到。这里,笔者试着去获取 2018 年 6 月 28日的时候,格力电器的后复权价格。利用掘金量化平台,笔者首先获取格力电器的复权因子,然后用 6 月 28日的复权因子乘以当日收盘价,就有得到 6 月 28日的后复权价格,代码片段如下:

可以看到,后复权处理后,股价已经变得非常高了,但是同样的,可以看出,格力电器是一家分红很慷慨的一家公司,如果基于基本面投资,从历史上看,该公司的股票是不错的选择。


前复权就是保持现有价位不变,将以前价格因为分红,送股导致的跳空,通过对应的前复权处理,保持股价走势的连续,方便对股票进行技术分析。假如以今日 (2018 年 6 月 28)为基准,那么,2011 年 5 月 3 日的格力电器股价可以根据相应复权因子算出来:

当然,这里为了举例,笔者利用复权因子进行了计算,实际我们可以通过直接指定复权方式,获取前复权,后复权以及不复权的价格

那么,是否简单使用前复权进行回测就行了呢?如果我们回测区间为 2015 年 5月3日到 2016 年5月3日,回测标的为格力电器,那么,我们统一用今日(2018 年 6 月 28 日) 往前前复权处理进行回测,理解上,回测区间标准统一,应该没有什么问题。但是,有一个问题是,我们用今日往前进行复权是否就真的没有问题了么?


回测的假设是我们处在回测对应区间内,没有之后的信息,也就是所谓的未来信息,如果我们用回测区间外,往后的时间的信息去进行回测,不得不怀疑会不会引入未来信息。对于这个问题,笔者认为,可能会有影响,但是影响没有那么大,那么,什么时候会有影响。是不是用定点前复权,也就是用回测区间结束点往前进行复权,回测会更好呢?


这里,笔者试图用一个极端例子去加以说明:

1.这个示例是某个微信群友提出来的,对于定点前复权可能出现的问题的说明。假设我们有两支走势完全相同的股票,回测区间结束的时候,股票 A 会进行 10 送 10,股票 B没有任何处理,那么,会导致两支股票前复权价格变得完全不同了,假如我们做的是两支股票的套利,那么回测结果就会完全不同了,这样的极端的例子是否有呢?譬如,格力和美的股票走势很接近,有某位雪球大 V提过,可以利用两支股票做套利,但是如果回测时间点,格力电器分红了,而美的没有分红,回测出来的结果很明显就会有差异。当然,这个问题比较极端,但是回测的时候,需要针对策略和交易标的仔细思考是否会有这种情况出现。


2.关于不用定点前复权导致的未来信息,对于回测的影响有多大,一个简单的办法就是用回测看下回测结果如何,篇幅所限,这里不再进行代码举例,感兴趣的读者可以自己去对比看一下,掘金量化终端默认是定点前复权,如何去以当前日期往前复权计算,只需要获取相应日期的复权因子,然后进行计算即可,实际结果基本相同。但是,是否有其他的极端情况,笔者并没有考虑清楚,欢迎读者有比较好的示例回帖告诉笔者。

买入价格的设置

买入价格的设置问题,有些量化平台,包括掘金终端,为了避免出现偷价问题,当我们回测时候,选择用市价单成交的时候,默认会使用下一个交易日的开盘价进行成交,但是,这样会出现一个潜在的BUG,如果下一个交易 日直接一字板涨停,譬如当初 360借壳江南嘉捷,如果按照普通双均线策略进行择股买入,完全可以成交,然而实际上我们都知道当初江南嘉捷复牌后,连续很多个一字板涨停,我们并不能买进去。


那么,如果去避免这样的问题,一个最粗糙的做法,将股票池中回测收益最大的股票的收益去除来看股票组合的收益,避免幸亏者偏差。比较精细的做法,设置买入为限价单,限定买入价格,达到触发价格再进行买入,而且对买入价格和当日高、开、低、收以及涨跌停价进行比较,避免去在一个不可能成交的价格触发策略买入。

说在最后

篇幅与精力所限,笔者仅列举了有限的一些回测中可能疏忽的问题,希望能够给读者们一些启发,并有一些自己的新的见解。在考虑了上述所有问题后的回测曲线,我们才能部分地去相信这个策略,然后,将策略利用仿真进行进一步地验证。

市面上经常会有人售卖或者分享各种回测收益曲线非常牛逼的策略,并不是说百分百的策略都是垃圾,但是,基本上而言,九成九都是有问题的,一个简单逻辑,既然人家的策略这么牛逼,为什么人家自己不拿着资金去放到市场上去跑,去挣钱,而是把策略给到你,这里,只有几种情况,要不这个策略有问题,人家在市场上挣不到钱,还不如进行售卖;要不就是策略实际收益很低,或者策略容量很低,在市场上的收益远不及去将策略售卖所得的多;最后一种可能,当然人家就是热心肠,乐于将收益很好的策略去共享出来,但是,必须考虑一个因素,当一个策略公布出来后,其有效时间还有多长,考虑到用的人多了后,很容易就达到策略的容量上限,或者被人针对性的进行操作,而且,要从良莠不齐的各种策略中找到好的策略,本身也是一件很困难的事情。


但是,是否这样我们就可以对市面上的所有策略都 say no了么?也不尽然,各种策略的形成,必然有其内禀逻辑所在,我们完全可以在各种不同策略中间去寻找灵感,去形成自己的一套完整交易逻辑。譬如市面上流行的海龟策略,公布了几十年,直到现在,依然有人称能将其实盘得到比较好的收益。海龟策略交易逻辑本身是很简单的,长短两个周期的唐奇安通道,利用通道突破形成的交易条件,利用过去市场波动的情况去控制我们开仓的仓位,以此来平衡我们可能面临的风险,确定好出场条件,避免人手动去判断出场点导致的心理波动,这样的策略在问世了几十年依然有那么多拥趸,与其策略内禀的逻辑,风险控制的理念有着密切的关系。


最后,希望读者能够博取各家所长,形成一套自己的独特的交易理念,并将之实践。不要相信天下会掉馅饼,努力并思考的人才更可能收获到成功。


Footnotes
[1] 由于符合条件股票比较多,可能出现某些股票因为金额不足而无法买入的情况,请读者自行测试

相关阅读:
1. 从量化角度告诉你常见的技术指标到底能不能赚钱?https://www.myquant.cn/community/topic/649/2
2. 程序化交易之三:由回测到实盘,还需要注意些什么?https://www.myquant.cn/community/topic/668

来源:掘金量化myquant.cn,   作者:胡琛 博士   



掘金量化——投研、交易、分析  一站式量化交易平台。
stata SPSS
suijichao 在职认证  发表于 2018-7-12 13:45:35 |显示全部楼层
咋没找到你的第一篇啊
回复

使用道具 举报

lwell20 发表于 2018-7-13 06:28:33 |显示全部楼层
回复

使用道具 举报

掘金队长 发表于 2018-7-13 09:17:36 |显示全部楼层
suijichao 发表于 2018-7-12 13:45
咋没找到你的第一篇啊
第一篇的链接:https://www.myquant.cn/community/topic/649/2  有3个技术指标的源代码可供学习交流
回复

使用道具 举报

suijichao 在职认证  发表于 2018-7-13 11:13:15 |显示全部楼层
掘金队长 发表于 2018-7-13 09:17
第一篇的链接:https://www.myquant.cn/community/topic/649/2  有3个技术指标的源代码可供学习交流
多谢回复
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

GMT+8, 2018-12-10 22:02