回测工具

📎 引用文件

本文引用的文件 - agent/src/tools/backtest_tool.py - agent/backtest/runner.py - agent/backtest/engines/base.py - agent/backtest/loaders/registry.py - agent/src/tools/alpha_bench_tool.py - agent/src/factors/bench_runner.py - agent/src/tools/alpha_compare_tool.py - agent/src/factors/compare_runner.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录:API与使用示例

简介

本文件系统性介绍 Vibe-Trading 的回测工具集,覆盖三大能力: - backtest_tool:策略回测、绩效分析与参数优化入口,负责校验配置、加载数据、执行信号引擎并输出指标与可视化产物。 - alpha_bench_tool:Alpha 因子基准测试,计算 IC/IR 等统计量,生成 HTML 报告,支持多市场宽基组合(CSI300、S&P500、BTC-USDT)。 - alpha_compare_tool:多策略/多 Alpha 的横向对比,按指定指标排序并给出领先者差距。

同时说明回测引擎选择机制、数据源集成方式、结果可视化功能,并提供最佳实践、性能优化建议与常见问题解决方案。

项目结构

围绕回测工具的核心路径如下: - 工具层:backtest_tool、alpha_bench_tool、alpha_compare_tool - 回测执行:runner.py 解析配置与安全校验,调用 BaseEngine 执行逐根 K 线回测 - 数据源:loaders/registry.py 提供统一注册表与市场级回退链 - 引擎层:engines/base.py 实现通用回测流程(对齐、权重优化、交易执行、指标计算) - Alpha 基准:bench_runner.py 与 compare_runner.py 完成因子 IC 计算与对比排序

graph TB subgraph "工具层" T1["backtest_tool"] T2["alpha_bench_tool"] T3["alpha_compare_tool"] end subgraph "回测执行" R["runner.py"] E["BaseEngine(base.py)"] end subgraph "数据源" L["loaders/registry.py"] end subgraph "Alpha 基准" B["bench_runner.py"] C["compare_runner.py"] end T1 --> R T2 --> B T3 --> C R --> E R --> L B --> L C --> B

图表来源 - agent/src/tools/backtest_tool.py:15-95 - agent/backtest/runner.py:1-125 - agent/backtest/engines/base.py:647-769 - agent/backtest/loaders/registry.py:158-249 - agent/src/tools/alpha_bench_tool.py:96-159 - agent/src/factors/bench_runner.py:137-209 - agent/src/tools/alpha_compare_tool.py:44-114 - agent/src/factors/compare_runner.py:88-210

章节来源 - agent/src/tools/backtest_tool.py:15-95 - agent/backtest/runner.py:1-125 - agent/backtest/loaders/registry.py:158-249

核心组件

章节来源 - agent/src/tools/backtest_tool.py:15-95 - agent/backtest/runner.py:68-163 - agent/backtest/engines/base.py:377-769 - agent/backtest/loaders/registry.py:23-155 - agent/src/tools/alpha_bench_tool.py:96-159 - agent/src/factors/bench_runner.py:137-209 - agent/src/tools/alpha_compare_tool.py:44-114 - agent/src/factors/compare_runner.py:88-210

架构总览

回测工具的整体调用链与数据流如下:

sequenceDiagram participant U as "用户/Agent" participant BT as "backtest_tool" participant RN as "runner.py" participant LG as "loaders/registry.py" participant EN as "BaseEngine(base.py)" participant SE as "SignalEngine(策略)" participant MET as "metrics/可视化" U->>BT : 传入 run_dir BT->>RN : 执行回测脚本 RN->>LG : 根据 source/auto 选择数据源 LG-->>RN : 返回 loader RN->>SE : generate(data_map) SE-->>RN : 信号序列 RN->>EN : run_backtest(config, loader, signal_engine) EN->>EN : 对齐/优化/逐根K线执行 EN->>MET : 计算指标/生成可视化 EN-->>RN : 指标与产物 RN-->>BT : 结果JSON + artifacts BT-->>U : 状态/日志/产物路径

