DataFeed

DolphinDB DataFeed 插件通过集成中金所提供的 SDK 来接收非展示型行情源数据,并将数据存入 DolphinDB 的数据表。该插件使用组播方式接收数据。

插件依赖第三方库 libdatafeed_multi_api.so。

安装插件

版本要求

DolphinDB Server:2.00.10 及更高版本,支持 Linux x64。

安装步骤

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

    注意:仅展示当前操作系统和 server 版本支持的插件。若无预期插件,可自行编译(请自行选择对应分支下的插件)或在 DolphinDB 用户社区进行反馈。

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

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

    loadPlugin("DataFeed")

接口说明

createHandle

语法

createHandle(addr , userName, password, logLevel, logFileName, [config])

详情

创建一个句柄,用于后续操作,例如订阅,取消订阅等。注意:只能创建一个。

参数

addr STRING 类型向量,表示后台服务器地址。服务器地址的格式为:"protocol://ipaddress:port",如:"tcp://127.0.0.1:17001"。 "tcp" 代表传输协议,"127.0.0.1" 代表服务器地址,"17001" 代表服务器端口号。

userName STRING 类型标量,表示用户名。

password STRING 类型标量,表示密码。

logLevel 整型标量,表示日志级别,在[0, 5]中取值,分别表示 FATAL, ERROR, WARNING, INFO, DEBUG, TRACE。

logFileName STRING 类型标量,用于指定存储 DataFeed 日志的文件。

config:一个字典, 类型为 (STRING, BOOL),可选参数。其键支持 "receiveTime","OutputElapsed"。其中:

  • "receiveTime" 表示是否获取插件收到行情数据的时间戳。其指定为 dict(["receiveTime"], [true]) ,且 getSchema 指定 needReceiveTime=true 时,获取的表结构中将包含插件收到行情数据的时间戳列。

  • "OutputElapsed" 表示是否获取插件从收到行情到准备插入流表的时延,单位是纳秒。其指定为 dict(["OutputElapsed"], [true]),且 getSchema 指定 needElapsedTime=true 时,获取的表结构中将包含时延列。

subscribe

语法

DataFeed::subscribe(handle, hostIP, table)

详情

开始订阅行情数据,将数据存到 table 中。

参数

handlecreateHandle 返回的句柄。

hostIP STRING 类型标量,表示用户本地 IP 地址,用来校验地址以及指定组播接收网卡。注意:请保证传入的 IP 地址合法,且相应网卡已使能组播,否则无法收到数据。

table 共享内存表或共享流表,表结构可由 getSchema 接口获取。

unsubscribe

语法

DataFeed::unsubscribe(handle)`

详情

取消订阅。

参数

handlecreateHandle 返回的句柄。

close

语法

DataFeed::close(handle)

详情

断开连接,销毁该 handle

参数

handlecreateHandle 返回的句柄。

getHandle

语法

DataFeed::getHandle()

详情

返回可用的句柄。如果没有可用句柄,则抛出异常。

getStatus

语法

DataFeed::getStatus()

详情

获取订阅数据的状态信息。返回一个表格,结构为:

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

getSchema

语法

DataFeed::getSchema([needReceiveTime], [needElapsedTime])

详情

返回存放行情的表的结构信息。返回一个表,包含三列:name,typeString 和 typeInt,分别表示该行情表中字段的名字,字段类型的名称和类型的枚举值。

nametypeStringtypeInt
1TradingDaySYMBOL17
2InstrumentIDSYMBOL17
3SettlementGroupIDSYMBOL17
4SettlementIDINT4
5LastPriceDOUBLE16
6PreSettlementPriceDOUBLE16
7PreClosePriceDOUBLE16
8PreOpenInterestDOUBLE16
9OpenPriceDOUBLE16
10HighPriceDOUBLE16
11LowPriceDOUBLE16
12VolumeINT4
13TurnoverDOUBLE16
14OpenInterestDOUBLE16
15ClosePriceDOUBLE16
16SettlementPriceDOUBLE16
17UpperLimitPriceDOUBLE16
18LowerLimitPriceDOUBLE16
19PreDeltaDOUBLE16
20CurrDeltaDOUBLE16
21UpdateTimeSYMBOL17
22UpdateMsecINT4
23BidPriceDOUBLE[]80
24BidVolumeINT[]68
25AskPriceDOUBLE[]80
26AskVolumeINT[]68
27BandingUpperPriceDOUBLE16
28BandingLowerPriceDOUBLE16
29receiveTime(可选)NANOTIMESTAMP14
30OutputElapsed (可选)NANOTIMESTAMP14

参数

needReceiveTime 可选参数,BOOL 类型标量, 表示是否需要包含 receiveTime 列,默认为 false。如果在 createHandle 时,指定了 receiveTime,则需要将该参数设置为 true。

needElapsedTime 可选参数,BOOL 类型标量, 表示是否需要包含 OutputElapsed 列,默认为 false。如果在 createHandle 时,指定了 OutputElapsed,则需要将该参数设置为 true。

完整示例

handle = DataFeed::createHandle(["tcp://10.15.14.15:9001"], "user", "password", 3, "/home/logPath/log.log")

share  table(1:0, `TradingDay`InstrumentID`SettlementGroupID`SettlementID`LastPrice`PreSettlementPrice`PreClosePrice`PreOpenInterest`OpenPrice`HighPrice`LowPrice`Volume`Turnover`OpenInterest`ClosePrice`SettlementPrice`UpperLimitPrice`LowerLimitPrice`PreDelta`CurrDelta`UpdateTime`UpdateMsec`BidPrice`BidVolume`AskPrice`AskVolume`BandingUpperPrice`BandingLowerPrice, [SYMBOL, SYMBOL, SYMBOL, INT, DOUBLE, DOUBLE, DOUBLE, DOUBLE, DOUBLE, DOUBLE, DOUBLE, INT, DOUBLE, DOUBLE, DOUBLE, DOUBLE, DOUBLE, DOUBLE, DOUBLE, DOUBLE, SYMBOL, INT, DOUBLE[], INT[], DOUBLE[], INT[], DOUBLE, DOUBLE]) as depthMDTable

DataFeed::subscribe(handle, "10.115.11.114", depthMDTable)

DataFeed::getStatus()
DataFeed::close(handle)