市场特定引擎

📎 引用文件

本文引用的文件 - base.py - futures_base.py - china_a.py - crypto.py - forex.py - china_futures.py - _market_hooks.py - test_china_a_engine.py - test_crypto_engine.py

目录

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

简介

本文件面向 Vibe-Trading 的“市场特定引擎”,系统梳理并说明中国A股、加密货币(永续合约)、外汇(现货/CFD)、中国期货四大市场的专用回测引擎实现。重点覆盖各市场的特殊交易规则处理,包括: - A股:涨跌停限制、T+1制度、手续费结构(佣金最低额、印花税、过户费) - 加密货币:24小时交易、合约杠杆、资金费率结算、逐仓/全仓风控与强平 - 外汇:点差模型、保证金要求、隔夜利息(Swap) - 期货:合约乘数、保证金率、价格涨跌幅限制、按产品差异化手续费

同时提供各引擎的配置参数、性能特点、适用场景,以及具体配置示例与最佳实践建议。

项目结构

市场引擎位于 agent/backtest/engines 目录下,采用“基类 + 市场特化”的分层设计: - BaseEngine:统一的回测执行循环、信号对齐、指标计算、事件钩子等通用逻辑 - FuturesBaseEngine:在 BaseEngine 基础上增加“合约乘数”对 PnL、保证金、头寸规模的影响 - 市场引擎:ChinaAEngine、CryptoEngine、ForexEngine、ChinaFuturesEngine 分别实现各自市场规则 - _market_hooks.py:跨引擎共享的市场钩子(如资金费率、外汇 Swap、强制平仓判定、符号分类)

graph TB subgraph "回测引擎" BE["BaseEngine"] FB["FuturesBaseEngine"] CA["ChinaAEngine"] CR["CryptoEngine"] FX["ForexEngine"] CF["ChinaFuturesEngine"] end BE --> FB FB --> CF BE --> CA BE --> CR BE --> FX

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

章节来源 - base.py:377-644 - futures_base.py:19-57

核心组件

章节来源 - base.py:377-644 - futures_base.py:19-57 - china_a.py:20-93 - crypto.py:41-130 - forex.py:56-137 - china_futures.py:131-251

架构总览

下图展示回测主流程与各引擎的协作关系,强调“策略信号→目标权重→逐根K线执行→市场规则校验→费用/滑点→持仓与资金更新”。

sequenceDiagram participant S as "信号引擎" participant B as "BaseEngine" participant E as "市场引擎(子类)" participant M as "市场钩子(_market_hooks)" S->>B : generate(data_map) B->>B : 对齐日期/收盘价/目标权重 loop 每个交易日 B->>E : before_rebalance_bar(timestamp, data_map, codes) E-->>B : 可选提前终止 B->>E : can_execute(symbol, direction, bar) alt 允许交易 B->>E : round_size / apply_slippage / calc_commission B->>B : 更新持仓/资金/成交记录 else 拒绝交易 B->>B : 跳过 end B->>E : after_position_adjustment(...) B->>E : after_rebalance_bar(timestamp, data_map, codes) E->>M : on_bar(symbol, bar, timestamp) M-->>E : 资金费率/隔夜利息/强平检查 end B->>B : 计算指标/输出结果

图表来源 - base.py:647-783 - crypto.py:349-376 - _market_hooks.py:223-307

详细组件分析

中国A股引擎(ChinaAEngine)

flowchart TD Start(["进入 can_execute"]) --> CheckShort{"方向=做空?"} CheckShort --> |是| Block["拒绝交易"] CheckShort --> |否| CheckT1{"方向=平仓且今日买入?"} CheckT1 --> |是| Block CheckT1 --> |否| LimitBand["计算涨跌停区间"] LimitBand --> FillPrice["计算预期成交价(含滑点)"] FillPrice --> HitLimit{"是否触及涨跌停?"} HitLimit --> |是| Block HitLimit --> |否| Allow["允许交易"]

图表来源 - china_a.py:40-93 - china_a.py:115-193 - base.py:468-557

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

加密货币引擎(CryptoEngine)

