交易策略回测方法论
发布时间
Jul 13, 2026
Stingray 回测只回答一个边界清晰的问题:一条具体、类型化的市场规则,在明确的历史区间内表现如何? 结果是一份用于评估信号的历史重放 artifact,而不是预测,也不是完整的投资组合模拟。
本文说明重放开始前必须固定哪些内容、历史数据如何被评估、触发与前向收益如何计数,以及哪些限制必须持续可见。当前不少示例来自 crypto 市场,因为交易场所、资金费率、订单簿和链上数据更容易观察。随着可靠数据与结算活动迁移到可编程 rails,同一套方法也适用于其他市场。
方法概览
| 问题 | 方法 | Artifact 中的证据 |
|---|---|---|
| 测试了什么? | 在重放前固定类型化规则、市场、数据源、时间粒度、区间和 cooldown。 | 规则定义与重放元数据 |
| 数据是否可用? | 解析每个数据源、保留其时间戳,并披露缺口或被裁剪的区间。 | 覆盖说明与数据源元数据 |
| 规则何时触发? | 按时间顺序评估历史样本,并区分原始为真状态、独立事件和 cooldown 后的通知。 | 触发集合、计数与事件行 |
| 触发后发生了什么? | 在每个有效触发后,按声明的时间跨度测量价格变化。 | 带样本量的前向收益 |
| 结果能否审计? | 保持 artifact 可复现,并公开假设、不支持的输入和缺失观测。 | 语义版本、诊断信息与限制 |
| 审核后做什么? | 在任何执行决策前,拒绝、调整或监控规则。 | 通知、preview-confirm 与 opt-in activation 路径 |
1. 在重放前固定规则
有用的回测始于一条可以检查的规则。Stingray 会先把自然语言 thesis 解析成类型化定义,再开始历史评估。定义应明确:
- 市场、symbol,以及交易场所或数据源
- 每个条件和阈值
- 评估 interval 与历史区间
- cooldown 或去重策略
- 用于解释结果的方向与前向收益时间跨度
重放不能为了得到更好看的结果而悄悄修改规则。如果请求的数据源不可用、时间参数与历史粒度不兼容,或定义无法被忠实评估,正确的结果应是明确说明限制或直接拒绝执行。
这一分离很重要。看完结果后再改阈值,就已经产生了一条新规则。修改后的规则应生成新的重放,而不是覆盖上一条规则的证据。
2. 正确解析数据源与时间
每个条件都需要可安全重放的数据源 contract。价格、资金费率、open interest、事件和新闻拥有不同的时钟与覆盖范围。重放会记录所用数据源,并按时间戳顺序评估观测值。
对于事件或新闻,关键时间是信息何时对系统可用,而不是事后附加到事件上的更早时间。这样可以避免在历史测试中提前使用当时还无法观察到的信息。
Artifact 应披露:
- 请求的日期区间与实际有效区间
- 原生或选定的 interval
- 内部缺失区段与被裁剪的边界
- 哪些数据源经过采样、聚合或无法获取
- 可用历史是否足以评估该规则
漂亮的汇总数字无法弥补不完整的数据覆盖。如果缺口把重放分成多个有效区段,这些边界应保留下来,而不是用虚构观测值填充。
3. 计数前先完成指标 warmup
指标和有状态条件需要足够历史,数值才有意义。Moving average、RSI、sequence 或 cross 条件都不能从数据集第一行开始公平评估。
当数据源和规则需要时,Stingray 会在可见评估区间前使用 warmup 观测。Warmup 数据用于初始化指标和边沿状态,但 warmup 期间的触发不会被计入用户可见证据。Artifact 会记录 warmup 边界,避免第一个可见触发只是由未初始化指标产生。
评估粒度也必须适配规则。五分钟条件无法从小时级样本中被诚实还原。当历史 interval 粗于规则中最小的时间参数时,重放应明确失败,而不是制造虚假的精度。
4. 区分为真的样本与可行动触发
一个条件可能在连续多个样本中一直为真。把每一行为真的样本都当成独立信号,会夸大证据,也可能让一次市场事件支配整个结果。
当前重放 artifact 区分三种视图:
- Raw: 整条规则为真的每个已评估样本,仅用于诊断。
- Primary: 整条规则从 false 转为 true 的时点,表示进入该条件的独立事件。
- After cooldown: 应用通知 cooldown 后仍保留的 primary 触发,最接近 live alert 的行为。
Cooldown 是运营控制,不代表被抑制的触发在经济上不重要。同时展示三种视图,可以看出规则是在发现独立事件,还是只是在很长时间内保持为真。
对于只展示 raw 与 cooldown-filtered 两组结果的旧版 signal replay,解释原则相同:除非规则另有明确事件定义,否则聚集在一起的多行应视作同一次市场事件。
5. 测量前向收益,但不要把它包装成 P&L
前向收益描述一次有效触发后,在 1 小时、4 小时或 24 小时等声明时间跨度上的价格变化百分比。它回答的是:“这个条件出现后,价格通常发生了什么?”
除非 artifact 明确建模,否则它并不构成完整交易策略。标准 signal replay 不会默认包含:
- 实际成交的入场与退出
- 仓位规模或杠杆
- 手续费、spread、slippage 或 market impact
- 止损或止盈行为
- 投资组合约束与资金分配
每个汇总数字都应显示背后的观测数量。独立事件应获得公平权重,不能让一长串几乎相同的样本压过其他所有事件。平均值、中位数、正收益占比和分布形状结合起来,比单一 headline statistic 更有用。
只有在触发已经确定之后,系统才会读取未来数据。前向数据只是结果测量,绝不会参与历史触发决策。
6. 保持同一份重放 artifact 内部一致
一份重放应能由其已存储输入复现:规则版本、数据源 contract、市场身份、interval、区间、cooldown 和重放语义版本。
在可能的情况下,切换图表区间应读取同一 artifact 的另一个窗口,而不是悄悄再次执行规则并产生不同计数。图表、触发表、汇总指标和选中事件详情,都应使用同一个触发集合与可见窗口。
当数据源历史或重放语义发生实质变化时,结果应获得新版本。可复现并不意味着所有未来数据供应商都会返回完全相同的历史,而是指某份 artifact 的假设足够明确,可以被审计。
7. 把结果当作证据,而不是裁决
应按以下顺序阅读重放:
- 确认测试的规则就是你原本想测试的规则。
- 先检查数据覆盖、interval 和 warmup,再看收益。
- 比较 raw、primary 和 after-cooldown 计数。
- 检查聚集情况与具体触发行。
- 结合样本量和市场 regime 阅读前向收益。
- 把真正修改后的 thesis 作为新规则重新测试。
值得追问的问题包括:
- 大多数触发是否集中在同一个波动或流动性 regime?
- 结果是否被单一事件或很小样本主导?
- 所选时间跨度是否与 thesis 匹配?
- 更换 venue、数据源或 interval 是否会改变解释?
- 规则是在查看区间前选定,还是在同一区间上反复调参?
在同一历史区间上持续优化规则,会提高 overfitting 风险。即使结果看起来有希望,也应在更晚或独立的区间上检查,再把它当作监控证据。
8. 回测后继续遵循 trust ladder
回测通常产生三种决策之一:
- 拒绝: 规则噪声过高、样本太少、过于脆弱、缺乏支持,或依赖单一 regime。
- 调整: 修改一个明确假设,并生成新的重放。
- 监控: 把类型化规则作为 live alert 运行,并将真实行为与历史 artifact 对照。
执行仍然是独立决策。Stingray 的 trust ladder 是先通知,在支持的场景使用 preview-confirm,只有用户明确启用时才 opt in execution。正的历史平均值不能跳过这一级级控制。
已知限制
- 历史表现不能预测未来结果。
- 可用历史会随数据源、venue、asset 和事件类型而变化。
- Candle 或采样数据无法证明 intrabar 事件的精确先后顺序。
- 前向收益衡量信号后的结果,不等于可实现的交易收益。
- 回测可能忽略结构变化、退市、流动性限制和未来市场规则。
- 在同一区间做多次测试,会提高偶然找到“好结果”的概率。
- 不支持或覆盖不足的输入应被拒绝,而不是静默近似。
发布检查清单
在 Stingray 重放被用于指南、示例或 benchmark 前,发布内容应包含:
- 精确的 thesis 或 prompt
- 类型化规则,或忠实且可读的摘要
- 市场、venue、数据源、interval 与日期区间
- 数据覆盖与 warmup 说明
- 可用时提供 raw、primary 和 after-cooldown 计数
- 前向收益时间跨度与样本量
- 明确排除 fees、slippage、position sizing 和 execution
- 声明结果只是历史证据,不是交易建议或业绩承诺
字段级阅读方法请参阅如何阅读回测卡片。已发布的完整流程请参阅策略示例。从 thesis 到监控的完整工作流请参阅 Stingray 如何工作。