Skip to content

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