数据对齐机制

📎 引用文件

本文引用的文件 - agent/backtest/engines/base.py - agent/backtest/engines/composite.py - agent/backtest/correlation.py - agent/tests/test_base_engine.py - agent/tests/test_engine_robustness.py - agent/tests/test_signal_alignment_perf.py

目录

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

简介

本文件系统性说明 Vibe-Trading 在多市场回测中的数据对齐机制,重点围绕 _align 函数的实现原理与行为:统一日期索引构建、收盘价矩阵生成、信号序列对齐、前向填充限制、跨市场日历差异与时区处理、以及数据缺失值(停牌、休市、延迟)的应对策略。同时给出配置选项与性能优化建议,帮助在复杂多资产组合回测中保证结果正确性与执行效率。

项目结构

数据对齐的核心位于回测引擎基类中,被各市场引擎复用;跨市场组合由 CompositeEngine 统一管理资金池并调用基类流程。相关测试覆盖了正确性、鲁棒性与性能目标。

graph TB A["回测入口<br/>BaseEngine.run_backtest"] --> B["数据加载与增强"] B --> C["信号生成"] C --> D["数据对齐 _align"] D --> E["预计算目标权重可选优化器"] E --> F["逐Bar执行各市场规则"] F --> G["指标与产物输出"] H["CompositeEngine<br/>跨市场组合"] --> A

图表来源 - agent/backtest/engines/base.py:647-718 - agent/backtest/engines/composite.py:129-147

章节来源 - agent/backtest/engines/base.py:647-718 - agent/backtest/engines/composite.py:129-147

核心组件

章节来源 - agent/backtest/engines/base.py:112-249 - agent/backtest/engines/composite.py:102-147

架构总览

下图展示从数据加载到对齐再到执行的端到端流程,突出 _align 在其中的关键作用。

sequenceDiagram participant U as "用户/脚本" participant BE as "BaseEngine" participant L as "数据加载器" participant SE as "信号引擎" participant AL as "_align" participant CE as "CompositeEngine(可选)" participant EX as "逐Bar执行" U->>BE : run_backtest(config, loader, signal_engine) BE->>L : fetch(codes, start, end, fields, interval) L-->>BE : data_map BE->>SE : generate(data_map) SE-->>BE : signal_map BE->>AL : _align(data_map, signal_map, codes, optimizer?) AL-->>BE : dates, close_df, target_pos, ret_df BE->>EX : _execute_bars(dates, data_map, close_df, target_pos, valid_codes) EX-->>BE : 交易记录/权益曲线 BE-->>U : 指标与产物 Note over CE,BE : 若为跨市场组合,CE会先校验币种一致性再委托BaseEngine

图表来源 - agent/backtest/engines/base.py:647-718 - agent/backtest/engines/composite.py:129-147

详细组件分析

_align 函数:统一索引、矩阵构建、信号对齐与填充

flowchart TD S["输入: data_map, signal_map, codes"] --> I["构建统一日期索引"] I --> M["构建收盘价矩阵(close_arr)"] M --> F["列方向前向填充(ffill_limit)"] F --> D{"是否包含全空列?"} D -- 是 --> R["剔除全空标的"] D -- 否 --> P["构建信号位置矩阵(pos_arr)"] R --> P P --> SH["信号: 重采样 -> 填零 -> 裁剪[-1,1] -> shift(1)"] SH --> PF["位置矩阵前向填充 + 填零"] PF --> O["可选: 优化器调整目标仓位"] O --> N["按行归一化(总暴露<=1)"] N --> T["输出: dates, close_df, pos_df, ret_df"]

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

章节来源 - agent/backtest/engines/base.py:149-249 - agent/tests/test_base_engine.py:442-520 - agent/tests/test_engine_robustness.py:40-88

跨市场组合与币种一致性

章节来源 - agent/backtest/engines/composite.py:68-99 - agent/backtest/engines/composite.py:102-147

时区与日历差异处理

章节来源 - agent/backtest/engines/base.py:169-177 - agent/backtest/engines/base.py:184-197

数据缺失值填充策略与边界情况

章节来源 - agent/backtest/engines/base.py:184-236 - agent/backtest/correlation.py:146-158 - agent/tests/test_engine_robustness.py:40-88

信号移位与权重归一化

章节来源 - agent/backtest/engines/base.py:211-249 - agent/tests/test_base_engine.py:464-477

依赖关系分析

graph LR BE["BaseEngine"] --> AL["_align"] BE --> RT["run_backtest"] CE["CompositeEngine"] --> BE CORR["correlation"] --> |使用对齐后的收益| AL

图表来源 - agent/backtest/engines/base.py:647-718 - agent/backtest/engines/composite.py:129-147 - agent/backtest/correlation.py:146-158

章节来源 - agent/backtest/engines/base.py:647-718 - agent/backtest/engines/composite.py:129-147 - agent/backtest/correlation.py:146-158

性能考量

章节来源 - agent/tests/test_signal_alignment_perf.py:431-463 - agent/backtest/engines/base.py:181-197

故障排查指南

章节来源 - agent/tests/test_engine_robustness.py:40-88 - agent/backtest/correlation.py:146-158

结论

Vibe-Trading 的数据对齐机制通过统一的日期索引、严格的信号移位与受限前向填充,有效解决了多市场回测中的日历差异、时区处理与缺失值问题。_align 在保证正确性的前提下实现了高性能向量化实现,并通过 CompositeEngine 支持跨市场组合回测。结合合理的配置与性能优化技巧,可在复杂多资产场景中稳定产出可靠的回测结果。

附录