597 / 736BT

Backtesting

策略历史回测

Backtesting 在历史数据上模拟预先说明的规则。结果取决于信息何时可用、数据选择、成交模型和成本。历史利润不等于实际执行过的交易,也不是未来收益的保证。

Backtesting 是在明确指定的数据、时间顺序和执行假设下,对交易或决策规则进行历史模拟。它可以检验规则在过去样本中的表现,但结果的说明力取决于整个测试的设计。

Backtesting 在历史数据上重演规则,并计算在所选假设下这些规则会产生什么结果。Bailey 及其合著者将其描述为算法策略的历史模拟,同时提醒存在假阳性发现的风险。我们的编辑界定是:结果属于特定版本的规则、数据和执行模型。它不能证明有人实际完成过这些交易。可复现的计算可以发现错误或不合适的想法,但本身不能把过去变成可靠预测。 [1]

QuantConnect 描述了一种偏差:模拟使用了未来信息,例如尚未公布的财务数据或这些数据后来的修订。我们对时间可用性的约定要求为每项输入注明其可用时点,而不只是它所对应期间的日期。来自已收盘蜡烛图的信号,在没有额外假设时,不能以已无法利用的价格获得交易。在我们的示例中,前面的收盘价只用于下一期间,模型明确规定按该期间的开盘价成交。 [2]

QuantConnect 提醒注意只测试存续至期末的证券,以及把今天的指数成分回用于过去的问题。我们提出的更一般问题是:历史数据集是否也保留了当时可用、后来消失的工具。缺失数据、方法变更和市场选择都需要记录。对于比特币模拟,不能自动把某一服务的报价视为另一服务上可实现的价格。数据洁净意味着修订可追溯,而不是删除不利结果。 [2]

QuantConnect 文档将信号和订单与决定成交价格及数量的模型分开。它也指出实际交易中的部分成交,与预置模型中完全成交假设之间的差异。我们的要求是说明订单何时可以执行、流动性不足时如何处理,以及如何处理过时价格。历史数据触及某个价位,本身并不能证明任意规模的订单都有可用交易对手。成交模型的结果仍然是模拟假设。 [3]

QuantConnect 将 Slippage 描述为预期成交价与实际成交价之间的差异,并说明延迟、连接和市场条件的影响;偏差既可能有利,也可能不利。我们的成本核查将手续费、成交价格以及可能存在的其他持有或融资成本分开。已经计入成交价格的成本不能再次扣除。零值是一个具体的模型假设,并不是市场没有成本的证据。检验更高成本下的敏感性,有助于判断微小的历史利润是否依赖乐观设置。 [4]

TimeSeriesSplit 文档解释了按时间顺序划分数据,以免模型在未来数据上训练、在过去数据上评估。我们的方法要求是在查看结果之前,先确定规则设计期间以及后续验证期间。如果验证失败后又根据验证期间调整规则,这个期间就已经影响了开发。仅按时间顺序划分,并不能解决预处理中的信息泄漏、目标重叠或反复选择变体的问题。流程和数据边界都必须说明。 [5]

Bailey 及其合著者指出,在同一批数据上反复寻找最佳配置,会增加假阳性发现和拟合过去噪声的风险。我们的报告规则是披露尝试历史,而不只是获胜曲线。这包括参数、期间和工具选择的变更。经过多次尝试后选出的结果,与预先确定且未修改的规则,并不具有相同的说明力。我们的简单示例既没有执行他们估计过拟合概率的方法,也没有用一次数据划分来替代该方法。 [1]

NFA 提醒,假设结果并不反映实际交易,可能利用事后视角,并且不能完善地模拟流动性、Slippage 或真实亏损时的行为。因此,我们的报告应保留数据和代码版本、规则、成交假设、计入的成本以及完整的模拟交易列表。总收益需要风险背景和相同条件下的比较;一张精选的漂亮图表并不足够。即使历史测试的实现毫无错误,也不能保证在未来市场中可执行或获得收益。 [6]

示例示例 · BT

上一期间的信号,下一期间的成交

我们自拟的虚构示例使用四个时长相同的期间 A、B、C 和 D。初始现金为 1000 USD,没有未平仓头寸、债务、存款或提款。期间 A 之前的两个收盘价为 [100, 100] USD/BTC。期间 A 至 D 的开盘价为 [101, 103, 102, 105] USD/BTC,收盘价为 [102, 101, 104, 103] USD/BTC。预先确定的规则只在最近一个已完成期间的收盘价高于前一个已完成期间的收盘价时,于本期开始买入 1 BTC;并在同一期结束时全部卖出。因此,信号为 [0, 1, 0, 1],其中 1 表示交易,0 表示不操作。模型假设严格按上述开盘价和收盘价完全成交,价差和 Slippage 为零,除每次买入或卖出收取 0.1 USD 手续费外,没有其他成本。在 B 中,以 103 USD 买入、101 USD 卖出;在 D 中,分别为 105 USD 和 103 USD。各期间的毛结果为 [0, -2, 0, -2] USD。四次已执行的买入或卖出操作合计收费 0.4 USD,净结果为 [0, -2.2, 0, -2.2] USD。毛结果总和为 -4 USD,净结果总和为 -4.4 USD,最终现金为 995.6 USD。图表显示各期间的净贡献,而不是账户余额或概率。这是可以手工核验的时间顺序与记账模拟,不是真实市场数据、优化过程或未来表现的证据。

要获得更完整的理解,请将本词条与以下词条结合阅读: Trading Plan, Trading Journal, Slippage, Overfitting, Walk-forward Analysis. 反向关联还来自: Technical analysis, OHLCV, Timeframe, Candlestick chart.

01盈利的历史回测能证明策略未来会赚钱吗?

不能。结果可能取决于特定数据、成本、成交模型或最佳变体的选择。需要核查时间顺序是否正确、各项假设和选择流程;即便如此,也不能保证未来收益。

02只从最终利润中扣除手续费就够了吗?

只有在这种方式与模型完全一致,且不影响可用资本和后续决策时才可以。通常需要在相应事件发生时计入成本,区分成交价格与手续费,并避免重复扣除。

DOC · 001Bailey et al. — The Probability of Backtest Overfitting一手来源 DOC · 002QuantConnect — Research Guide文档 DOC · 003QuantConnect — Trade Fills: Key Concepts文档 DOC · 004QuantConnect — Slippage: Key Concepts文档 DOC · 005scikit-learn — TimeSeriesSplit文档 DOC · 006NFA — Use of Promotional Material Containing Hypothetical Performance Results文档
修订日期: 来源优先 · 非投资建议