CTP网关
字数
692 字
阅读时间
3 分钟
本文档涵盖了 Homalos 交易系统中 CTP 网关的实现。CTP 网关提供与上海期货技术有限公司 CTP 交易平台的连接,支持接收市场数据并执行期货交易的订单。
有关 TTS 网关替代方案的信息,请参阅TTS 网关。
架构概述
CTP 网关由两个主要组件组成,它们协同工作以提供完整的交易功能。
市场数据网关
该类MarketDataGateway
负责处理从 CTP 服务器接收的实时市场数据。它通过事件系统管理订阅、连接状态和数据分发。
订单交易网关
该类OrderTradingGateway
负责处理订单的下单、取消和交易执行报告。它管理从提交到最终状态更新的完整订单生命周期。
订单处理管道
交易网关通过结构化管道处理订单。
连接管理
两个网关都实现了复杂的连接管理,并具有自动重新连接功能。
订阅队列管理
市场数据网关维护订阅队列,以处理在网关准备好之前订阅请求到达的情况:
队列类型 | 目的 | 触发条件 |
---|---|---|
pending_subscriptions | 等待 CTP 确认的符号 | 网关未登录 |
active_subscriptions | 成功订阅符号 | CTP onRspSubMarketData 成功 |
pending_subscription_queue | 缓存的订阅请求 | 网关断开连接 |
事件系统集成
CTP 网关与 Homalos 事件系统深度集成,既消费事件,也生产事件。
活动
网关发布各种事件来通知系统状态变化和数据更新:
事件类型 | 来源 | 数据 |
---|---|---|
MARKET_TICK_RAW | 市场数据网关 | TickData 目的 |
GATEWAY_CONNECTED | 两个网关 | 连接状态 |
GATEWAY_DISCONNECTED | 两个网关 | 断线原因 |
GATEWAY_SUBSCRIPTION_SUCCESS | 市场数据网关 | 符号认购成功 |
CONTRACT_UPDATED | 订单交易网关 | 合同信息 |
配置和设置
CTP 网关需要特定的配置设置才能连接到 CTP 服务器:
必填配置字段
python
default_setting = {
"user_id": "", # CTP account username
"password": "", # CTP account password
"broker_id": "", # Broker identification code
"md_address": "", # Market data server address
"td_address": "", # Trading server address (OrderTradingGateway only)
"appid": "", # Application ID (optional)
"auth_code": "" # Authentication code (optional)
}
地址格式处理
网关会自动将tcp://
未指定协议的地址添加到前面:
python
def _prepare_address(address: str) -> str:
if not any(address.startswith(scheme) for scheme in ["tcp://", "ssl://", "socks://"]):
return "tcp://" + address
return address
构建系统集成
CTP 网关依赖于使用 Meson 构建系统构建的已编译 C++ 扩展:
扩展模块
模块 | 目的 | 构建目标 |
---|---|---|
ctpmd.pyd | 市场数据API绑定 | ctpmd |
ctptd.pyd | 交易API绑定 | ctptd |