引擎架构设计

📎 引用文件

本文引用的文件 - base.py - composite.py - china_a.py - crypto.py - forex.py - global_equity.py - futures_base.py - _market_hooks.py - __init__.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录:自定义市场引擎示例

简介

本文件系统性梳理 Vibe-Trading 回测引擎的架构与实现,重点围绕 BaseEngine 抽象基类的设计模式、市场规则接口、回测执行循环、信号对齐机制与性能优化策略;并详解 can_execute、round_size、calc_commission、apply_slippage 等关键方法的职责与实现思路。同时说明 Composite Engine(复合引擎)如何协调多个子引擎进行跨市场回测,覆盖生命周期管理、错误处理机制与扩展点设计,并提供继承 BaseEngine 创建自定义市场引擎的实践指引。

项目结构

graph TB subgraph "引擎层" BE["BaseEngine<br/>抽象基类"] CE["CompositeEngine<br/>复合引擎"] CAE["ChinaAEngine<br/>A股"] GE["GlobalEquityEngine<br/>美股/港股/加股"] CRY["CryptoEngine<br/>永续合约"] FX["ForexEngine<br/>外汇"] FB["FuturesBaseEngine<br/>期货基类"] CF["ChinaFuturesEngine<br/>国内期货"] GF["GlobalFuturesEngine<br/>国际期货"] end BE --> CAE BE --> GE BE --> CRY BE --> FX BE --> FB FB --> CF FB --> GF CE --> BE CE --> CAE CE --> GE CE --> CRY CE --> FX CE --> CF CE --> GF

图表来源 - __init__.py:1-31 - base.py:377-644 - composite.py:102-159

章节来源 - __init__.py:1-31

核心组件

章节来源 - base.py:377-848 - composite.py:102-257

架构总览

BaseEngine.run_backtest 是回测主入口,串联以下阶段: 1) 数据加载与增强(基本面、事件) 2) 信号生成与校验 3) 信号对齐与目标权重预计算(含可选优化器) 4) 逐根K线执行(开仓/减仓/平仓),期间调用市场规则接口 5) 指标计算与产物输出(基准、风险X光、调仓备注等) 6) 信任层运行卡片写入

sequenceDiagram participant U as "调用方" participant E as "BaseEngine" participant L as "DataLoader" participant S as "SignalEngine" participant M as "Metrics/Artifacts" U->>E : run_backtest(config, loader, signal_engine, run_dir) E->>L : fetch(codes, start, end, fields, interval) L-->>E : data_map E->>E : 增强(基本面/事件) E->>S : generate(data_map) S-->>E : signal_map E->>E : _align(对齐+优化) E->>E : _execute_bars(dates, data_map, close_df, target_pos, codes) E->>M : calc_metrics / write artifacts M-->>U : metrics

图表来源 - base.py:647-848

详细组件分析

BaseEngine 抽象基类

章节来源 - base.py:377-644 - base.py:852-1599 - base.py:149-249

执行循环时序图(关键路径)

sequenceDiagram participant B as "BaseEngine" participant R as "市场规则(子类)" participant P as "持仓/资金" loop 每根K线 B->>B : before_rebalance_bar(ts) B->>B : _calc_open_equity() B->>B : 读取target_weights alt position_adjustment=rebalance B->>B : _execute_target_rebalance(...) else hold B->>R : can_execute(close if needed) B->>R : apply_slippage(execution_open) B->>B : _plan_open_order / _execute_open_order end B->>B : after_rebalance_bar(ts) B->>B : _calc_equity() -> 记录快照 end B->>B : 结束清仓所有持仓

图表来源 - base.py:852-1030

市场引擎实现要点

ChinaAEngine(A股)

章节来源 - china_a.py:20-93 - china_a.py:115-193

GlobalEquityEngine(美股/港股/加拿大)

章节来源 - global_equity.py:33-124

CryptoEngine(加密货币永续)

章节来源 - crypto.py:41-130 - crypto.py:141-347 - crypto.py:349-615

ForexEngine(外汇)

章节来源 - forex.py:56-137

FuturesBaseEngine(期货基类)

章节来源 - futures_base.py:19-57

复合引擎(CompositeEngine)

classDiagram class BaseEngine { +run_backtest(...) +can_execute(...) +round_size(...) +calc_commission(...) +apply_slippage(...) +on_bar(...) } class CompositeEngine { -_symbol_market -_rule_engines +run_backtest(...) +can_execute(...) +round_size(...) +calc_commission(...) +apply_slippage(...) +on_bar(...) } class ChinaAEngine class GlobalEquityEngine class CryptoEngine class ForexEngine class FuturesBaseEngine BaseEngine <|-- ChinaAEngine BaseEngine <|-- GlobalEquityEngine BaseEngine <|-- CryptoEngine BaseEngine <|-- ForexEngine BaseEngine <|-- FuturesBaseEngine BaseEngine <|-- CompositeEngine

图表来源 - composite.py:102-257 - base.py:377-644

章节来源 - composite.py:26-159 - composite.py:161-257

依赖关系分析

graph LR BE["BaseEngine"] --> M["metrics/risk_xray/rebalance_notes/run_card"] BE --> D["数据增强(Tushare/RSSHub)"] BE --> MD["models(Position/FillRecord/...)"] CE["CompositeEngine"] --> MH["_market_hooks"] CE --> BE CAE["ChinaAEngine"] --> BE GE["GlobalEquityEngine"] --> BE CRY["CryptoEngine"] --> BE FX["ForexEngine"] --> BE FB["FuturesBaseEngine"] --> BE

图表来源 - base.py:26-44 - composite.py:15-23

章节来源 - base.py:26-44 - composite.py:15-23

性能考量

章节来源 - base.py:149-249 - base.py:852-1030 - forex.py:102-123 - crypto.py:141-196

故障排查指南

章节来源 - base.py:673-706 - base.py:1329-1340 - composite.py:68-99 - crypto.py:296-347

结论

BaseEngine 通过清晰的市场规则接口与稳健的执行循环,提供了可扩展、高性能的回测基础设施;各市场引擎聚焦本地规则与成本模型,复合引擎则实现跨市场协同与统一资金管理。该设计兼顾了准确性(避免未来函数、严格校验)、性能(向量化与批量计划)与可维护性(扩展点与模块化)。

附录:自定义市场引擎示例

以下为继承 BaseEngine 创建自定义市场引擎的步骤与要点(不直接粘贴源码,给出路径参考):