用一条价格曲线做回测,算出收益率并不难。难的是判断这条曲线代表什么、哪些日期能交易,以及账户里的资金何时可以使用。一次可靠的复核,需要把来源检查与计算检查分别做完。
先确认你拿到的是什么价格
指数点位、基金单位净值和交易所成交价格是不同观察。用指数点位模拟,可以研究某段行情与入金节奏;要模拟买入ETF,还需要该ETF的市价、交易单位和费用。净值不能直接当作在交易所能成交的报价。
复权价格与未复权价格也要分开。若一条序列已经调整了分红,再给账户加一次现金红利,就可能重复计算。明确的做法是选择一种口径,并记录它如何处理分红。字段说明不完整时,保留疑点比猜一个算法再补齐更容易复核。
日期与缺失值,决定能不能计算
保存代码、日期、来源链接、抓取时间和原始文件哈希。日期应当唯一且有效;日行情应与交易日历对照。周末公布的月度或季度指标可能是合法的期间观察,不能只因为落在休市日就删除;日成交价则应有对应交易日。
缺少一个交易日行情时,不应自动拿前一天价格当作当天成交价。部分月份也不能冒充完整月份。研究公布后的指标时,还要区分指标所属日期与实际公告日期:后来才公布的信息,不能用于之前的交易决策。当前下载的历史数据可能经过修订,也不能据此保证它是当时可得的版本。
分红资格、应收红利和现金,要分三步记录
分红不是每个买入者都能领取。先根据公告记录权益登记日、除息日、派息日与每份金额;资格以登记日持仓为依据。除息发生后,账本可以计入应收红利,到账前的这笔钱还不能用来买入。派息日再把应收红利转为可用现金;实际到账时刻需按券商记录核对。
下面使用原创虚拟数字:持有100份,登记日价格10元,除息后价格9元,每份现金红利1元,没有其他价格变化或费用。登记日资产为1000元;除息日是900元持仓市值加100元应收红利;派息日则是900元市值加100元现金。三个时点合计都为1000元。它不是任何基金的真实行情。

如果在除息日只看价格,会把这笔尚未到账的红利漏掉;如果除息日立即拿它买入,则提前使用了尚未收到的资金。两种偏差都能在一张逐日账本中发现。
小额预算要检查整数手和最低佣金
上交所公布的ETF交易单位是100份,最小价格变动单位是0.001元。交易单位与价格档说明 因此模拟买入时,应按整数手和价格档计算,并把佣金放在同一个预算约束内。佣金比例和最低收费应填自己的券商参数,不能把一个示例当作统一报价。
再看一组原创虚拟数字:价格1元,预算200元,无滑点。如果不计费用,可以买200份;若假设每笔最低佣金5元,两手需要205元,超过预算。此时只能买一手,支出100元成交额和5元佣金,剩95元现金。投入不足一手时保留现金,不借钱补足。

计算结果也要独立复核
每天检查“现金+持仓市值+应收红利=总资产”,再核对资金来源、佣金支出、分红与持仓资格。收益率的分母应与预算定义一致;每月外部入金不能被当作投资收益,账户回撤也应剔除追加本金。期末仍持有的份额,应说明是否扣除了卖出费用。
除了检查总收益,还应挑出登记日买入、派息前结束、金额不足一手等边界情况。独立复核最好使用另一份计算实现,而不是用同一段代码再次运行后互相比较。多起点研究应纳入所有完整区间,同时说明相邻窗口大量重叠,不能把历史亏损窗口占比当作未来概率。
最后分别报告三种结论:哪些来源事实已经找到公告或其他发布渠道佐证,哪些计算通过独立核对,哪些成交条件仍是假设。这样一份结果才方便后来的人重算、修正和使用。