QIFI协议规范
QIFI: Quantaxis Differential Information Flow for Finance Integration QUANTAXIS统一多市场、多语言账户系统协议
作者: @yutiansut @quantaxis 版本: v2.1.0 最后更新: 2025-10-25
概述
QIFI协议是QUANTAXIS生态系统中的核心账户协议,提供跨语言(Python/Rust/C++)、跨市场(股票/期货/期权)的统一账户表示。
协议特点
跨语言兼容: Python/Rust/C++完全一致的数据结构
完整账户状态: 包含账户、持仓、订单、成交、转账的完整信息
增量更新支持: 通过Diff机制支持高效的状态同步
MongoDB友好: 直接映射到MongoDB文档结构
JSON序列化: 标准JSON格式,便于跨系统传输
核心数据结构
1. QIFI主结构
QIFI是账户的顶层数据结构,包含账户的所有信息:
2. Account - 账户信息
关键公式:
balance=pre_balance+deposit-withdraw+close_profit+position_profit-commissionavailable=balance-margin-frozen_marginrisk_ratio=margin/balance
3. Position - 持仓信息
关键说明:
股票: 只使用多头字段 (
volume_long,open_price_long等)期货: 同时支持多空双向持仓
今昨仓: 区分今仓和昨仓用于上期所平今/平昨规则
4. Order - 订单信息
订单状态:
ALIVE: 活跃订单FINISHED: 完成 (全部成交或撤单)CANCELLED: 已撤销
订单方向:
BUY: 买入SELL: 卖出
开平标志:
OPEN: 开仓CLOSE: 平仓CLOSETODAY: 平今CLOSEYESTERDAY: 平昨
5. Trade - 成交信息
6. Transfer - 转账记录
7. BankDetail - 银行详情
8. Frozen - 冻结信息
QIFI协议使用规范
1. 数据存储
MongoDB存储
QIFI结构直接对应MongoDB文档:
字段命名约定
使用snake_case命名 (
account_cookie,trading_day)时间戳使用纳秒级Unix时间戳 (
insert_date_time,trade_date_time)HashMap的key使用字符串 (
positions,orders,trades)
2. 跨语言兼容性
Python实现
Rust实现
C++实现
3. 增量更新机制
QIFI支持通过Diff枚举进行增量更新:
用途:
WebSocket实时推送
数据库增量更新
前后端状态同步
4. MiniAccount/MiniPosition
为了减少传输数据量,QIFI提供简化版本:
实现要点
1. Python包装器要求
在实现Python包装器时,必须:
保持字段名一致: 与Rust结构体字段名完全一致
保持类型一致:
f64→float,String→str,HashMap→dict保持嵌套结构:
positions,orders,trades使用字典时间戳格式: 使用纳秒级Unix时间戳
2. 数据验证
实现时应验证:
3. 序列化/反序列化
MIFI协议
MIFI (Market Information Flow Interface) 是QIFI的市场数据对应协议,目前在qars2中定义较少,主要包括:
mifi/future.rs: 期货市场信息mifi/stock.rs: 股票市场信息mifi/union.rs: 联合市场信息
注: MIFI协议仍在开发中,未来版本将补充完整定义。
版本兼容性
2.0.x
v2.0
-
✓
2.1.x
v2.1
0.0.45+
✓
参考资源
QARS2源码:
/home/quantaxis/qars2/src/qaprotocol/qifi/Python实现:
QUANTAXIS/QIFI/Rust实现:
qars3::qaprotocol::qifi示例代码:
examples/qarsbridge_example.py
文档维护: @yutiansut @quantaxis 最后审核: 2025-10-25
Last updated
Was this helpful?