图表来源 - agent/src/tools/backtest_tool.py:15-95 - agent/backtest/runner.py:68-163 - agent/backtest/loaders/registry.py:158-249 - agent/backtest/engines/base.py:647-769

详细组件分析

backtest_tool:策略回测入口

flowchart TD Start(["开始"]) --> CheckDir["校验 run_dir"] CheckDir --> |失败| ErrDir["返回错误"] CheckDir --> ReadCfg["读取 config.json"] ReadCfg --> ParseOk{"解析成功?"} ParseOk --> |否| ErrParse["返回解析错误"] ParseOk --> ValidateSrc["校验 source 是否在允许列表"] ValidateSrc --> |非法| ErrSrc["返回 source 错误"] ValidateSrc --> FindSE["查找 code/signal_engine.py"] FindSE --> |缺失| ErrSE["返回缺失错误"] FindSE --> Run["Runner.execute(entry_script, run_path)"] Run --> Collect["收集 artifacts"] Collect --> End(["结束"])

图表来源 - agent/src/tools/backtest_tool.py:15-95

章节来源 - agent/src/tools/backtest_tool.py:15-95

runner.py:配置校验与安全沙箱

classDiagram class BacktestConfigSchema { +codes : List[str] +start_date : str +end_date : str +source : str +interval : str +engine : str +initial_cash : float +fundamental_fields : Dict +event_feeds : List[Dict] +validate_*() }

图表来源 - agent/backtest/runner.py:68-163

章节来源 - agent/backtest/runner.py:68-163 - agent/backtest/runner.py:165-768

engines/base.py:回测引擎核心

flowchart TD A["输入: data_map, signal_map, codes"] --> Align["_align 对齐日历/价格/信号"] Align --> Opt{"是否启用优化器?"} Opt --> |是| Weight["优化目标权重"] Opt --> |否| KeepSig["直接使用信号权重"] Weight --> Exec["逐根K线执行"] KeepSig --> Exec Exec --> Metrics["计算指标/换手/统计"] Metrics --> Viz["生成调仓备注/风险透视/基准对比"] Viz --> Out["输出指标与产物"]

图表来源 - agent/backtest/engines/base.py:149-249 - agent/backtest/engines/base.py:647-769

章节来源 - agent/backtest/engines/base.py:377-769

loaders/registry.py:数据源选择与回退链

flowchart TD S["source/market"] --> CheckReg{"是否已注册?"} CheckReg --> |否| ErrUnknown["未知数据源"] CheckReg --> TryFirst["尝试首选源 is_available()"] TryFirst --> |可用| ReturnFirst["返回该源"] TryFirst --> |不可用| Fallback["遍历回退链"] Fallback --> Found{"找到可用源?"} Found --> |是| ReturnFB["返回回退源"] Found --> |否| ErrNone["无可用源"]

图表来源 - agent/backtest/loaders/registry.py:158-249

章节来源 - agent/backtest/loaders/registry.py:23-155 - agent/backtest/loaders/registry.py:158-249

alpha_bench_tool:Alpha 因子基准测试

sequenceDiagram participant Tool as "alpha_bench_tool" participant Panel as "_load_universe_panel" participant Ret as "_compute_forward_returns" participant Reg as "Registry.compute" participant Stats as "compute_ic_series" participant Report as "HTML渲染" Tool->>Panel : 获取面板(含缓存/HMAC) Panel-->>Tool : panel{open/high/low/close/volume/amount/vwap} Tool->>Ret : 计算前向收益 Ret-->>Tool : return_df loop 每个Alpha Tool->>Reg : compute(alpha_id, panel) Reg-->>Tool : factor_df Tool->>Stats : compute_ic_series(factor_df, return_df) Stats-->>Tool : ic_series end Tool->>Report : 渲染HTML报告 Report-->>Tool : report_path

图表来源 - agent/src/tools/alpha_bench_tool.py:96-159 - agent/src/tools/alpha_bench_tool.py:616-657 - agent/src/factors/bench_runner.py:137-209

章节来源 - agent/src/tools/alpha_bench_tool.py:96-159 - agent/src/tools/alpha_bench_tool.py:616-657 - agent/src/factors/bench_runner.py:137-209

