CTP

综合交易平台(Comprehensive Transaction Platform)简称 CTP,是服务于期货市场的业务管理系统。DolphinDB 提供了对接 CTP 系统的 CTP 插件,用于订阅期货市场数据。

在插件市场安装插件

版本要求

  • DolphinDB Server: 2.00.10及更高版本
  • OS: Linux

安装步骤

  1. 在 DolphinDB 客户端中使用 listRemotePlugins 命令查看插件仓库中的插件信息。

    login("admin", "123456")
    listRemotePlugins()
  2. 使用 installPlugin 命令完成插件安装。

    installPlugin("ctp")
  3. 使用 loadPlugin 命令加载插件。

    loadPlugin("ctp")

接口说明

ctp::connect

语法

ctp::connect(ip, port, options)

参数

  • ip 为字符串标量,CTP 行情服务器的 IP 地址。

  • port 为字符串标量,CTP 行情服务器的端口。

  • options 为字典标量类型,其 key 是一个字符串标量,可以为 ConcatTime, ReceivedTime, OutputElapsed, value 为布尔值标量。

    • 如果 ConcatTime 为true,则会将 UpdateTimeUpdateMillisec字段合并为一个 tradeTime 字段置于表末尾,类型为 TIME。
    • 如果 ReceivedTime 为true,则会将接收到数据的时间作为一个字段置于表末尾,类型为 NANOTIMESTAMP。默认为true。
    • 如果 OutputElapsed 为true,则会将数据进入插件,到插入流表前的时间间隔作为一个字段置于表末尾,类型为 LONG。

详情

创建一个和 CTP 行情服务器之间的连接,返回一个句柄。如果该 ip 和 port 对应的账户已经建立了连接,则会直接返回已经建立了连接的 handle。注意,通过这种方式获得的 handle,它的 option 可能会与期望 option 不同,可以在 log 中查看返回 handle 的具体 option。

ctp::subscribe

语法

ctp::subscribe(ctpHandle, dataType, outputTable, ids)

参数

  • ctpHandle connect 接口返回的句柄。

  • dataType 需要订阅的数据类型,目前只支持 marketData

  • outputTable 输出表,为共享流表

  • ids 字符串向量,表示由合约 ID 组成的数组。

详情

订阅指定合约 ID 的数据到由 connect 指定的流表中。

ctp::unsubscribe

语法

ctp::unsubscribe(ctpHandle, dataType, ids)

参数

  • ctpHandle connect 接口返回的句柄。

  • dataType 需要取消订阅的数据类型,目前只支持 marketData

  • ids 字符串向量,表示由合约 ID 组成的数组。

详情

取消订阅指定合约 ID 的数据。

ctp::close

语法

ctp::close(ctpHandle)

参数

  • ctpHandle connect 接口返回的句柄。

详情

关闭当前连接。

ctp::getSchema

语法

ctp::getSchema(handle, type)

参数

  • ctpHandle connect 接口返回的句柄。

  • type 字符串标量,表示行情(marketData)或者询价等,当前只支持行情。

详情

返回一个表,包含两列:name 和 type,分别表示该类型表结构的名字和类型。通过该表来创建具有相同结构的共享流表。

ctp::getStatus

语法

ctp::getStatus(handle)

参数

  • handle connect 接口返回的句柄。

详情

返回一个dict,包含两个键值对

subStatus键对应的是一个 8 列的表格

列名含义类型
topicName订阅的名称STRING
startTime订阅开始的时间NANOTIMESTAMP
endTime订阅结束的时间NANOTIMESTAMP
firstMsgTime第一条消息收到的时间NANOTIMESTAMP
lastMsgTime最后一条消息收到的时间NANOTIMESTAMP
processedMsgCount已经处理的消息数LONG
lastErrMsg最后一条错误信息STRING
failedMsgCount处理失败的消息数LONG
lastFailedTimestamp最后一条错误消息发生的时间NANOTIMESTAMP

ids键对应的是一个STRING VECTOR,里面为目前订阅的所有合约

ctp::queryInstrument

语法

ctp::queryInstrument(ip, port, userID, password, brokerID, appID, authCode, [exchangeID], [waitTimes]);

参数

  • ip 为字符串标量,CTP 交易服务器的 IP 地址。

  • port 为整型标量,CTP 交易服务器的端口。

  • userID 为字符串标量,指用户代码。

  • password 为字符串标量,指密码。

  • brokerID 为字符串标量,指经纪公司代码。

  • appID 为字符串标量,指客户端认证的App代码。

  • authCode 为字符串标量,指客户端认证请求的认证码。

  • exchangeID 可选参数,为字符串标量,指交易所代码,如果指定了则只会查询对应交易所的合约。

  • waitTimes 可选参数,为整型标量,指查询最大等待时间,单位为秒,默认为10。

详情

返回包含所有合约信息的表。

使用示例

  1. 使用 loadPlugin 加载插件

    loadPlugin("Your_plugin_path/build/PluginCtp.txt")
  2. 连接 ctp 服务器

    handle = ctp::connect(IP, PORT, dict(["ReceivedTime", "ConcatTime", "OutputElapsed"], [true, true, true]))
  3. 获取对应的表结构

    schema = ctp::getSchema(handle, `marketData)
  4. 创建共享流表

    share streamTable(100:0, schema.name, schema.typeInt) as marketDataTable;
  5. 订阅

    ctp::subscribe(handle, `marketData, marketDataTable, ids);
  6. 取消订阅

    ctp::unsubscribe(handle, `marketData, ids)
  7. 开启订阅后后,查看订阅情况

    ctp::getStatus(handle)
  8. 使用完成后,手动调用接口释放资源

    ctp::close(handle)