架构设计¶
AKQuant 采用高性能的 Rust + Python 混合架构。Rust 负责底层的密集计算、内存管理、事件调度和风控拦截,Python 负责上层的策略定义、数据交互和分析可视化。这种设计在保证极致执行效率的同时,维持了 Python 生态的灵活性。
1. 系统分层¶
Rust 核心层 (akquant_core)¶
- Engine: 事件驱动的核心撮合引擎,采用二进制堆 (BinaryHeap) 管理事件队列,确保时间精确性。
- DataFeed: 高性能数据引擎,支持流式加载 (Streaming CSV) 和 Pandas DataFrame 直接映射,尽可能实现零拷贝内存访问。
- Event Bus: 基于 Rust Channel (
mpsc) 实现的事件总线,解耦策略、风控、执行和数据组件。支持OrderRequest(请求),OrderValidated(风控通过),ExecutionReport(执行报告) 等事件的异步流转。 - RiskManager: 独立拦截层,在 Rust 引擎层直接拦截违规订单,支持 T+1 可用持仓检查、资金限制等。
- Portfolio: 独立的投资组合管理,实时维护持仓 (
Position) 和 账户资金 (Account),自动处理盈亏计算。 - MarketModel: 可插拔的市场模型,内置 A 股 (T+1) 和 期货 (T+0) 规则,支持多资产混合回测。
接口层 (PyO3)¶
- 利用
PyO3将 Rust 的核心结构体 (Engine,StrategyContext,Bar,Order) 暴露为 Python 类。 - Zero-Copy Access: 利用 Rust 的
arrow和numpy视图技术,历史数据 (ctx.history) 通过 PyO3 Buffer Protocol 直接映射 Rust 内存,Python 端访问 OHLCV 和计算指标时无需内存复制,大幅提升性能。
Python 用户层¶
- Strategy API: 提供简洁的
Strategy基类,支持on_bar,on_order,on_trade等回调。 - ML Framework: 内置
akquant.ml模块,提供 Walk-forward Validation (滚动训练) 框架,统一 Scikit-learn 和 PyTorch 接口。 - Data API: 兼容 Pandas 生态,支持从 CSV、Parquet 或内存 DataFrame 加载数据。
- Analysis: 集成 Plotly/Matplotlib 进行交互式可视化,提供丰富的绩效指标 (
PerformanceMetrics) 和交易分析 (TradeAnalyzer)。
2. 核心模块与特性¶
2.1 极致性能¶
- Rust 核心: 核心回测引擎采用 Rust 编写,避免了 Python GIL 的限制。
- 基准测试: 在 200k K线数据的 SMA 策略回测中,AKQuant 耗时仅 1.31s (吞吐量 ~152k bars/sec),相比 Backtrader (26.55s) 快约 20倍。
- 增量计算: 内部状态和指标计算采用增量更新算法,而非全量重算,适合超长历史回测。
2.2 事件驱动与仿真¶
- Timer: 支持
schedule(timestamp, payload)注册定时事件,触发on_timer回调,实现复杂的盘中定时逻辑(如:每日 14:50 平仓)。 - ExecutionMode: 支持
CurrentClose(信号当根K线收盘成交) 和NextOpen(次日开盘成交) 模式。 - 滑点模型 (Slippage): 支持 Fixed (固定金额) 和 Percent (百分比) 滑点模型,模拟真实交易成本。
- 成交量限制 (Volume Limit): 支持按 K 线成交量比例限制单笔撮合数量,并实现分批成交 (Partial Fill)。
2.3 严密的风控系统¶
- T+1 严格风控: 针对股票/基金,严格执行 T+1 可用持仓检查,防止当日买入当日卖出(除非配置为 T+0 市场)。
- 可用持仓管理: 自动维护
available_positions,并扣除未成交的卖单冻结数量,防止超卖。 - 灵活配置: 通过
RiskConfig可配置最大单笔金额、最大持仓比例、黑名单等。
2.4 机器学习 (Machine Learning First)¶
- 内置训练框架: 内置完整的 ML Pipeline,不同于传统框架仅支持简单的技术指标。
- Walk-forward Validation: 原生支持滚动窗口训练,有效防止未来函数和过拟合。
- Adapter Pattern: 提供了
QuantModel适配器,解耦模型与策略逻辑,只需几行代码即可接入 AI 模型。
2.5 数据生态¶
- Streaming CSV: 支持流式加载超大 CSV 文件 (
DataFeed.from_csv),极大降低内存占用。 - Pandas 集成: 支持直接加载 Pandas DataFrame 数据,兼容各类数据源。
- 智能缓存: 支持数据本地缓存 (Pickle),避免重复下载,加速策略迭代。
3. 目录结构¶
akquant/
├── Cargo.toml # Rust 依赖管理
├── pyproject.toml # Python 构建系统 (maturin)
├── src/ # Rust 源代码
│ ├── lib.rs # PyO3 入口点
│ ├── model/ # 数据模型 (Order, Trade, Instrument, Bar 等)
│ ├── data.rs # 数据源 (DataFeed)
│ ├── engine.rs # 回测核心引擎
│ ├── event.rs # 事件定义与总线消息
│ ├── clock.rs # 交易时钟
│ ├── execution.rs # 交易所模拟与订单撮合
│ ├── market.rs # 市场规则 (费率、T+1/T+0)
│ ├── portfolio.rs # 资金与持仓管理
│ ├── risk.rs # 风控管理 (RiskManager)
│ ├── context.rs # 策略交互上下文
│ ├── history.rs # 历史数据管理 (Zero-Copy View)
│ ├── analysis.rs # 绩效指标计算
│ └── indicators.rs # 高性能指标实现
├── python/ # Python 源代码
│ └── akquant/
│ ├── ml/ # 机器学习适配器
│ ├── __init__.py
│ ├── akquant.pyi # 类型提示文件
│ ├── backtest.py # 回测入口
│ ├── strategy.py # 策略基类
│ ├── indicator.py# 指标包装
│ ├── optimize.py # 参数优化
│ └── ... # 其他辅助模块
└── examples/ # 使用示例
4. 技术栈选型¶
- Rust:
pyo3: 生成 Python 绑定。polars/arrow: 高性能列式数据存储。rayon: 多资产回测的并行处理。serde: 序列化支持。
- Python:
maturin: 构建后端。pandas/numpy: 面向用户的数据处理。plotly: 交互式可视化。