sequenceDiagram participant E as "CryptoEngine" participant H as "_market_hooks" participant R as "RiskModel" E->>H : calc_crypto_funding_fee(symbol, bar, ts, positions, rate) H-->>E : 扣减资金(多头支付/空头收取) E->>R : evaluate_isolated/cross(account, frames, price_field) R-->>E : RiskSnapshot(status, liquidation_targets) alt 健康 E->>E : 继续执行 else 强平 E->>E : _close_position(symbol, liq_price, reason="liquidation") E->>E : 记录强平事件/费用 end

图表来源 - crypto.py:243-347 - _market_hooks.py:223-307

章节来源 - crypto.py:41-130 - crypto.py:349-376 - crypto.py:377-554 - _market_hooks.py:223-307 - test_crypto_engine.py:184-200

外汇引擎(ForexEngine)

flowchart TD Start(["apply_slippage_for_symbol"]) --> Normalize["_normalize_symbol(pair)"] Normalize --> PipVal["pip = 0.01(JPY) or 0.0001"] PipVal --> Spread{"spread_pips_override 设置?"} Spread --> |是| UseOverride["使用覆盖点差"] Spread --> |否| Lookup["查表获取默认点差"] UseOverride --> TotalPips["total_pips = spread/2 + slippage_pips"] Lookup --> TotalPips TotalPips --> Price["price + direction * total_pips * pip"] Price --> End(["返回滑点后价格"])

图表来源 - forex.py:43-137 - _market_hooks.py:322-374

章节来源 - forex.py:56-137 - _market_hooks.py:312-374

中国期货引擎(ChinaFuturesEngine)

classDiagram class FuturesBaseEngine { +get_contract_multiplier(symbol) float +_calc_pnl(symbol, direction, size, entry, exit) float +_calc_margin(symbol, size, price, leverage) float +_calc_raw_size(symbol, notional, price) float } class ChinaFuturesEngine { +can_execute(symbol, direction, bar) bool +round_size(raw_size, price) float +calc_commission(size, price, direction, is_open) float +calc_commission_for_symbol(symbol, size, price, is_open) float +apply_slippage(price, direction) float +get_contract_multiplier(symbol) float +get_margin_rate(symbol) float -_leverage_for_symbol(symbol) float } FuturesBaseEngine <|-- ChinaFuturesEngine

图表来源 - futures_base.py:19-57 - china_futures.py:131-251

章节来源 - china_futures.py:23-109 - china_futures.py:131-251

依赖关系分析

graph LR base["BaseEngine"] --> ca["ChinaAEngine"] base --> cr["CryptoEngine"] base --> fx["ForexEngine"] base --> fb["FuturesBaseEngine"] fb --> cf["ChinaFuturesEngine"] hooks["_market_hooks.py"] --> cr hooks --> fx

图表来源 - base.py:377-644 - futures_base.py:19-57 - _market_hooks.py:23-116

章节来源 - base.py:377-644 - futures_base.py:19-57 - _market_hooks.py:23-116

性能考量

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

故障排查指南

章节来源 - test_china_a_engine.py:60-200 - test_crypto_engine.py:184-200 - _market_hooks.py:223-307 - _market_hooks.py:322-374 - china_futures.py:23-109

结论

Vibe-Trading 的市场特定引擎通过统一的 BaseEngine 抽象与丰富的市场特化实现,覆盖了 A股、加密货币、外汇、中国期货的核心交易规则与费用模型。各引擎在涨跌停、T+1、资金费率、点差、合约乘数等方面提供了精确且可配置的模拟能力,适用于多市场策略研究与回测验证。建议在实盘前结合严格模式与事件证据进行充分压力测试与归因分析。

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

附录:配置与最佳实践

中国A股(ChinaAEngine)

章节来源 - china_a.py:20-93 - test_china_a_engine.py:60-200

加密货币(CryptoEngine)

章节来源 - crypto.py:41-130 - crypto.py:349-376 - _market_hooks.py:223-307 - test_crypto_engine.py:184-200

外汇(ForexEngine)

章节来源 - forex.py:56-137 - _market_hooks.py:312-374

中国期货(ChinaFuturesEngine)

章节来源 - china_futures.py:23-109 - china_futures.py:131-251