3.2 查找与使用历史数据库
如果你的头脑中有一个需要特定种类历史数据的策略,首先要做的就是用Google 去搜索这类数据。你会惊讶地发现,可以找到不少免费的或非常便宜的各类历史数据库(例如,尝试搜索关键词“免费的期货日内价格历史数据”)。表3-1 列出了这些年来我找到的比较有用的数据库网站,绝大多数都是免费的或非常便宜。我删掉了那些价格昂贵的数据库,如彭博、道琼斯、FactSet、汤森路透和Tick Data。尽管它们几乎拥有你想要购买的所有数据,但这些数据大都是提供给有实力的机构的,不在个人或新设机构的价格考虑范围。


尽管在互联网上寻找数据来源要比寻找潜在的策略容易得多,但要使用这些数据库还存在很多问题和陷阱,我接下来对此进行详细分析。这些注意事项主要是针对股票和交易型开放式指数基金(ETF ),主要包括这么几个方面。
3. 2.1 数据是否经分拆及股息调整?
一家公司在除权日分拆其股票,每股分拆为N股( N 通常为2,但也可能是小数,比如o. 5 。当N 小于1 时,为反向分拆), T 日之前的所有股票价格应该乘上νN。相应地,当公司在除息日T 每股派发d 元的股息,那么T 日之前的所有股票价格应该乘上( Close(T-1)-d) IClose (T-1 ),其中Close( T-1 )是T日前一交易日的收盘价格。注意,调整股票历史价格时,是乘上一个因子而不是减去d元,以使调整前后股票日收益率不变。这是最常见的一种方式,雅虎财经就是这么做的。(如果减去d 元,虽可保证调整前后股票日价格变化相同,但日收益率会变化。)如果不对历史数据做出调整,除息日的开盘价要比前一日的收盘价低不少(除去正常的市场波动),这很容易导致一个错误的交易信号。
我建议最好找一个分拆及股息调整后的历史数据库,否则就必须找到一个单独包含分拆和股息信息的历史数据库(如earnings. com ),然后自己做调整,而这是非常烦琐且容易出错的工作。见下例。
例3.2 分拆和股息的调整
现在我们来看IGE ,一只ETF ,历史上既有分拆,也有股息。2005年6 月9 日〈除权日), 1 股分拆为2 股。以下是除权日前后没有经过调整的价格〈可以从雅虎财经直接下载IGE 历史价格的Excel 数据) :

细心的读者会发现,调整后的收盘价与雅虎财经给出的调整后的收盘价还是不一样的。这是因为2005 年6 月9 日之后还有股息,雅虎财经对此也进行了调整。每次股息调整都是乘上一个因子,故总调整的因子就是所有单个因子的来积。以下是2005 年6 月9 日至2007 年11 月所有的股息、前一交易日未调整的收盘价及调整因子z

(请在Excel 中使用我在上面给出的公式,自行检查调整因子是否满足我在这里给出的数位。)股息总因子为o. 998618 x o. 997488 ×…×0. 997214 =O. 976773 ,适用于2005 年6 月9 日这一天及之后未调整的价格。分拆和股息的总因子是o. 976773 x o. 5 = o. 488386 ,适用于所有2005 年6 月9 日之前未经调整的价格。以下是用这些因子计算出来的调整后价格2

可见,计算得出的调整后收盘价与雅虎上的一致(四舍五入保留小数点后两位〉。当然,在你读到本书时, IGE 很有可能又发放了股息,并且又进行了分拆,所以,雅虎上的数据可能已经与上表中的不一样。你可以做做练习,根据新的分拆和股息情况再次进行调整,并与当前雅虎上的数据进行比较。
3. 2. 2 数据有无存活偏差?
我们在第2 章中已经讨论过这个问题。不幸的是,对于一个起步者来说,无存活偏差的数据库价格过于昂贵,很难负担得起。能够克服这个困难的一种方法是,自己去收集将来可用于做回测的带时刻标签的数据。如果每天都保存了所有关注的股票的价格,就有了可供将来使用的带时刻标签或无存活偏差的数据库。另一种可以降低存活偏差影响的方法是,只用近期数据对策略进行回测,这样便不会因为有太多消失的股票而影响结果。
例3. 3 存活偏差人为抬高回测业绩的例子
这是一个“买进低价股票”的玩具策略。〈警告:这个玩具策略有很大的金融风险!〉假设在年初从1 000 只市值最大的股票中,等佳买进价格最低的10 只股票并持有一年。如呆数据库元存活偏差,所得结采如下:

除MDM 外,其他所有股票在这一年间都远市了〈毕竟互联网泡沫还是很严重的〉,故2002 年1 月2 日没有收盘价。最后价格是2002 年1 月2日或返市前最后成交的价格。这一投资组合的年收益率是一42% 。
如果数据库有存活偏差,这个组合就会筛掉这一年间所有退市的股票,进而选中以下股票:

注意,由于被选中的均是“存活”下来的股票,因此2002 年1 月2日全都有收盘价。这个投资纽合的年收益卒是388%!
此例中,策咯的实际收益率是一42% ,但由于存活偏差的存在,收益率被盛估为388% 。
3. 2. 3 策略用最高、最低价吗?
在几乎所有股票的日数据中,最高、最低价的噪声远远大于开盘、收盘价。这意味着,即使你的限价买入指令低于最高价,也可能无法成交,反之,对于限价卖出指令也是如此。(这可能是因为在最高价成交的指令可能很少,或者交易是在一个指令无法送达的市场中发生的,甚至有可能记录下来的最高、最低价是不正确的且没有被筛掉。)所以,使用最高、最低价做回测不如开盘、收盘价可靠。
事实上,有时开盘市价指令或收盘市价指令也无法按数据库中的历史开盘、收盘价成交。因为这些历史价格可能来自大型交易所(如纽约证券交易所),也可能是一个包括所有区域性交易所在内的综合价格。指令送达的地点不同,其成交价格也与数据库中相应的历史开盘、收盘价不同。尽管如此,这种开盘、收盘价的差异对回测业绩的影响,通常比最高、最低价要小,因为后者总是抬高回测收益。
从数据库检索完数据后,应对其进行查错。最简单的方法就是算一下日收益。如果你有最高价、最低价、开盘价、收盘价的数据,还可以算一下不同组合的日收益(如昨天的最高价与今天的收盘价)。对偏离均值4个标准差的收益要仔细检查。一般而言,极端收益与消息发布或市场指数异动有关。不然的话,就是数据本身有问题。