期货引擎

📎 引用文件

本文引用的文件 - futures_base.py - china_futures.py - global_futures.py - base.py - composite.py - test_china_futures_engine.py - test_global_futures_engine.py

目录

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

简介

本文件面向“期货回测引擎”的完整技术文档,聚焦以下目标: - 深入说明期货合约的特殊规则:合约乘数、保证金制度、涨跌停板、滑点与手续费、T+0交易、交割结算与展期换月、基差处理等。 - 区分国内期货(中金所CFFEX、上期所SHFE、大商所DCE、郑商所ZCE、INE、广期所GFEX)与国际期货(CME/CBOT/NYMEX/COMEX/ICE/Eurex)的规则差异。 - 提供策略回测配置示例、套期保值策略实现思路与多合约组合管理方法。 - 说明前复权处理、合约切换逻辑与风险控制机制在回测中的落地方式。 - 重点阐述FuturesBase基类的设计模式、不同交易所规则适配与合约生命周期管理。

项目结构

期货回测引擎位于 backtest.engines 包中,采用分层继承与规则分发设计: - BaseEngine:通用回测执行循环、信号对齐、指标计算、资金与持仓管理等。 - FuturesBaseEngine:在基础引擎之上注入“合约乘数”对PnL、保证金、头寸规模的影响。 - ChinaFuturesEngine:国内期货市场规则(T+0、涨跌停、按产品差异化佣金与保证金、合约乘数)。 - GlobalFuturesEngine:国际期货市场规则(T+0、指数品种涨跌停、按合约固定佣金、合约乘数)。 - CompositeEngine:跨市场统一资金池,将各市场规则引擎作为“无状态规则书”进行分发。

graph TB A["BaseEngine<br/>通用回测执行"] --> B["FuturesBaseEngine<br/>合约乘数增强"] B --> C["ChinaFuturesEngine<br/>国内期货规则"] B --> D["GlobalFuturesEngine<br/>国际期货规则"] A --> E["CompositeEngine<br/>跨市场统一资金池"] E --> C E --> D

图表来源 - base.py:377-644 - futures_base.py:19-56 - china_futures.py:131-250 - global_futures.py:130-218 - composite.py:102-226

章节来源 - base.py:377-644 - futures_base.py:19-56 - china_futures.py:131-250 - global_futures.py:130-218 - composite.py:102-226

核心组件

章节来源 - futures_base.py:19-56 - china_futures.py:23-109 - china_futures.py:131-250 - global_futures.py:23-92 - global_futures.py:130-218 - composite.py:26-65 - composite.py:102-226

架构总览

期货回测的执行流程由BaseEngine驱动,FuturesBaseEngine在关键计算处注入合约乘数,具体市场规则由子类实现。CompositeEngine负责跨市场统一调度。

sequenceDiagram participant User as "策略/用户" participant BE as "BaseEngine.run_backtest" participant FE as "FuturesBaseEngine" participant CF as "ChinaFuturesEngine" participant GF as "GlobalFuturesEngine" participant CE as "CompositeEngine" User->>BE : 传入config/loader/signal_engine BE->>BE : 加载数据、生成信号、对齐权重 BE->>CE : 若为跨市场则使用CompositeEngine alt 国内期货 CE->>CF : can_execute/round_size/calc_commission/apply_slippage CF-->>CE : 规则结果 else 国际期货 CE->>GF : can_execute/round_size/calc_commission/apply_slippage GF-->>CE : 规则结果 end BE->>FE : _calc_pnl/_calc_margin/_calc_raw_size(含乘数) FE-->>BE : 带乘数的结果 BE->>BE : 记录成交、更新资金/持仓、计算指标 BE-->>User : 输出指标与证据

图表来源 - base.py:647-784 - futures_base.py:39-56 - china_futures.py:161-232 - global_futures.py:150-218 - composite.py:129-226

详细组件分析

FuturesBaseEngine:合约乘数增强层

