共计 1206 个字符,预计需要花费 4 分钟才能阅读完成。
开篇定位
abu 量化框架是面向中高频交易的 Python 开源解决方案,相比 vn.py 偏重传统期货 CTP 协议、backtrader 专注离线回测的特点,其核心优势在于:

- 内置基于事件驱动的混合回测引擎(支持 tick 级模拟)
- 提供从因子计算到实盘交易的全链路工具链
- 针对中国市场的多账户风控集成(如券商 PB 系统对接)
事件驱动引擎实现
核心设计
事件驱动架构通过消息队列解耦策略逻辑与市场数据,关键组件包括:
class EventEngine:
def __init__(self):
self._queue = Queue() # 线程安全队列
self._active = False
self._thread = Thread(target=self._run)
def _run(self):
while self._active:
try:
event = self._queue.get(block=True, timeout=1)
self._process(event) # 事件路由
except Empty:
continue
def _process(self, event):
handler = self._handlers.get(event.type)
if handler:
handler(event) # 回调策略逻辑
- 事件类型 :MarketEvent(行情)、SignalEvent(信号)、OrderEvent(报单)
- 性能优化 :使用 numba 加速事件处理循环(可提升 30% 吞吐量)
多周期数据对齐
分钟线与 tick 合成
关键挑战在于不同频率数据的时钟同步,abu 采用:
- 以最高频率数据(如 1s tick)为基准时钟
- 通过 resample 规则生成次级周期数据(如 5min K 线)
- 使用 pandas 的 resample+ffill 避免未来函数
# 示例:tick 合成 5 分钟线
df_tick.resample('5T').agg({
'price': 'ohlc',
'volume': 'sum'
}).dropna()
实盘交易避坑指南
CTP 协议常见问题
- 流控限制 :每秒最多 50 笔查询请求(需缓存柜台状态)
- 订单状态同步 :建议通过 OnRtnTrade 主动查询补全
- 线程安全 :避免在回调函数中直接操作 GUI
性能优化实战
向量化回测对比
测试环境:2020 年全 A 股日线数据(约 4000 只股票)
| 方案 | 耗时 (s) | 内存峰值 (MB) |
|---|---|---|
| 传统循环 | 218 | 3200 |
| abu 向量化 | 17 | 890 |
优化关键:
- 使用 pandas.eval() 避免临时变量
- 对因子计算应用 numba.jit
生产环境 Checklist
- 硬件准备
- 物理机部署(避免云主机时钟漂移)
-
万兆网卡(tick 级策略必需)
-
监控项
- 订单响应延迟(<50ms 为优)
-
内存泄漏检测(valgrind 工具)
-
灾备方案
- 策略进程守护脚本
- 柜台断线自动重连
开放式思考题
- 如何扩展自定义数据源(如加密货币 websocket)?
- 在 tick 级交易中如何平衡延迟与滑点 (slippage)?
- 多账户组合风控的权重分配策略有哪些优化方向?
正文完
