EFH
盛立极速行情系统(EFH)是以FPGA硬件技术处理交易所原始行情及行情发布的低延迟系统。为对接盛立 EFH 行情服务软件,DolphinDB 开发了 EFH 插件。通过插件可以将上交所和深交所的 Level-2 实时行情接入 DolphinDB。
安装插件
版本要求
- DolphinDB Server: 2.00.10 及更高版本,支持 Linux x86-64。
安装步骤
在 DolphinDB 客户端中使用
listRemotePlugins
命令查看插件仓库中的插件信息。注意:仅展示当前操作系统和 server 版本支持的插件。若无预期插件,可自行编译(请自行选择对应分支下的插件)或在 DolphinDB 用户社区进行反馈。
login("admin", "123456") listRemotePlugins()
使用
installPlugin
命令完成插件安装。installPlugin("EFH")
使用
loadPlugin
命令加载插件。loadPlugin("EFH")
接口说明
createHandle
语法
createHandle(configPath, handleName, [options])
详情
创建 EFH 句柄。
返回一个 EFH 句柄,用于订阅、取消订阅、连接和关闭。EFH 连接句柄不能重名。
参数
configPath STRING 类型标量,表示 EFH 行情配置文件路径。
警告:如果使用 efvi 模式,且配置的网卡不适配,在 connect
时可能会导致盛立的 SDK crash,在使用前务必确保配置文件中的网卡信息正确。
handleName STRING 类型标量,指定给该 EFH 句柄的名称。
options 一个字典, 类型为 (STRING, BOOL),可选参数。其键支持 "outputRecvTime","outputElapsed"。其中:
- "outputRecvTime" 表示是否获取插件收到行情数据的时间戳。其指定为 dict (, ) 时,
getSchema
获取的表结构中将包含插件收到行情数据的时间戳列。 - "outputElapsed" 表示是否获取 EFH 插件 接收数据处理的时延。其指定为 dict (, ) 时,
getSchema
获取的表结构中将包含插件收到行情数据的时延列时延的定义:"EFH 回调函数返回数据" 到 "准备写入到共享流表前" 这段时间。
getSchema
语法
getSchema(handle, market, dataType)
详情
获取行情数据的表结构。
返回一个表,包含三列:name,typeString 和 typeInt,分别表示该行情表各个字段的名称,类型名和类型枚举值。可以通过该表来创建具有相同结构的共享流表。
如果在 createHandle
中指定了 options,在返回的 schema 中会增加对应的列:
- 如果指定了 outputRecvTime 为 true,则会增加一个 NANOTIMESTAMP 类型列 receivedTime。
- 如果指定了 outputElapsed 为 true,则会增加一个 LONG 类型列 perPenetrationTime。
参数
handle createHandle
返回的连接句柄。
market STRING 类型标量,需要订阅的的市场名称,可以为 "EFH_SSE_LEV2" 表示上交所,"EFH_SZE_LEV2" 表示深交所。
dataType STRING 类型标量,表示行情数据类型:
- 深交所可取以下值:"afterClose","snapshot","order","execution","index","tree","ibrTree","turnover","bondSnapshot","bondOrder","bondExecution"。
- 上交所可取以下值:"snapshot","order","execution","index","tree","option","bondSnapshot","bondTick"。
subscribe
语法
subscribe(handle, outputTable, market, dataType)
详情
订阅具体的行情数据。
注意: EFH 插件是在连接建立前进行订阅,连接建立后无法进行订阅。
参数
handle createHandle
返回的连接句柄。
outputTable 一个共享流表,作为行情数据输出的目标表。流表的结构必须与 getSchema
返回的结构相同。
market STRING 类型标量,需要订阅的的市场名称,可以为 "EFH_SSE_LEV2" 表示上交所,"EFH_SZE_LEV2" 表示深交所。
dataType STRING 类型标量,表示行情数据类型:
- 深交所可取以下值:"afterClose","snapshot","order","execution","index","tree","ibrTree","turnover","bondSnapshot","bondOrder","bondExecution"。
- 上交所可取以下值:"snapshot","order","execution","index","tree","option","bondSnapshot","bondTick"。
unsubscribe
语法
unsubscribe(handle, market, dataType)
详情
取消订阅具体的行情数据。
参数
handle createHandle
返回的连接句柄。
market STRING 类型标量,需要订阅的的市场名称,可以为 "EFH_SSE_LEV2" 表示上交所,"EFH_SZE_LEV2" 表示深交所。
dataType STRING 类型标量,表示行情数据类型:
- 深交所可取以下值:"afterClose","snapshot","order","execution","index","tree","ibrTree","turnover","bondSnapshot","bondOrder","bondExecution"。
- 上交所可取以下值:"snapshot","order","execution","index","tree","option","bondSnapshot","bondTick"。
connect
语法
connect(handle)
详情
建立与 EFH 行情服务器之间的连接,开始接收行情数据。
参数
handle createHandle
返回的连接句柄。
close
语法
close(handle)
详情
关闭一个 EFH 连接句柄,在 close 之后还可以通过接口 getStatus
查看状态。
参数
handle createHandle
返回的连接句柄
delete
语法
delete(handle)
详情
删除一个 EFH 连接句柄,在 delete 之后将无法再次连接。
参数
handle createHandle
返回的连接句柄
getHandle
语法
getHandle(handleName)
详情
通过句柄名称,获取已经创建的 EFH 句柄。
参数
handleName STRING 类型标量,指定给该 EFH 句柄的名称
getStatus
语法
getStatus(handle)
详情
获取对应 EFH 句柄已订阅数据的状态信息。
返回一个表格,包含各种已订阅数据的状态信息,不包含未订阅过的数据类型
列名 | 含义 | 类型 |
---|---|---|
topicType | 订阅的名称 | STRING |
channelNo | OrderTransaction 分 channel 订阅时的 channel 号 | INT |
startTime | 订阅开始的时间 | NANOTIMESTAMP |
endTime | 订阅结束的时间 | NANOTIMESTAMP |
firstMsgTime | 第一条消息收到的时间 | NANOTIMESTAMP |
lastMsgTime | 最后一条消息收到的时间 | NANOTIMESTAMP |
processedMsgCount | 已经处理的消息数 | LONG |
lastErrMsg | 最后一条错误信息 | STRING |
failedMsgCount | 处理失败的消息数 | LONG |
lastFailedTimestamp | 最后一条错误消息发生的时间 | NANOTIMESTAMP |
subscribeInfo | 该订阅涉及的市场和投资品类型 | STRING |
参数
handle createHandle
返回的连接句柄。
getHandleStatus
语法
getHandleStatus()
详情
获取本节点所有 EFH 句柄的状态信息。
返回一个表格,包含各个 handle 的信息
列名 | 含义 | 类型 |
---|---|---|
handleName | 创建 handle 时指定的名称 | STRING |
configPath | 配置文件的路径 | STRING |
createTime | 创建 handle 的时间 | DATETIME |
startTime | 建立连接的时间 | BOOL |
endTime | 关闭连接的时间 | BOOL |
参数
无
使用示例
// 建立 handle
// 建立 handle
handle = createHandle("config.ini", "handle0", dict(["outputRecvTime", "outputElapsed"], [true, true]));
// 订阅上交所的股票快照
schema = getSchema(handle, `EFH_SSE_LEV2, `snapshot);
snapshot_sh_s = streamTable(10000:0, schema[`name], schema[`typeString]);
share snapshot_sh_s as snapshot_sh_s1;
subscribe(handle, snapshot_sh_s1, "EFH_SSE_LEV2", "snapshot");
// 获取已有的 handle
handle = getHandle("handle0");
// 建立连接
connect(handle)
// 查看订阅状态
getStatus(handle)
// 查看 handle 状态
gethandleStatus(handle)
// 关闭连接
close(handle)
// 取消已有的订阅(非必要)
unsubscribe(handle, "EFH_SSE_LEV2", "snapshot");
// 移除 handle
delete(handle)