ctpRisk

综合交易平台(Comprehensive Transaction Platform,CTP)是上海期货信息技术有限公司开发的核心交易系统,目前是国内期货市场应用最广泛的交易柜台,为期货公司提供交易、风控、结算等一体化业务解决方案。

为对接 CTP 系统,DolphinDB 已开发 CTP 插件,用于订阅期货市场的实时行情数据、查询商品信息。在此基础上,DolphinDB 推出基于 CTP RiskAPI 开发的 ctpRisk 插件,用于实时获取 CTP 的用户事件数据,实现风险监控。

安装插件

版本要求

DolphinDB Server 2.00.17/3.00.4 及更高版本,支持 Linux x86_64 和 Linux x86_64 ABI。

安装步骤

  1. 使用 listRemotePlugins 函数查看可供安装的插件。

    login("admin", "123456");
    listRemotePlugins();
  2. 使用 installPlugin 函数安装插件。

    installPlugin("ctpRisk");
  3. 使用 loadPlugin 函数加载插件。
    loadPlugin("ctpRisk");

接口说明

connect

语法

ctpRisk::connect(id, host, port, brokerID, userID, password, [options])

详情

创建一个和 CTP 行情服务器之间的连接,返回一个句柄。

参数

id STRING 标量,指定全局唯一的连接 ID。

host STRING 标量或向量,指定行情服务器的 IP 地址。

port INT 标量或向量,指定行情服务器的监听端口,长度必须与 host 相同。

brokerID STRING 标量,指定期货公司的 ID。

userID STRING 标量,指定客户的 ID。

password STRING 标量,指定登录密码。

options 可选参数,键为 STRING 类型的字典,支持以下键值对:

键 值类型 说明

"flowPath"

STRING

SDK 状态文件目录。默认为 dolphindb 可执行文件的同目录。

"timeoutMs"

INT

连接及登录等待上限,默认值 10000,最小值 5000,单位为毫秒。

"ReceivedTime"

BOOL

指定是否增加一列表示接收到数据的时间,类型为 NANOTIMESTAMP。true 表示增加该列;默认为 false,表示不增加。

"OutputElapsed"

BOOL

指定是否增加一列表示插件从收到行情开始到准备插入流表为止的延时,单位为纳秒,类型为 LONG。true 表示增加该列;默认为 false,表示不增加。

返回值

一个连接句柄。

subscribe

语法

ctpRisk::subscribe(handle, dataType, outputTable, [startSequence])

详情

订阅指定类别的数据。

参数

handle connect 接口返回的连接句柄。

dataType STRING 标量,指定需要订阅的数据类别,目前只支持 "UserEvent"。

outputTable 共享流数据输出表。表必须与 getSchema 返回的表在列名、列顺序和列类型上完全一致。

startSequence 可选参数,非负 INT 标量,指定事件序号,即指订阅数据的起始位置,默认为 0。

返回值

无

getSchema

语法

ctpRisk::getSchema(dataType, [options])

详情

获取输出表的表结构。

参数

dataType STRING 标量,指定需要订阅的数据类别,目前只支持 "UserEvent"。

options 可选参数,键为 STRING 类型的字典,支持以下键值对:

键 值类型 说明

"ReceivedTime"

BOOL

指定是否增加一列表示接收到数据的时间,类型为 NANOTIMESTAMP。true 表示增加该列;默认为 false,表示不增加。

"OutputElapsed"

BOOL

指定是否增加一列表示插件从收到行情开始到准备插入流表为止的延时,单位为纳秒,类型为 LONG。true 表示增加该列;默认为 false,表示不增加。

返回值

包含 name、typeString、typeInt 三列的表。

getStatus

语法

ctpRisk::getStatus(handle)

详情

获取订阅状态。

参数

handleconnect 接口返回的连接句柄。

返回值

一张表,其结构如下所示:

列名 类型 说明

conn

STRING

连接名称

quotationType

STRING

订阅类型

startTime

NANOTIMESTAMP

订阅开始的时间

lastMsgTime

NANOTIMESTAMP

收到最后一条消息的时间

processedMsgCount

LONG

已经处理的消息数

lastErrMsg

STRING

最后一条错误信息

failedMsgCount

LONG

处理失败的消息数

lastFailedTimestamp

NANOTIMESTAMP

最后一条错误消息发生的时间

getHandle

语法

getHandle([id])

详情

获取当前已有的连接句柄。

参数

id 可选参数,STRING 标量,指定连接 ID,对应于调用 connect 接口时指定的 id。

返回值

  • 指定 id 时,返回该 id 对应的连接句柄。

  • 不指定 id 时,返回一个字典,包含所有当前存在的连接句柄。

close

语法

ctpRisk::close(handle)

详情

关闭连接。

参数

handle connect 接口返回的连接句柄。

返回值

无

示例

loadPlugin("ctpRisk")

connectOption = dict(STRING, ANY)
connectOption["flowPath"] = "/home/test/con"

handle = ctpRisk::connect("test", "222.xxx.xx.xx", 50001, "0292", "user1", "123456", connectOption)

tschema = ctpRisk::getSchema("UserEvent")

t = streamTable(1:0, tschema.name, tschema.typeInt)
share t as outputTable

ctpRisk::subscribe(handle1, "UserEvent", outputTable)

select count(*) from outputTable
select top 10 *  from outputTable

ctpRisk::close(handle)