加密货币引擎

📎 引用文件

本文引用的文件 - agent/backtest/engines/crypto.py - agent/backtest/engines/base.py - agent/backtest/engines/_market_hooks.py - agent/backtest/perpetual_risk.py - agent/backtest/perpetual_evidence.py - agent/backtest/loaders/ccxt_loader.py - agent/backtest/loaders/binance_loader.py - agent/backtest/loaders/okx.py - agent/tests/test_crypto_engine.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与数据质量
  8. 回测配置与风险管理
  9. 故障排查指南
  10. 结论

简介

本文件面向加密货币回测引擎,系统性说明其在永续合约、现货、资金费率、爆仓机制、滑点模型等方面的实现与使用方式。重点覆盖: - 24小时连续交易、无涨跌停限制、高波动与流动性风险 - 合约杠杆交易、逐仓/全仓保证金模式、分级维持保证金 - USDT本位永续合约的数据接入(CCXT/OKX/Binance) - 策略回测配置示例、风控参数设置、实盘对接注意事项 - 与传统金融市场的差异及数据质量验证方法

项目结构

围绕加密货币回测的关键模块包括: - 引擎层:通用基类与加密专用引擎 - 市场钩子:资金费率计算、简易爆仓检查 - 风险模型:逐仓/全仓的严格风险评估快照 - 数据加载器:CCXT统一接口、Binance专用、OKX专用 - 证据输出:严格审计事件与摘要

graph TB subgraph "引擎层" Base["BaseEngine<br/>通用执行循环"] Crypto["CryptoEngine<br/>永续合约规则"] Hooks["_market_hooks<br/>资金费率/简易爆仓"] Risk["perpetual_risk<br/>逐仓/全仓风险快照"] Evidence["perpetual_evidence<br/>审计事件/摘要"] end subgraph "数据加载器" CCXT["ccxt_loader<br/>统一交易所接口"] Binance["binance_loader<br/>Binance专用"] OKX["okx_loader<br/>OKX专用"] end Base --> Crypto Crypto --> Hooks Crypto --> Risk Crypto --> Evidence Crypto --> CCXT CCXT --> Binance CCXT --> OKX

图表来源 - agent/backtest/engines/base.py:377-800 - agent/backtest/engines/crypto.py:41-106 - agent/backtest/engines/_market_hooks.py:223-308 - agent/backtest/perpetual_risk.py:194-418 - agent/backtest/perpetual_evidence.py:17-85 - agent/backtest/loaders/ccxt_loader.py:184-372 - agent/backtest/loaders/binance_loader.py:23-45 - agent/backtest/loaders/okx.py:101-208

章节来源 - agent/backtest/engines/base.py:377-800 - agent/backtest/engines/crypto.py:41-106

核心组件

章节来源 - agent/backtest/engines/base.py:377-800 - agent/backtest/engines/crypto.py:41-106 - agent/backtest/engines/_market_hooks.py:223-308 - agent/backtest/perpetual_risk.py:194-418 - agent/backtest/loaders/ccxt_loader.py:184-372 - agent/backtest/loaders/binance_loader.py:23-45 - agent/backtest/loaders/okx.py:101-208 - agent/backtest/perpetual_evidence.py:17-85

架构总览

下图展示从数据加载到执行、风控与证据输出的完整流程。

sequenceDiagram participant User as "用户策略" participant Loader as "数据加载器(CCXT/OKX/Binance)" participant Engine as "CryptoEngine" participant Hooks as "_market_hooks" participant Risk as "perpetual_risk" participant Evidence as "perpetual_evidence" User->>Loader : fetch(codes, start_date, end_date, interval) Loader-->>User : OHLCV + funding_rate(可选) User->>Engine : run_backtest(config, loader, signal_engine) Engine->>Engine : 对齐信号/目标权重 loop 每根K线 Engine->>Hooks : calc_crypto_funding_fee(...) Hooks-->>Engine : 扣减资金费用 Engine->>Risk : evaluate_isolated/CrossMarginRiskModel() Risk-->>Engine : 风险快照(健康/逐仓爆仓/账户爆仓) alt 触发爆仓 Engine->>Engine : _close_position(..., reason="liquidation") Engine->>Evidence : 记录爆仓事件 end Engine->>Evidence : 记录开平仓/资金结算事件 end Engine-->>User : 指标与产物(含永续合约审计)

图表来源 - agent/backtest/loaders/ccxt_loader.py:226-372 - agent/backtest/loaders/okx.py:131-208 - agent/backtest/engines/base.py:647-800 - agent/backtest/engines/crypto.py:96-106 - agent/backtest/engines/_market_hooks.py:223-308 - agent/backtest/perpetual_risk.py:357-418 - agent/backtest/perpetual_evidence.py:17-85

详细组件分析

加密引擎(CryptoEngine)

flowchart TD Start(["进入K线"]) --> Funding["计算资金费用<br/>按8小时结算去重"] Funding --> RiskCheck{"是否严格模式?"} RiskCheck --> |否| Execute["执行交易/滑点/手续费"] RiskCheck --> |是| BuildFrames["构建风险帧<br/>mark价格+资金费率+维护等级"] BuildFrames --> Eval["评估风险快照<br/>逐仓/全仓"] Eval --> Liquidate{"是否触发爆仓?"} Liquidate --> |是| Close["强平并记录事件"] Liquidate --> |否| Execute Execute --> End(["结束"]) Close --> End

图表来源 - agent/backtest/engines/crypto.py:96-106 - agent/backtest/engines/crypto.py:108-140 - agent/backtest/engines/crypto.py:243-270 - agent/backtest/engines/crypto.py:296-347 - agent/backtest/engines/_market_hooks.py:223-308 - agent/backtest/perpetual_risk.py:357-418