alpha_compare_tool:多策略/多 Alpha 对比

flowchart TD In["alpha_ids, universe, period, sort"] --> Dedup["去重"] Dedup --> Group["按zoo分组"] Group --> Bench["仅对指定Alpha跑基准"] Bench --> Merge["合并rows与skipped"] Merge --> Rank["按sort排序并计算delta_vs_best"] Rank --> Out["ranking/winner/n_compared/n_skipped"]

图表来源 - agent/src/tools/alpha_compare_tool.py:44-114 - agent/src/factors/compare_runner.py:88-210

章节来源 - agent/src/tools/alpha_compare_tool.py:44-114 - agent/src/factors/compare_runner.py:88-210

依赖关系分析

graph LR BT["backtest_tool"] --> RN["runner.py"] RN --> REG["loaders/registry.py"] RN --> ENG["engines/base.py"] ABT["alpha_bench_tool"] --> BR["bench_runner.py"] ACT["alpha_compare_tool"] --> CR["compare_runner.py"] CR --> BR

图表来源 - agent/src/tools/backtest_tool.py:15-95 - agent/backtest/runner.py:68-163 - agent/backtest/loaders/registry.py:158-249 - agent/backtest/engines/base.py:647-769 - agent/src/tools/alpha_bench_tool.py:96-159 - agent/src/factors/bench_runner.py:137-209 - agent/src/tools/alpha_compare_tool.py:44-114 - agent/src/factors/compare_runner.py:88-210

章节来源 - agent/backtest/loaders/registry.py:158-249

性能考虑

[本节为通用性能讨论,不直接分析具体文件]

故障排查指南

章节来源 - agent/backtest/loaders/registry.py:158-249 - agent/backtest/runner.py:68-163 - agent/backtest/runner.py:165-768 - agent/src/tools/alpha_bench_tool.py:96-159 - agent/src/tools/alpha_compare_tool.py:44-114

结论

Vibe-Trading 的回测工具集以模块化设计实现了从策略回测到 Alpha 基准与对比的全链路能力: - backtest_tool 提供安全的策略回测入口,配合 runner 的安全沙箱与 BaseEngine 的通用执行流程,确保策略在受控环境中高效运行。 - alpha_bench_tool 与 bench_runner 提供高性能、可缓存、具备多重检验校正的因子基准测试,支持多市场与 HTML 可视化。 - alpha_compare_tool 与 compare_runner 聚焦于多策略/多 Alpha 的横向对比,快速给出排名与差距。 通过统一的数据源注册表与回退链,系统在多种市场与网络环境下保持稳定。建议遵循最佳实践与性能优化建议,以获得更可靠的回测与基准结果。

[本节为总结性内容,不直接分析具体文件]

附录:API与使用示例

backtest_tool API

章节来源 - agent/src/tools/backtest_tool.py:77-95

alpha_bench_tool API

章节来源 - agent/src/tools/alpha_bench_tool.py:1-25 - agent/src/tools/alpha_bench_tool.py:96-159 - agent/src/tools/alpha_bench_tool.py:616-657

alpha_compare_tool API

章节来源 - agent/src/tools/alpha_compare_tool.py:44-114 - agent/src/factors/compare_runner.py:88-210

回测引擎选择机制

章节来源 - agent/backtest/loaders/registry.py:158-249 - agent/backtest/runner.py:68-163 - agent/backtest/engines/base.py:728-751

数据源集成

章节来源 - agent/backtest/loaders/registry.py:23-155 - agent/backtest/loaders/registry.py:158-249

结果可视化

章节来源 - agent/backtest/engines/base.py:770-800 - agent/src/tools/alpha_bench_tool.py:677-800

回测最佳实践

[本节为通用指导,不直接分析具体文件]

常见问题解决方案

章节来源 - agent/backtest/loaders/registry.py:158-249 - agent/backtest/runner.py:165-768 - agent/src/tools/alpha_bench_tool.py:96-159 - agent/src/tools/alpha_compare_tool.py:44-114