---
title: "回测详解"
slug: backtesting-explained
lang: zh
canonical: https://pulsar.ink/kb/backtesting-explained.html
summary: 回测对历史数据运行策略，以估算其过去的表现。本文介绍前推验证、前瞻偏差、幸存者偏差、真实滑点，以及加密货币策略回测系统性高估结果的具体原因。
reading_time_minutes: 7
audience: 决定是否将策略部署到实盘的操作者
last_updated: 2026-04-24
wikilinks:
  - what-is-automated-crypto-trading
  - grid-trading-strategy
  - dca-bot-strategy
  - arbitrage-bots
  - signal-trading-bots
  - risk-management-automated-trading
---

# 回测详解

**回测**是在历史数据上模拟策略。目标是判断策略是否有足够的优势值得实盘运行。回测输出是盈亏曲线、回撤特征和交易统计——操作者据此决定部署、重新调参或放弃。

回测的问题不在于它们撒谎。而在于它们讲述一种非常特定的真实——"策略在**这段**历史上**这些**假设下的表现如何"——而操作者一贯地将这种真实误解为预测。

## 诚实的回测报告什么

| 指标                    | 告诉您什么                                | 不告诉您什么                              |
|-------------------------|-------------------------------------------|-------------------------------------------|
| 总收益                  | 样本期内的累计盈亏                        | 路径的波动程度                            |
| 夏普比率                | 每单位波动率的收益                        | 尾部风险；下行与上行波动率                |
| 最大回撤                | 样本内最差峰谷回撤                        | 样本外可能的回撤                          |
| 胜率                    | 盈利交易占比                              | 盈亏规模分布                              |
| 盈利因子                | Sum(盈利) / Sum(亏损)                     | 该比率随时间的稳定性                      |
| 持仓时间                | 资金处于工作状态的时间百分比              | 闲置资金的机会成本                        |
| 交易次数                | 结果的样本量                              | 所有成交是否真实                          |
| 滑点 + 手续费核算       | 扣除成本后的盈利能力                      | 在该订单规模下真实盘口深度                |

如果回测不报告所有这些，它是广告，不是回测。

## 击垮散户回测的四大偏差

### 1. 前瞻偏差

策略使用了决策时刻实际不可用的数据。经典案例是在当前 K 线收盘时计算指标，然后在同一根 K 线内交易。还常见：针对用今天存在的代币知识选定的品种池进行再平衡（由此产生"幸存者偏差"）。

修正方法：时间 `t` 的决策必须仅使用 `t` 时刻可用的数据。通过将所有信号至少移位一根 K 线，并在**下一根** K 线开盘时交易而非当前 K 线收盘时来强制执行。

### 2. 幸存者偏差

您测试的品种池是**今天**存在的品种池。每个被下架的代币、每个倒闭的交易所、每个失败的协议都不在其中。一个在今天品种池上"有效"的均值回归策略，若面对五年前存在的品种池，早就被摧毁了，因为失败者已经消失。

修正方法：针对**时间点品种池**进行测试——每个日期可交易的资产集合——对于加密货币来说成本高昂，对于长尾代币几乎不可能。次优修正是将回测范围限制在流动性前 N 名资产，承认偏差的存在，并相应调整仓位。

### 3. 样本期偏差

回测窗口是市场历史的一个切片，您选择的切片对结果的影响超过策略本身。2023-01 至 2024-01 的 BTC/USDT 网格回测看起来完美（横盘）。2024-02 至 2025-04 的同一网格回测看起来很糟糕（趋势）。两个窗口都没错；两个都不完整。

修正方法：报告多个**样本外窗口**的结果，包括完整的牛熊牛周期。报告分布，而非单一数字。

### 4. 滑点低估

回测以历史中间价成交。实盘市场以价差对冲您，当盘口薄或波动快时甚至更差。对于每天执行数百笔交易的网格机器人，5 个基点的滑点误差会复利成差异巨大的最终资金。

修正方法：模拟**真实成交**：

- 吃单订单以该时刻请求规模下最差的可见价格成交。
- 挂单订单仅在价格**穿越**挂单价位时成交，而非仅触碰。
- 在高波动 K 线期间加宽价差模型；在低流动性时段，将订单规模限制在 K 线成交量的合理比例内。

没有公开的回测引擎能完美处理所有这些。务实的方法是运行回测，然后对结果打折扣——预期收益降低 20–40%，回撤提高 30–50%——以得到更接近实盘策略实际表现的数字。

## 前推验证

诚实替代"在所有历史上训练，声称它有效"的方法是**前推验证**：

1. 选择样本内窗口（如 2021-01 至 2022-01）并在其上调参。
2. 选择样本外窗口（2022-01 至 2022-04），对调参后的策略进行测试，**不做进一步调参**。
3. 滑动窗口向前（2021-04 至 2022-04 样本内，2022-04 至 2022-07 样本外）并重复。
4. 拼接所有样本外盈亏。该拼接结果是策略实际可期待产生的结果。

前推验证通常使报告收益比单窗口拟合低 30–60%。不运行前推验证的操作者得到的是过拟合的数字。

## 加密货币特有的陷阱

- **交易所迁移。** 2019 年起的 BTC/USDT 在交易所 A 的回测，可能拼接了已不存在的交易所数据。流动性和价差不可迁移。
- **稳定币脱锚。** 使用 USDT 作为计价货币的策略假设每根 K 线 USDT = $1。这在较长窗口内曾是错误的（2022 年 5 月、2023 年 3 月），而回测通常不对此修正。
- **代币稀释 / 空投。** 代币供给的持续变化在长周期内悄然改变"价格"。
- **手续费计划变更。** 交易所每季度更改挂单/吃单手续费。使用 2026 年手续费的 2020 年回测是乐观的。
- **期货资金费率基线。** 随着流动性成熟，资金费率自 2021 年以来呈下降趋势；2018 年的资金套利回测不是 2026 年的预测。

## 各策略专项说明

- [[grid-trading-strategy]] — 单区间网格回测总是看起来完美。在 2022 年熊市和 2024 年 Q1 突破行情中重新回测同一网格；数字差异很大。
- [[dca-bot-strategy]] — DCA 回测最诚实，但路径依赖于开始日期。多起始日期回测是解决方案。
- [[arbitrage-bots]] — 回测忽略交易对手风险和转账延迟，而这两者是最大的实盘亏损来源。
- [[signal-trading-bots]] — 信号提供者的回测几乎总是受幸存者偏差影响；使用操作者自己的执行策略重新运行。

更广泛的纪律在 [[risk-management-automated-trading]] 中有所介绍：无论回测精度多高，都无法消除实盘账户上限的必要性，因为回测无法模拟的唯一变量是操作者本身。

## 本知识库延伸阅读

- [[what-is-automated-crypto-trading]] — 更广泛的类别。
- [[risk-management-automated-trading]] — 无论回测怎么说，都能限制任何策略下行的上限。
