在 vn.py 框架中,行情数据的获取是通过“gateway(接口适配器)”模块完成的。其流程和机制如下:
1. gateway模块作用
gateway模块对接各类交易所、券商的行情API(如CTP、IB、Futu等),负责: - 连接行情服务器 - 订阅指定合约的行情 - 接收并解析Tick、K线等实时行情数据 - 将原始API数据转换为vn.py统一的数据结构(如TickData、BarData)
2. 获取行情数据的主要流程
-
配置并加载gateway模块
用户在vn.py客户端界面或配置文件中选择、配置所需的行情接口(如CTP、IB等),输入服务器、账号、密码等信息。 -
连接行情服务器
gateway模块根据用户配置,调用底层API登录行情服务器,建立连接。 -
订阅行情合约
用户在界面或代码中选择需要订阅的合约(如“rb2310.SHFE”),gateway向服务器发送订阅请求。 -
接收行情推送
交易所或券商服务器会持续推送所订阅合约的行情(Tick、K线等)。gateway模块负责接收这些推送。 -
数据标准化与分发
gateway模块将原始API数据解析,转换为vn.py统一的数据对象(TickData、BarData等),并通过事件引擎(event)广播到系统内所有订阅者(如策略、数据录制器等)。
3. 关键代码与组件(示例)
- gateway目录下的实现:如
vnpy/gateway/ctp/ctp_gateway.py
负责CTP行情采集 - 订阅方法:通常为
subscribe()
,如:python # 假设已连接并登录 req = SubscribeRequest(symbol="rb2310", exchange=Exchange.SHFE) main_engine.subscribe(req, "CTP")
- 事件推送:行情数据被推送为事件,如
EVENT_TICK
,策略或其他模块通过订阅这些事件获取实时行情。
4. 支持的数据类型
- Tick数据(逐笔行情)
- Bar数据(K线,分钟线、日线等)
- 部分接口还支持盘口、委托队列等更细粒度行情
5. 相关文档与入口
- 详见仓库
docs/community/info/introduction.md
关于 gateway 的章节 - 各 gateway 目录下的代码实现与注释(如
vnpy/gateway/ctp/
)
总结:
vn.py通过gateway模块对接各类交易所/券商API,自动完成行情数据的订阅、接收、解析与标准化,最终通过事件机制分发给系统内所有需要行情数据的模块,实现了高效、可扩展的行情获取体系。