classDiagram class BaseEngine { +run_backtest(config, loader, signal_engine, run_dir) +can_execute(symbol, direction, bar) bool +round_size(raw_size, price) float +calc_commission(size, price, direction, is_open) float +apply_slippage(price, direction) float +_calc_pnl(symbol, direction, size, entry, exit) float +_calc_margin(symbol, size, price, leverage) float +_calc_raw_size(symbol, notional, price) float } class FuturesBaseEngine { +get_contract_multiplier(symbol) float +_calc_pnl(...) float +_calc_margin(...) float +_calc_raw_size(...) float } BaseEngine <|-- FuturesBaseEngine

图表来源 - base.py:377-644 - futures_base.py:19-56

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

ChinaFuturesEngine:国内期货规则

flowchart TD Start(["进入can_execute"]) --> CheckLimit{"是否触及涨跌停?"} CheckLimit --> |是| Block["拒绝交易"] CheckLimit --> |否| Allow["允许交易"] Allow --> End(["返回True"]) Block --> End

图表来源 - china_futures.py:161-188 - base.py:468-557

章节来源 - china_futures.py:23-109 - china_futures.py:131-250 - test_china_futures_engine.py:67-200

GlobalFuturesEngine:国际期货规则

flowchart TD Start(["进入can_execute"]) --> HasLimit{"是否有涨跌停限制?"} HasLimit --> |否| Allow["允许交易"] HasLimit --> |是| CheckBand["检查是否在涨跌停范围内"] CheckBand --> |超出| Block["拒绝交易"] CheckBand --> |未超出| Allow Allow --> End(["返回True"]) Block --> End

图表来源 - global_futures.py:150-177 - base.py:468-557

章节来源 - global_futures.py:23-92 - global_futures.py:130-218 - test_global_futures_engine.py:58-200

CompositeEngine:跨市场统一资金池

graph LR Codes["代码集合"] --> Detect["_detect_market()"] Detect --> Build["_build_rule_engines()"] Build --> Engines["子引擎集合"] EngineDispatch["规则分发"] --> Engines EngineDispatch --> Rules["can_execute/round_size/calc_commission/apply_slippage"]

图表来源 - composite.py:26-65 - composite.py:102-226

章节来源 - composite.py:26-65 - composite.py:102-226

依赖关系分析

graph TB Base["BaseEngine"] --> FB["FuturesBaseEngine"] FB --> CF["ChinaFuturesEngine"] FB --> GF["GlobalFuturesEngine"] Base --> CE["CompositeEngine"] CE --> CF CE --> GF

图表来源 - base.py:377-644 - futures_base.py:19-56 - china_futures.py:131-250 - global_futures.py:130-218 - composite.py:102-226

章节来源 - base.py:377-644 - futures_base.py:19-56 - china_futures.py:131-250 - global_futures.py:130-218 - composite.py:102-226

性能考量

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

故障排查指南

章节来源 - china_futures.py:161-232 - global_futures.py:150-218 - composite.py:68-99 - test_china_futures_engine.py:120-200 - test_global_futures_engine.py:101-200

结论

该期货回测引擎以BaseEngine为核心执行框架,通过FuturesBaseEngine注入合约乘数,再由ChinaFuturesEngine与GlobalFuturesEngine分别实现国内外市场规则,CompositeEngine提供跨市场统一资金池与规则分发。整体设计清晰、可扩展性强,能够支持多种期货合约的交易规则与风控约束。

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

附录

期货合约特殊规则说明

[本节为概念性说明,不直接分析具体文件]

策略回测配置示例(思路)

[本节为概念性说明,不直接分析具体文件]

套期保值策略实现(思路)

[本节为概念性说明,不直接分析具体文件]

多合约组合管理(思路)

[本节为概念性说明,不直接分析具体文件]

数据前复权与合约切换逻辑(思路)

[本节为概念性说明,不直接分析具体文件]

风险控制机制(思路)

[本节为概念性说明,不直接分析具体文件]