策略回测中都有哪些坑?

大家在量化开发中,会不会经常遇到这样的现象,明明一个策略的回测效果很好,回测净值曲线平稳向上,但是在模拟盘或实盘当中,策略表现却不如人意,轻者资金曲线震荡,重者出现重大亏损。这种“理想很丰满,现实很骨感”的异象我们姑且称之为“坑”,这些“坑”的产生其实是策略回测中考虑的条件与模拟盘实盘之间存在较大出入所导致的。接下来咱就盘点一下在策略回测当中经常会碰到的那些天坑,再唠唠有啥应对的方法。
01
未来函数
未来函数也叫前视偏差,顾名思义,就是在策略回测中使用了未来信息,正是这些未来信息的使用,导致策略回测效果非常好,但策略实盘效果非常糟糕。证券行情等数据大部分都是时间序列数据,在实盘当中,策略只能获取当时及以前的数据,出现不了未来信息,但在策略回测当中,数据全部都是已经可取,站在历史中的某个时点,“不小心地”就取到了未来的数据。最典型的未来函数的例子莫过于“垃圾美股”策略了。相传,当时一个美国量化研究员发现,购买N年前基本面恶劣的股票,一直持有到今天,超额收益非常显著,远远超过了标普500,正当感觉将要财务自由之际,突然发现了其中的猫腻,这个猫腻就是未来信息。

美股有着完善的股票退市机制,如果股票基本面一直恶劣,过不了多久就会被退市,恰巧那位研究员的数据库里面没有存储退市股票的数据,也就是说,N多年前基本面恶劣,但至今仍没有退市的股票,说明之间经历过了基本面反转的情况,正是这个反转给股票带来了超额收益,如果该策略用于实盘,说不定就买了垃圾股然后被退市,从而血本无归。这个例子也可以被称为“幸存者偏差”,是未来函数或前视偏差的特例。

典型的未来函数错误还有:在当前年度调用当前的年度的财报数据,使用前复权数据做策略回测,不完整周期调用完整周期数据……

在量化实践中,最好就是使用上一个完整周期的数据出交易信号,然后在下一个周期成交,也就是今天只用昨天和之前的数据计算交易信号,这样就能避免不少未来函数的错误了。

02
过度拟合
策略回测是基于历史数据的,但历史数据样本是有限的,特别是对于日线、周线以上的中低频策略,如果策略参数较多或交易规则非常复杂,就会出现策略能完美适应历史数据的情况,但这种策略是很难推广到实际当中去的,这种现象就叫做过度拟合。一般来说,样本数据越少,策略参数越多,交易规则越复杂,则出现过度拟合的概率就越高。就跟星座理论一样,只是对少量样本的统计,归纳出每个星座的性格特性和表现,现实当中,不知见过多少同一星座的人具有截然相反的性格,并不具备普适的预测能力。

量化实战当中,一般会采用增加样本数据、提高交易频率、交叉验证和参数敏感性测试的方法对策略进行验证,降低数据过拟合的风险。

策略回测中都有哪些坑?-CycleGen
03

偷价
偷价意味着在策略回测当中以一种理想的价格成交,但这种理想的价格是不太可能发生的,比如说,股票价格等于或高于某个阈值价格的时候,然后就以阈值价格成交,其实在实盘当中,当价格突破某个阈值的时候,可能价格的涨势非常好,随着惯性一路向上突破,此时成交价格可能离阈值价格已经比较远了。还有一些比较隐蔽的偷价情况,比如说多因子选股策略在一篮子股票交易时没有做涨跌停或停牌判断,直接买入,在回测当中是可以成交的,但在实盘当中连续涨停的股票和停牌股是无法买入的,买入涨停股后继续涨停,停牌股复牌后也可能连续涨停,给股票组合带来无法实现的收益。避免偷价的情况,一般只能靠策略开发者细心处理,考虑是否可以交易和以什么样的价格范围成交,回测无他,惟心细尔!
04
交易成本
交易成本一般来说除了明面儿上的佣金、印花税等必要成本外,还有冲击成本带来的滑点等。如果策略回测时没有考虑交易成本的影响,那回测的绩效绝对是不真实的,特别是对于交易频率较高和交易弱流动性品种较多的策略,策略绩效必须是要大打折扣的。特别是以前比较流行的低价股策略,那时自建或第三方平台还不够完善,很多人就省略了交易成本的设置,导致回测结果非常亮眼,殊不知,A股股票价格最小的变动单位是1分钱,也就是1跳是0.01元,对于现价1元的股票来说,实盘成交时偏离1跳就是1%,假设每个月交易一次,那一年光考虑1跳滑点的交易成本就是12%。

因此,交易成本是无法避免的,在回测当中建议考虑更差的成交情况,如果最差的情况都可以接受,那实盘的成交情况也是差不离的。

05
信号闪烁
信号闪烁是指量化策略发出的交易信号不稳定的情况,从本质上讲,这是由策略逻辑和驱动数据导致的。举个日线周期双均线策略的例子,如果短期均线上穿长期均线则买入,如果短期均线上穿长期均线则卖出,在策略回测当中,策略是由Bar数据驱动的,均线是按照收盘价的简单平均计算的,但在实盘当中,策略是由实时的Tick数据驱动的,若盘中价格涨幅较大,可能会导致短线上穿长线,触发买入信号,但在收盘时股价回落,短线又回到长线之下,这就造成了信号闪烁,也导致了策略实盘与回测的交易信号不一致。避免信号闪烁较好的办法就是在计算交易信号时只采用当前Bar之前的数据,这样就不用受到实时行情变动的影响,保证交易信号的稳定,不过这样做也丧失了利用实时信息的机会。

今天给大家列举了策略回测中最容易碰见的坑和应对办法,但是在策略开发和回测中还是得依赖大家的细心,尽可能多地考虑实际情况,在模拟盘稳定后再上实盘,不要被策略回测中的坑给坑了!

本文系作者 @ 原创发布在 CycleGen。未经许可,禁止转载。

喜欢()
评论 (0)
    热门搜索
    173 文章
    1 评论
    47 喜欢
    Top