关于 backtest-expert
backtest-expert 是面向系统化交易策略开发者的回测评估技能,强调通过压力测试、执行成本和样本外验证检验策略稳健性,并提供结构化评估脚本。
主要功能
- 01将策略假设转为明确规则
- 02测试参数敏感性与市场阶段
- 03纳入滑点、佣金及成交摩擦
- 04进行滚动样本外验证
- 05脚本生成量化评估报告
适用场景
- 01验证策略能否承受悲观假设
- 02排查过拟合和前视偏差
- 03比较参数变化下的表现稳定性
- 04评估回测结果是否适合实盘
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tradermonty/ claude-trading-skills --skill backtest-expert安装后在 Claude Code 中输入/backtest-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
requirements.txtreferences/failed_tests.mdmethodology.mdscripts/evaluate_backtest.pyscripts/tests/conftest.pytest_evaluate_backtest.py详细介绍
回测专家
基于专业方法论的系统化交易策略回测方法,优先考虑稳健性,而非乐观结果。
核心理念
目标:寻找“最不容易失效”的策略,而非纸面上“利润最高”的策略。
原则:加入摩擦因素,对假设进行压力测试,观察哪些策略能够经受考验。如果策略在悲观条件下依然稳健,那么它更有可能在实盘交易中奏效。
何时使用此技能
在以下情况下使用此技能:
- 开发或验证系统化交易策略
- 评估某个交易想法是否足够稳健,可以在实盘中实施
- 排查回测可能产生误导的原因
- 学习正确的回测方法
- 避免常见陷阱(曲线拟合、前视偏差、生存者偏差)
- 评估参数敏感性和对市场环境的依赖性
- 对滑点和执行成本设定切合实际的预期
前置条件
- 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 个最小跳动单位买入,以买价-1 个最小跳动单位卖出)
- 加入切合实际的订单拒绝情形
- 使用悲观的佣金结构进行测试
时间稳健性:
- 按年份分析表现
- 要求多数年份的期望收益为正
- 确保策略不依赖 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 个维度评分(样本量、期望值、风险管理、稳健性、执行真实性)。请以机器可读的 decision 和 blocking_reasons 为准。0–100 的 quality_score 仅供诊断:即使分数很高,也不能推翻非正期望值(但交易次数少于 30 时,会优先得到 NOT_EVALUABLE)、50% 或更高的回撤、用户提供的更严格回撤限制、交易次数不足、缺少滑点/摩擦验证、测试周期短于 5 年,或结果看起来好得令人难以置信(胜率高于 90%,且最大回撤低于 5%,原因是 too_good,采用前需要检查前视偏差和数据)。verdict 仍是保守的 Deploy/Refine/Abandon 兼容字段,其结果不会优于基于评分得出的结论。使用 --max-acceptable-drawdown-pct 设置低于 50% 硬性上限的个人限制;等于个人限制时允许通过。输入无效时以状态码 1 退出,且不生成报告。
关键测试原则
严格考验策略
在各个环节增加摩擦:
- 佣金高于实际水平
- 滑点设为典型值的 1.5–2 倍
- 最坏情况成交
- 订单被拒
- 部分成交
理由:能经受悲观假设考验的策略,在实盘交易中往往表现更好。
寻找平台区间,而非峰值
寻找表现稳定的参数范围,而不是会造成表现飙升的最优值。
好:止损设在 1.5% 到 3.0% 之间的任意值时,策略都能盈利 差:止损必须恰好设为 2.13%,策略才有效
表现稳定意味着优势真实存在;最优值范围狭窄则可能表明过度拟合。
测试所有情况,而非只挑选有利案例
错误做法:研究那些表现出色的“市场领先者” 正确做法:测试所有符合标准的股票,包括表现不佳的股票
选择性案例会造成幸存者偏差,并高估策略质量。
将想法生成与验证分开
直觉:可用于生成假设 验证:必须完全以数据为依据
切勿让对某个想法的执着影响对测试结果的解读。
常见失败模式
及早识别这些模式,以节省时间:
- 参数敏感:只有使用精确的参数值才有效
- 仅适用于特定市场环境:某些年份表现出色,其他年份则很糟糕
- 滑点敏感:加入符合实际的成本后便不再盈利
- 样本过少:交易次数不足,无法获得统计置信度
- 前视偏差:结果“好得令人难以置信”
- 过度优化:参数众多,样本外表现不佳
详细示例和诊断框架请参见 references/failed_tests.md。
输出
reports/backtest_eval_<timestamp>.json— 结构化评估,包含各维度评分、风险标记、decision、blocking_reasons和结论reports/backtest_eval_<timestamp>.md— 易读报告,包含维度表、关键指标和风险标记详情
关键 JSON 字段:
decision:权威结果,可以是DEPLOY、REFINE、ABANDON、REJECT、RISK_LIMIT_EXCEEDED、VALIDATION_REQUIRED或NOT_EVALUABLE。门控优先级:NOT_EVALUABLE(交易少于 30 笔或盈亏因子溢出),然后是REJECT,接着是RISK_LIMIT_EXCEEDED,再然后是VALIDATION_REQUIRED(未进行滑点测试、测试年限不足 5 年,或too_good)。只有在没有门控阻止时,评分才会得出DEPLOY/REFINE/ABANDON。blocking_reasons:所有触发的门控 ID(profit_factor_overflow、small_sample、negative_expectancy、zero_expectancy、excessive_drawdown、risk_limit_exceeded、no_slippage_test、short_test_period、too_good);即使更高优先级的门控决定了结果,也会保留所有 ID。profit_factor:可能为null。profit_factor_status说明原因:FINITE(数值)、NO_LOSSES(毛利润为正且没有毛损失)、UNDEFINED_ZERO_GROSS(既没有毛利润也没有毛损失)或OVERFLOW(存在非零损失,但比率溢出)。
资源
方法论参考
文件:references/methodology.md
阅读时机:需要了解特定测试技术的详细指导时。
内容:
- 压力测试方法
- 参数敏感性分析
- 滑点和摩擦成本建模
- 样本量要求
- 市场状态分类
- 常见偏差和陷阱(幸存者偏差、前视偏差、曲线拟合等)
失败测试参考
文件:references/failed_tests.md
阅读时机:策略未通过测试时,或想从过往错误中吸取教训时。
内容:
- 失败的价值
- 常见失败模式及示例
- 案例研究文档框架
- 回测评估风险标记清单
重要提醒
时间分配:20% 的时间用于提出想法,80% 的时间用于尝试推翻这些想法。
无上下文要求:如果策略必须依赖“完美上下文”才能奏效,就不够稳健,不适合系统化交易。
风险标记:如果回测结果好得令人难以置信(胜率 >90%、回撤极小、择时完美),请仔细审查是否存在前视偏差或数据问题。
工具限制:了解回测平台的特性(插值方法、对低流动性的处理、数据对齐问题)。
统计显著性:微小优势需要大量样本才能得到验证。每笔交易有 5% 的优势,需要 100 笔以上交易才能将其与运气区分开来。
自主判断与系统化交易的差异
此技能侧重于系统化/量化回测,其中:
- 所有规则都预先编写为代码
- 执行时不依赖自主判断或“感觉”
- 测试覆盖所有历史案例,而非精选案例
- 有意剔除上下文(新闻、宏观因素)
自主判断型交易者的研究方式有所不同——此技能可能不适用于需要主观判断的策略。