数据质量:幸存者偏差、复权调整与数据缺口
识别那些悄无声息地扭曲回测的数据问题,并对拆股、分红、退市、期货展期和数据缺口进行修正。
你将学到什么
- 什么是幸存者偏差,以及它会把回测结果夸大到什么程度。
- 如何对拆股和分红进行调整,以及何时使用价格数据或总回报数据。
- 连续期货序列是如何构建的,以及为什么它们可能出现奇怪的价格。
- 如何发现并处理数据缺口、错误价格和其他数据错误。
讲解
回测的质量取决于它的数据。大多数数据错误会让结果看起来更好而不是更差,因此它们很危险。
幸存者偏差
幸存者偏差是指只用今天仍然存在的品种进行测试。破产、被收购或被剔除出指数的公司,会从许多免费数据集中消失。一个在当今指数成分股上测试的选股系统,实际上已被提前告知了哪些公司会存活下来。解决办法是使用时点数据:即每个历史日期当时所知的交易范围,包括已退市证券(已从交易所摘牌)及其最终价格。
公司行为与调整
- 拆股:一股变为若干股,价格按同样的倍数下降。未经调整的数据会显示一次虚假的暴跌。经过调整的数据会把之前所有价格除以拆股比例。
- 分红:在除息日(买入者不再获得该次分红的第一天),价格通常会下跌大约相当于分红的金额。价格序列会把这显示为亏损;总回报序列则把分红加回去。之前价格的调整系数:
1 − 分红 ÷ 前一日收盘价。
衡量收益时请使用总回报(复权)数据,但要记住,复权后的历史价格并不是当时实际成交的价格。像“高于 €100 时买入”这样的规则,必须使用当天真实的(未复权)价格。
期货:连续序列
期货合约会到期,因此一段较长的历史必须把多份合约拼接起来(展期已在课程《衍生品:期货、期权、差价合约(CFD)与凭证》中介绍过)。在每次展期时,旧合约和新合约的价格不同。向后调整的序列会把之前所有价格按展期价差平移,使拼接后的序列没有人为的跳空。差值法以欧元或美元加上或减去价差,可能产生负的历史价格;比率法则乘以一个系数,能保持百分比变动的正确性。请使用按比率调整的序列,或使用每份真实合约来计算百分比收益。
缺口与错误
- 缺失的 K 线:假日、交易暂停或数据漏洞。不要悄悄用前一个价格填补;要把它们标记出来,并确定一条规则(第 2 课)。
- 错误价格:单个错误数值,例如一个高了 10 倍的价格。检查单日涨跌幅超过某个阈值(例如宽基指数为 25%)的情况,并用第二个数据源加以确认。
- 时间不匹配:各市场的收盘时间不同。一只欧洲 ETF 的收盘与一个美国指数的收盘并不同时发生。
- 修订后的数据:经济数据和公司财报之后会被更正。请使用当时公布的数值,而不是修订后的数值。
示例演算
假设示例 1,拆股:一只股票收盘价为 €400。隔夜它按 1 拆 4 进行拆股,第二天收盘于 €101。
- 未调整的收益:€101 ÷ €400 − 1 = −74.75%(虚假的暴跌)。
- 调整后的前一日收盘价:€400 ÷ 4 = €100。收益:€101 ÷ €100 − 1 = +1.00%。
假设示例 2,分红:除息日前收盘价 €50.00,分红 €1.00,除息日收盘价 €49.50。
- 价格收益:€49.50 ÷ €50.00 − 1 = −1.00%。
- 总回报:(€49.50 + €1.00) ÷ €50.00 − 1 = +1.00%。
- 调整系数:1 − €1.00 ÷ €50.00 = 0.98。调整后的前一日收盘价:€50.00 × 0.98 = €49.00。基于复权数据的收益:€49.50 ÷ €49.00 − 1 ≈ +1.02%。这一微小差异来自计算方法,该方法假设分红按除息日价格进行再投资。
假设示例 3,幸存者偏差:一个包含 10 只股票的交易范围,期限为五年。其中八只仍然存在,每只上涨 +40%。一只破产(−100%),一只在下跌 −80% 后退市。
- 仅计算幸存者:平均 +40%。
- 完整的交易范围:(8 × 40% − 100% − 80%) ÷ 10 = (320% − 180%) ÷ 10 = +14%。
- 只用幸存者进行的测试把平均值高估了 26 个百分点。费用和税费不计在内。
常见错误
练习活动
假设数据:一只股票收盘价为 €90。它按 1 拆 3 进行拆股,第二天收盘于 €31。两周后,它在除息日前收盘于 €32.00;分红为 €0.64,除息日收盘价为 €31.80。请计算:(a) 拆股当天调整后的收益;(b) 除息日的价格收益和总回报;(c) 分红调整系数。
查看答案
(a) 调整后的前一日收盘价:€90 ÷ 3 = €30。收益:€31 ÷ €30 − 1 ≈ +3.33%。
(b) 价格收益:€31.80 ÷ €32.00 − 1 = −0.625%。总回报:(€31.80 + €0.64) ÷ €32.00 − 1 = +1.375%。
(c) 系数:1 − €0.64 ÷ €32.00 = 1 − 0.02 = 0.98。
局限性:这里忽略了德国对分红征收的预扣税和资本利得税;关于税务处理,请向 Steuerberater(税务顾问)核实现行规定。
要点总结
- 幸存者偏差会夸大结果;请使用包含已退市证券的时点交易范围。
- 用经过拆股和分红调整的数据衡量收益,但对价格水平类规则要使用真实价格。
- 按比率向后调整能保持期货序列百分比变动的正确性;按差值调整则可能产生负价格。
- 在进行任何测试之前,检查缺失的 K 线、极端的单日涨跌幅和修订后的数据。
下一步
在下一课中,你将使用干净的复权数据,在电子表格中逐列搭建一个完整的回测。
自测
回答问题后核对答案。你可以随意重试多次。
供您自行复习的自动自测。您的答案在浏览器中核对,我们不会查看或评估。这不是考试,也不是资格证书。
您的进度
“已完成”仅表示您将本课标记为已学完,并不是对您理解程度的测试。 学习进度和笔记仅保存在此设备的此浏览器中,而非账户中。