回测专家 是做什么的?
基于专业方法论的交易策略系统性回测,优先考虑稳健性而非乐观结果。
核心理念
目标:寻找“最不‘失灵’”的策略,而非纸上“最赚钱”的策略。
原则:增加摩擦,压力测试假设,看看什么能幸存下来。如果一个策略在悲观条件下仍能成立,它更有可能在实盘交易中有效。
何时使用本技能
在以下情况下使用本技能:
- 开发或验证系统性交易策略
- 评估一个交易想法是否足够稳健,可以用于实盘
- 诊断为何回测结果可能具有误导性
- 学习正确的回测方法论
- 避免常见陷阱(曲线拟合、前瞻偏差、存活者偏差)
- 评估参数敏感性和市场体制依赖性
- 对滑点和执行成本设定现实的预期
先决条件
- Python 3.9+(用于评估脚本)
- 无需 API 密钥
- 无外部数据依赖——指标由用户提供
工作流程
1. 陈述假设
用一句话定义你的优势。
示例:“盈利后跳空高开>3%、并在第一小时内回撤至前一日收盘价的股票提供了均值回归的机会。”
如果你无法清晰表达你的优势,就不要继续测试。
2. 用零主观判断编码规则
以完全的明确性进行定义:
- 入场:确切的条件、时机、价格类型
- 出场:止损、止盈、基于时间的出场
- 仓位规模:固定金额、投资组合百分比、波动率调整
- 过滤器:市值、成交量、行业、波动率条件
- 标的选择池:哪些资产符合资格
关键:不允许任何主观判断。每一个决策都必须基于规则且无歧义。
3. 运行初始回测
在以下条件下进行测试:
- 至少5年(最好10年以上)
- 多个市场体制(牛市、熊市、高/低波动率)
- 现实成本:佣金 + 保守的滑点
检查初步结果的基本可行性。如果根本上有缺陷,则迭代假设。
4. 压力测试策略
80%的测试时间应花在这里。
参数敏感性:
- 以基线值的 50%、75%、100%、125%、150% 测试止损
- 以基线值的 80%、90%、100%、110%、120% 测试止盈
- 将入场/出场时间变动 ±15-30 分钟
- 寻找稳定表现的“平台区”,而非狭窄的峰值
执行摩擦:
- 将滑点增加到典型估计值的 1.5-2 倍
- 模拟最差成交情况(以卖一价+1个tick买入,以买一价-1个tick卖出)
- 添加现实的订单拒绝场景
- 使用悲观的佣金结构进行测试
时间稳健性:
- 逐年分析表现
- 要求大部分年份具有正期望值
- 确保策略不依赖1-2个异常时期
- 在不通的市场体制下分别测试
样本量:
- 绝对最低值:30笔交易
- 推荐值:100笔以上交易
- 高置信度:200笔以上交易
5. 样本外验证
滚动向前分析:
- 在训练期(例如,第1-3年)上进行优化
- 在验证期(第4年)上进行测试
- 向前滚动并重复
- 比较样本内与样本外的表现
警示信号:
- 样本外表现低于样本内表现的 50%
- 需要频繁重新优化参数
- 不同时期之间参数发生剧烈变化
6. 评估结果
需要回答的问题:
- 优势在悲观假设下是否依然存在?
- 表现是否在不同参数变化下保持稳定?
- 策略是否在多个市场体制下都有效?
- 样本量是否足以获得统计置信度?
- 结果是否现实,而非“好得不真实”?
决策标准:
- ✅ 部署:通过所有压力测试,表现可接受
- 🔄 优化:核心逻辑合理,但需要调整参数
- ❌ 放弃:压力测试失败或依赖脆弱的假设
使用评估脚本进行结构化的定量评估:
python3 skills/backtest-expert/scripts/evaluate_backtest.py \
--total-trades 150 \
--win-rate 62 \
--avg-win-pct 1.8 \
--avg-loss-pct 1.2 \
--max-drawdown-pct 15 \
--years-tested 8 \
--num-parameters 3 \
--slippage-tested \
--output-dir reports/
该脚本在5个维度(样本量、期望值、风险管理、稳健性、执行现实性)上进行评分,检测红旗指标,并输出“部署/优化/放弃”的判定结果。
关键测试原则
惩罚策略
在各个方面增加摩擦:
- 佣金高于实际情况
- 滑点为典型值的 1.5-2 倍
- 最差成交情况
- 订单拒绝
- 部分成交
理由:在悲观假设下幸存下来的策略通常在实际交易中表现更优。
寻找平台区,而非峰值
寻找表现稳定的参数范围,而非创造表现尖峰的优化值。
良好:当止损在 1.5% 到 3.0% 之间时,策略均能盈利 糟糕:策略仅在止损恰好为 2.13% 时才有效
稳定的表现表明是真正的优势;狭窄的最优点暗示曲线拟合。
测试所有情况,而非精心挑选的例子
错误方法:研究挑选出来的“市场领导者” 正确方法:测试每个满足条件的股票,包括那些失败的
选择性的例子会产生存活者偏差,并高估策略质量。
将想法生成与验证分离
直觉:对于生成假设很有用 验证:必须纯粹由数据驱动
永远不要让对某个想法的偏爱影响对测试结果的解读。
常见失败模式
尽早识别这些模式以节省时间:
- 参数敏感:仅在精确的参数值下有效
- 体制特定:某些年份表现出色,其他年份则很差
- 滑点敏感:加入现实成本后变得无利可图
- 样本量小:交易数量太少,缺乏统计置信度
- 前瞻偏差:“好得不真实”的结果
- 过度优化:参数过多,样本外表现差
请参阅 references/failed_tests.md 获取详细的示例和诊断框架。
输出
reports/backtest_eval_<timestamp>.json— 包含每个维度评分、红旗指标和判定结果的结构化评估reports/backtest_eval_<timestamp>.md— 包含维度表格、关键指标和红旗指标详情的人类可读报告
资源
方法论参考
文件:references/methodology.md
何时阅读:当需要特定测试技术的详细指导时。
内容:
- 压力测试方法
- 参数敏感性分析
- 滑点和摩擦建模
- 样本量要求
- 市场体制分类
- 常见偏差和陷阱(存活者偏差、前瞻偏差、曲线拟合等)
失败测试参考
文件:references/failed_tests.md
何时阅读:当策略测试失败或从过去的错误中学习时。
内容:
- 为什么失败是有价值的
- 常见失败模式及示例
- 案例研究记录框架
- 评估回测结果的检查清单
关键提醒
时间分配:花 20% 的时间生成想法,80% 的时间试图打破它们。
无上下文要求:如果策略需要“完美的上下文”才能有效,那么它对于系统性交易来说不够稳健。
红旗指标:如果回测结果看起来“好得不真实”(胜率>90%、最大回撤极小、时机完美),请仔细审计是否存在前瞻偏差或数据问题。
工具限制:了解您所用的回测平台。