CTP
综合交易平台(Comprehensive Transaction Platform)简称 CTP,是服务于期货市场的业务管理系统。DolphinDB 提供了对接 CTP 系统的 CTP 插件,用于订阅期货市场数据。
在插件市场安装插件
版本要求
- DolphinDB Server: 2.00.10及更高版本
- OS: Linux
安装步骤
在 DolphinDB 客户端中使用 listRemotePlugins 命令查看插件仓库中的插件信息。
login("admin", "123456") listRemotePlugins()
使用 installPlugin 命令完成插件安装。
installPlugin("ctp")
使用 loadPlugin 命令加载插件。
loadPlugin("ctp")
接口说明
ctp::connect
语法
ctp::connect(ip, port, options)
参数
ip
为字符串标量,CTP 行情服务器的 IP 地址。port
为字符串标量,CTP 行情服务器的端口。options
为字典标量类型,其 key 是一个字符串标量,可以为ConcatTime
,ReceivedTime
,OutputElapsed
, value 为布尔值标量。- 如果
ConcatTime
为true,则会将UpdateTime
和UpdateMillisec
字段合并为一个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。
详情
返回包含所有合约信息的表。
使用示例
使用 loadPlugin 加载插件
loadPlugin("Your_plugin_path/build/PluginCtp.txt")
连接 ctp 服务器
handle = ctp::connect(IP, PORT, dict(["ReceivedTime", "ConcatTime", "OutputElapsed"], [true, true, true]))
获取对应的表结构
schema = ctp::getSchema(handle, `marketData)
创建共享流表
share streamTable(100:0, schema.name, schema.typeInt) as marketDataTable;
订阅
ctp::subscribe(handle, `marketData, marketDataTable, ids);
取消订阅
ctp::unsubscribe(handle, `marketData, ids)
开启订阅后后,查看订阅情况
ctp::getStatus(handle)
使用完成后,手动调用接口释放资源
ctp::close(handle)