小白量化系列-量化回测的细节讨论

发布于: 修改于:雪球转发:0回复:0喜欢:0

今天想简单说说量化回测的流程、各流程中的参数设置和可能遇到的问题。借助最近做的一个简单的事件策略的回测,来开始我们今天的“小白”讨论。

假设该策略的逻辑是,当发生事件A时,买入并持有3天。

一般做事件策略的做法,都是发生事件A的时候,作为信号触发的T日,然后根据你的假设检验或者归纳演绎,先测试一下持有n天的一个情况。 根据策略的性质,可以选择看绝对收益还是超额收益。

首先完成数据观察、清洗、落地。

整理出来从2013年到2023年初的数据如下图,一共有5202条记录。

然后根据规则形成持仓:从发生事件的T日起,持有到T+3。

在形成持仓的时候,一般会对备选股票有所限定,比如我的限定一般如下。限定的原因是希望事件策略回测的股票本身具有较好的适用性,是真实可以交易的标的。

1. 在观测期至少上市了 6 个月,在观测期至少交易 10 天,剔除所有北交所的股票

2. 以交易额衡量流动性,以 A 股流通股本衡量市值

3. 取流动性、市值和股东户数都在前 95% ,且股票价格在前98%的股票的交集(univ_research),与指数成分股(hs300, zz500, zz1000, sz50)的并集

4. 即univ_research | hs300 | zz500 | zz1000 | sz50

形成的持仓数据概览如下,一共有2587个交易日(10年),平均一天是2-3个票。

接下来对持仓进行回测,由于持仓数量很少,所以这次我们计算绝对收益。一些回测时的假设如下。

1. 每天所有标的都是平均持仓,如果当日无持仓,则空仓

2. 涨跌停和停牌均不交易

3. 使用0930到0959的vwap价格作为买卖成交价

4. 佣金万2,印花税千1

回测结果如下。

看到这个10年接近10倍的结果是不是特别心动?先别着急,一般来说,结果这么好的策略,如果不是回测有问题,就是逻辑或者数据出了问题。我们来检查一下。

很快就发现有个很细节的问题,很多信号的入库时间其实不全是开盘前,而是盘中或者盘后不定时入库的。这就导致我们回测时假设的交易时间和价格不对了。

按照是日频信号的假设,把当天触发的信号,改到下一个交易日开始建仓交易,仍然是持有3天,重新回测如下。一下子少掉了接近70%的收益,这基本可以推断出这个信号是当天大涨之后,就会触发的概率很大,而且大部分的收益都在第一天结束了。

做到这里,一个基本的回测就做的差不多了,后面当然还可以加一些其他的条件进行筛选,不过基本上是一个数据挖掘的过程,没有太多经济学的背景了,所以我个人判断也不是那么“健壮”,就不继续往下写了。