回测工具

📎 引用文件

本文引用的文件 - runner.py - base.py - models.py - benchmark.py - metrics.py - registry.py - constraints.py - base.py - __init__.py - base.py - registry.py

目录

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

简介

本文件为 Vibe-Trading 回测工具的权威技术文档,覆盖策略回测、基准对比、Alpha因子测试与因子库管理等核心能力。文档面向不同技术背景的读者,既提供高层架构说明,也深入到回测引擎配置、参数调优、多市场适配、数据处理流程、结果可视化与报告生成等实操层面,帮助快速构建回测策略、执行历史回测并分析结果。

项目结构

Vibe-Trading 的回测子系统位于 agent/backtest 与 agent/src/factors 两大区域: - backtest:负责数据加载、信号对齐、权重优化、逐根K线执行、指标计算、基准对比与产物输出。 - factors:提供 Alpha 因子库(Zoo)的注册、校验、计算与基准评测工具链。

graph TB subgraph "回测入口" R["runner.py<br/>配置校验/安全扫描/运行编排"] end subgraph "引擎层" E["engines/base.py<br/>BaseEngine 通用执行循环"] M["models.py<br/>Position/Fill/Trade/EquitySnapshot"] end subgraph "数据与基准" L["loaders/registry.py<br/>数据源注册与回退链"] B["benchmark.py<br/>基准解析与收益序列"] end subgraph "指标与约束" MET["metrics.py<br/>年化/收益/换手/跟踪误差等"] C["constraints.py<br/>权重约束(上限/下限/分组暴露)"] O["optimizers/base.py<br/>优化器基类(滚动协方差/权重归一)"] end subgraph "因子库" FZ["factors/__init__.py<br/>算子导出"] FB["factors/base.py<br/>时间序列算子"] FR["factors/registry.py<br/>Alpha注册/校验/计算"] end R --> E E --> L E --> B E --> MET E --> C E --> O R --> FR FR --> FB

图表来源 - runner.py:1-120 - base.py:377-768 - registry.py:1-249 - benchmark.py:1-208 - metrics.py:150-638 - constraints.py:1-206 - base.py:14-145 - __init__.py:1-49 - base.py:1-356 - registry.py:1-454

章节来源 - runner.py:1-120 - base.py:377-768

核心组件

章节来源 - runner.py:68-163 - base.py:647-768 - registry.py:136-249 - benchmark.py:22-103 - metrics.py:458-638 - base.py:14-145 - constraints.py:1-206 - registry.py:201-454

架构总览

回测主流程由 BaseEngine.run_backtest 串联: 1) 通过 loader.fetch 拉取多标的 OHLCV 数据; 2) 可选注入基本面字段与事件流; 3) 调用 SignalEngine.generate 产出信号; 4) _align 将信号对齐到统一日历,计算目标权重矩阵(可经优化器与约束处理); 5) 逐根K线执行交易,记录成交、持仓、权益快照; 6) 计算指标并与基准对比; 7) 输出重平衡笔记、风险X光等产物。

sequenceDiagram participant U as "用户/CLI" participant R as "runner.py" participant E as "BaseEngine" participant L as "Loader(按市场回退)" participant S as "SignalEngine" participant B as "Benchmark" participant M as "Metrics" U->>R : 传入 config.json / signal_engine.py R->>R : 校验配置/AST安全扫描 R->>E : run_backtest(config, loader, signal_engine) E->>L : fetch(codes, start, end, interval) L-->>E : data_map E->>S : generate(data_map) S-->>E : signal_map E->>E : _align -> 目标权重(含优化器/约束) E->>E : 逐根K线执行/记录Fill/Trade/Equity E->>B : resolve_benchmark(...) B-->>E : bench_ret E->>M : calc_metrics(equity, trades, initial_cash, bench_ret, ...) M-->>E : 指标字典 E-->>R : 指标+产物

图表来源 - base.py:647-768 - benchmark.py:40-103 - metrics.py:458-638

详细组件分析

回测入口 runner

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

引擎 base:通用执行循环

flowchart TD Start(["开始 run_backtest"]) --> LoadData["loader.fetch() 获取data_map"] LoadData --> Enrich["可选注入基本面/事件"] Enrich --> Signals["signal_engine.generate() 生成信号"] Signals --> Align["_align 对齐日历/计算close/ret/目标权重"] Align --> Optimize{"是否配置优化器?"} Optimize -- 是 --> ApplyOpt["应用优化器+约束"] Optimize -- 否 --> SkipOpt["跳过优化"] ApplyOpt --> Execute["逐根K线执行/记录Fill/Trade/Equity"] SkipOpt --> Execute Execute --> Bench{"是否配置基准?"} Bench -- 是 --> FetchBench["resolve_benchmark() 获取bench_ret"] Bench -- 否 --> NoBench["无基准"] FetchBench --> Metrics["calc_metrics() 计算指标"] NoBench --> Metrics Metrics --> Artifacts["输出重平衡笔记/风险X光等"] Artifacts --> End(["结束"])

图表来源 - base.py:252-371 - base.py:647-768 - benchmark.py:40-103 - metrics.py:458-638

章节来源 - base.py:149-249 - base.py:252-371 - base.py:647-768

数据源与多市场适配

章节来源 - registry.py:23-155 - registry.py:158-249

基准对比

章节来源 - benchmark.py:22-103 - benchmark.py:109-208 - base.py:728-751

指标体系与换手率

章节来源 - metrics.py:150-168 - metrics.py:175-261 - metrics.py:263-456 - metrics.py:458-638

优化器与约束

章节来源 - base.py:14-145 - constraints.py:1-206 - base.py:252-279

因子库与 Alpha 测试

章节来源 - __init__.py:1-49 - base.py:1-356 - registry.py:1-454

依赖关系分析

graph LR Runner["runner.py"] --> Engine["engines/base.py"] Engine --> Loader["loaders/registry.py"] Engine --> Benchmark["benchmark.py"] Engine --> Metrics["metrics.py"] Engine --> Optimizer["optimizers/base.py"] Engine --> Constraints["constraints.py"] Factors["factors/*"] --> Engine

图表来源 - runner.py:1-120 - base.py:647-768 - registry.py:136-249 - benchmark.py:40-103 - metrics.py:458-638 - base.py:14-145 - constraints.py:1-206

性能与优化

[本节为通用指导,无需特定文件引用]

故障排查指南

章节来源 - runner.py:68-163 - registry.py:158-249 - base.py:687-706 - benchmark.py:71-103 - metrics.py:484-531 - runner.py:736-768

结论

Vibe-Trading 回测工具提供了从数据接入、信号生成、权重优化、逐根执行到指标与基准对比的一体化流水线,具备多市场适配、严格的安全沙箱、完善的因子库与评测能力。通过合理配置与优化,可高效开展策略研究与因子挖掘,并输出可解释的报告与可视化产物。

[本节为总结性内容,无需特定文件引用]

附录:使用示例与最佳实践

构建回测策略(SignalEngine)

参考路径 - runner.py:770-787

执行历史回测

参考路径 - runner.py:68-163 - base.py:647-768

分析与可视化

参考路径 - metrics.py:458-638 - base.py:770-800 - benchmark.py:40-103

多市场回测与数据处理

参考路径 - registry.py:136-155 - base.py:149-249

因子库管理与 Alpha 测试

参考路径 - registry.py:201-454 - base.py:1-356 - __init__.py:1-49

参数调优与约束配置

参考路径 - base.py:252-279 - constraints.py:1-206 - metrics.py:150-168