mcpField
B
backtest-expert

backtest-expert

github.com/wind-alice数据与数据库146820 次安装2 周前更新
代码仓库

关于 backtest-expert

面向系统化交易者的策略回测 Skill,强调通过压力测试验证稳健性,而非追求纸面收益最大化。它提供评估脚本,对样本量、期望值、风险管理、稳健性和执行现实度评分并给出结论。

主要功能

  1. 01制定无歧义的策略规则
  2. 02测试参数敏感性与市场阶段
  3. 03纳入滑点、佣金和成交摩擦
  4. 04进行样本外与滚动验证
  5. 05脚本评估回测并标记风险

适用场景

  1. 01验证策略是否适合实盘
  2. 02排查过拟合和前视偏差
  3. 03测试成本与成交假设的影响
  4. 04根据回测结果决定修订或放弃

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wind-alice/alicemarket --skill backtest-expert

安装后在 Claude Code 中输入/backtest-expert确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
failed_tests.md
methodology.md
scripts/
evaluate_backtest.py
scripts/tests/
conftest.py
test_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. 在训练期内进行优化(例如第 1-3 年)
  2. 在验证期内测试(第 4 年)
  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% 时,策略才有效

表现稳定意味着存在真实的策略优势;最优值范围狭窄则可能表明存在曲线拟合。

测试所有案例,而非只挑有利示例

错误做法:只研究表现出色的“市场赢家” 正确做法:测试所有符合条件的股票,包括表现不佳的股票

选择性示例会造成幸存者偏差,并高估策略质量。

将构思与验证分开

直觉:适用于提出假设 验证:必须完全基于数据

切勿让自己对某个想法的执着影响对测试结果的解读。

常见失败模式

尽早识别这些模式,以节省时间:

  1. 参数敏感性:只有使用精确的参数值才有效
  2. 依赖特定市场状态:某些年份表现出色,其他年份却表现糟糕
  3. 对滑点敏感:加入符合实际的成本后便不再盈利
  4. 样本量过小:交易次数过少,无法获得统计置信度
  5. 前视偏差:结果“好得令人难以置信”
  6. 过度优化:参数众多,样本外表现不佳

详见 references/failed_tests.md,了解详细示例和诊断框架。

输出

  • reports/backtest_eval_<timestamp>.json — 结构化评估,包含各维度评分、危险信号和结论
  • reports/backtest_eval_<timestamp>.md — 易于阅读的报告,包含维度表格、关键指标和危险信号详情

资源

方法参考

文件:references/methodology.md

适合阅读的情况:需要了解特定测试技术的详细指导时。

内容:

  • 压力测试方法
  • 参数敏感性分析
  • 滑点和摩擦建模
  • 样本量要求
  • 市场状态分类
  • 常见偏差和陷阱(幸存者偏差、前视偏差、曲线拟合等)
失败测试参考

文件:references/failed_tests.md

适合阅读的情况:策略未通过测试,或希望从过去的错误中吸取经验时。

内容:

  • 失败的价值
  • 常见失败模式及示例
  • 案例研究文档框架
  • 回测评估危险信号清单

关键提醒

时间分配:20% 的时间用于构思,80% 的时间用于尝试推翻这些想法。

无上下文要求:如果某种策略必须依赖“完美上下文”才能奏效,那么它还不够稳健,不适合系统化交易。

危险信号:如果回测结果好得不真实(胜率 >90%、回撤极小、时机把握完美),请仔细检查是否存在前视偏差或数据问题。

工具限制:了解回测平台的特性(插值方法、对低流动性的处理方式、数据对齐问题)。

统计显著性:小幅优势需要大量样本才能得到证明。每笔交易 5% 的优势需要 100 笔以上的交易,才能与运气区分开来。

主观交易与系统化交易的区别

本技能侧重于系统化/量化回测,其中:

  • 所有规则都预先编码
  • 执行时不掺杂主观判断或“感觉”
  • 对所有历史案例进行测试,而不是挑选个别案例
  • 刻意剔除上下文(新闻、宏观因素)

主观交易者的研究方式不同——本技能可能不适用于需要主观判断的交易设置。

评论

支持 Markdown