章节来源 - agent/backtest/engines/crypto.py:41-106 - agent/backtest/engines/crypto.py:108-140 - agent/backtest/engines/crypto.py:243-270 - agent/backtest/engines/crypto.py:296-347 - agent/backtest/engines/crypto.py:349-383 - agent/backtest/engines/crypto.py:446-554 - agent/backtest/engines/crypto.py:555-615

风险模型(逐仓/全仓)

classDiagram class AccountState { +wallet_balance : float +positions : tuple[PositionState] +margin_mode : "isolated"|"cross" +terminal_status : "active"|"completed"|"account_liquidation" } class PositionState { +symbol : str +quantity : float +entry_price : float +leverage : float +accumulated_entry_fee : float +isolated_margin : float? } class MarketRiskFrame { +timestamp : Timestamp +mark_open/mark_high/mark_low/mark_close : float +funding_rate : float? +funding_settlement_time : Timestamp? +schedule : MaintenanceSchedule? +source : str +fidelity_flags : tuple } class MaintenanceSchedule { +symbol : str +version : str +brackets : tuple[MaintenanceBracket] } class MaintenanceBracket { +bracket_tier : int +notional_cap : float +maintenance_rate : float +cumulative_maintenance_amount : float +notional_coefficient : float? } AccountState --> PositionState : "包含" MarketRiskFrame --> MaintenanceSchedule : "引用" MaintenanceSchedule --> MaintenanceBracket : "包含"

图表来源 - agent/backtest/perpetual_risk.py:42-130 - agent/backtest/perpetual_risk.py:132-179 - agent/backtest/perpetual_risk.py:194-272

章节来源 - agent/backtest/perpetual_risk.py:181-192 - agent/backtest/perpetual_risk.py:357-418

数据加载器(CCXT/OKX/Binance)

sequenceDiagram participant Caller as "回测引擎" participant CCXT as "CCXT DataLoader" participant EX as "交易所(CCXt)" Caller->>CCXT : fetch(codes, start, end, interval) alt 永续合约 CCXT->>EX : 拉取交易OHLCV CCXT->>EX : 拉取标记价格OHLCV CCXT->>EX : 拉取资金费率历史 CCXT-->>Caller : 对齐后的DataFrame(含execution_open/mark_*) else 现货 CCXT->>EX : 拉取OHLCV CCXT-->>Caller : DataFrame end

图表来源 - agent/backtest/loaders/ccxt_loader.py:226-372 - agent/backtest/loaders/binance_loader.py:23-45 - agent/backtest/loaders/okx.py:131-208

章节来源 - agent/backtest/loaders/ccxt_loader.py:184-372 - agent/backtest/loaders/binance_loader.py:23-45 - agent/backtest/loaders/okx.py:101-208

市场钩子(资金费率与简易爆仓)

章节来源 - agent/backtest/engines/_market_hooks.py:223-308

证据输出(严格审计)

章节来源 - agent/backtest/perpetual_evidence.py:17-85 - agent/backtest/engines/crypto.py:555-615

依赖关系分析

graph LR Base["BaseEngine"] --> Crypto["CryptoEngine"] Crypto --> Hooks["_market_hooks"] Crypto --> Risk["perpetual_risk"] Crypto --> Evidence["perpetual_evidence"] Crypto --> CCXT["ccxt_loader"] CCXT --> Binance["binance_loader"] CCXT --> OKX["okx_loader"]

图表来源 - agent/backtest/engines/base.py:377-800 - agent/backtest/engines/crypto.py:41-106 - agent/backtest/loaders/ccxt_loader.py:184-372 - agent/backtest/loaders/binance_loader.py:23-45 - agent/backtest/loaders/okx.py:101-208

章节来源 - agent/backtest/engines/base.py:377-800 - agent/backtest/engines/crypto.py:41-106 - agent/backtest/loaders/ccxt_loader.py:184-372

性能与数据质量

章节来源 - agent/backtest/loaders/ccxt_loader.py:50-57 - agent/backtest/loaders/ccxt_loader.py:426-502 - agent/backtest/loaders/okx.py:67-70 - agent/backtest/loaders/okx.py:267-373 - agent/backtest/loaders/ccxt_loader.py:310-372

回测配置与风险管理

关键配置项(加密引擎)

参考测试中的构造方式,可组合上述参数形成不同场景的回测配置。

章节来源 - agent/backtest/engines/crypto.py:41-69 - agent/tests/test_crypto_engine.py:42-66

风险管理设置建议

章节来源 - agent/backtest/perpetual_risk.py:181-192 - agent/backtest/engines/_market_hooks.py:223-308 - agent/backtest/engines/crypto.py:116-140

实盘对接注意事项

章节来源 - agent/backtest/loaders/ccxt_loader.py:60-71 - agent/backtest/loaders/okx.py:101-208 - agent/backtest/loaders/binance_loader.py:23-45

故障排查指南

章节来源 - agent/backtest/loaders/ccxt_loader.py:310-372 - agent/backtest/perpetual_risk.py:226-272 - agent/backtest/perpetual_evidence.py:17-85

结论

该加密货币回测引擎在通用回测框架基础上,针对永续合约的特殊性实现了完整的规则与风控体系: - 24/7交易、无涨跌停限制、高波动与流动性风险被显式建模 - 资金费率与爆仓机制通过数据驱动与严格风险快照保障准确性 - 多交易所数据源集成(CCXT/OKX/Binance)提升灵活性与鲁棒性 - 证据输出为策略审计与问题定位提供可靠依据

建议在实盘中结合交易所API特性与风控要求,进一步细化滑点、流动性与延迟模型,并完善下单前风控与审计日志。