XTPPro
通过 DolphinDB 的 XTPPro 插件,用户可以接收上交所、深交所以及北交所的实时行情,并将数据存储于 DolphinDB 的共享表中。可接收的数据如下表所示:
|
指数 |
股票 |
基金 |
债券 |
期权 |
|
|---|---|---|---|---|---|
|
快照 |
有 |
有 |
有 |
有 |
有 |
|
逐笔 |
无 |
有 |
有 |
有 |
无 |
|
订单簿 |
无 |
有 |
有 |
有 |
无 |
本插件依赖中泰证券提供的第三方库 libxtpxquoteapi.so。
安装插件
版本要求
DolphinDB Server 2.00.19 和 3.00.6 及更高版本。支持 Linux x64。支持 Linux_ABI 特性。
使用前应准备以下信息:
-
可登录的 XTP-Pro 行情账户、服务器 IP 和端口,以及相应的行情权限。
-
DolphinDB 进程可写的日志目录。
-
使用 UDP 时,准备 XTP-Pro SDK 要求的配置文件、对应的本地网卡和行情网络。配置文件需位于 DolphinDB 服务器上。
安装步骤
-
在 DolphinDB 客户端中使用
listRemotePlugins命令查看插件仓库中的插件信息。注意:仅展示当前操作系统和 server 版本支持的插件。若无预期插件,可自行编译(请选择对应分支下的插件)或在 DolphinDB 用户社区进行反馈。
login("yourUser", "yourPassword") listRemotePlugins() -
使用
installPlugin命令完成插件安装。installPlugin("XTPPro") -
使用
loadPlugin命令加载插件。loadPlugin("XTPPro")
接口说明
setGlobalConfig
语法
XTPPro::setGlobalConfig(clientId, saveFilePath, [logLevel=3], [udpSeqOutput=false])
详情
设置一些全局配置项。在创建句柄前必须调用至少一次。无返回值。
在调用该接口时不能有已创建的句柄。第一次登录尝试后,修改日志路径、日志级别或 UDP 序列日志开关需要重启 DolphinDB 进程才能生效。
参数
clientId INT 类型标量,1-99 之间取值,表示客户端 ID。如果需要在多个 DolphinDB 进程中使用同一个账户去连接,则需要使用不同的 clientId。
saveFilePath STRING 类型标量,表示存储日志文件的目录,要求必须存在且有可写权限。
logLevel INT 类型标量,表示 xtp 记录日志的级别,0-5 之间取值,分别对应 FATAL ERROR WARNING INFO DEBUG TRACE 级别,默认是 3。
udpSeqOutput BOOL 类型标量,设定 UDP 方式接收行情时,是否输出序列相关异步日志,默认为 false。
createXTPConnection
语法
XTPPro::createXTPConnection(name, [config])
详情
返回一个连接句柄,可用于登录,订阅数据。
参数
name STRING 类型标量,连接句柄的唯一标识符,不能为空,也不能重复。
config 一个 key 类型为 STRING 的字典,包含如下所示的配置项:
|
配置项 |
值类型 |
说明 |
|---|---|---|
|
receiveTime |
整型 |
可选参数,用于设定是否将接收到数据的时间添加为表的最后一列,类型为 NANOTIMESTAMP。1:增加该列;其它不增加;默认不增加。 |
|
OutputElapsed |
整型 |
可选参数,用于设定是否为行情表增加最后一列。该列数据类型为 LONG,表示插件从收到行情开始到准备插入流表为止的延时,单位为纳秒。1 表示增加该列;其它不增加,默认不增加。 |
login
语法
XTPPro::login(conn, config)
详情
连接 XTP-Pro 服务器并登录。无返回值。
注意事项(摘自 XTP 官方文档):
-
测试环境使用 TCP 的方式推送行情。由于带宽的限制,建议客户只订阅少量股票,否则会出现推送延时、断线等问题。
-
XTP 提供的 API 的默认日志级别是 DEBUG,需要调整到 INFO(或 ERROR),否则可能会导致丢包。本插件已将默认级别调整到 INFO,在调试时可以设置为 DEBUG。
参数
conn 由 createXTPConnection 接口返回的句柄。
config 一个 key 类型为 STRING 的字典,包含一些配置项:
|
配置项 |
值类型 |
说明 |
|---|---|---|
|
ip |
字符串 |
服务器 IP 地址 |
|
port |
整型 |
服务器端口号 |
|
localIP |
字符串 |
可选参数,本地网卡地址。不填或填空字符串时,由 SDK 选择本地地址。 |
|
user |
字符串 |
登录用户名 |
|
password |
字符串 |
登录密码 |
|
protocolType |
整型 |
1: TCP;2: UDP |
|
heartBeatInterval |
整型 |
可选参数,设置心跳检测时间间隔,单位为秒。默认填 30。必须大于 0。 |
|
configFilePath |
字符串 |
UDP 方式时必填,XTP-Pro SDK 配置文件的绝对路径。文件必须已存在,并对 DolphinDB 进程可读。 |
subscribe
语法
XTPPro::subscribe(conn, quoteType, marketType, codeList, tableDict)
详情
订阅行情数据,收到数据后存储到目标表中。无返回值。
注意事项:
-
订阅同一个行情类型时,在多次订阅上证、深证市场时,要求传入的 tableDict 相同,如果不同,则以第一次订阅传入的 tableDict 为准。
-
订阅同一个行情类型时,在多次订阅新三板市场时,要求传入的 tableDict 相同,如果不同,则以第一次订阅传入的 tableDict 为准。
-
订阅同一个行情类型时,市场类型如果已订阅了 5(上证+深证)则不能再次订阅 1(上证)或 2(深证)。
-
订阅同一个行情类型时,市场类型如果已订阅了 1(上证)或 2(深证)则不能再次订阅 5(上证+深证)。
-
如果 marketType 填为 5,则不能填非空的 codeList。
-
各目标表的 schema 可以通过
getSchema接口获取。 -
目标表要求是共享表。
-
公网测试环境仅供客户调试 API 接口,没有订单簿 OB 行情。
参数
conn 由 createXTPConnection 接口返回的句柄。
quoteType INT 类型标量,表示行情类型。1:快照,2:逐笔,3:订单簿。
marketType INT 类型标量,表示市场类型。1:上证, 2:深证,3:新三板,5:上证+深证。
marketType=3 对应北交所及全国股转系统,仅支持通过 UDP 接收快照。
codeList STRING 类型向量或空值,表示合约 ID 数组。如果填 NULL 或空向量,则订阅全市场数据。
tableDict 一个字典,key 类型是 STRING,除 TickByTickTable 可使用通道字典外,value 必须是共享表,用来指定输出表。根据行情类型的不同,输出表的数量也不同。首次订阅时,如果空缺其中若干表,则相对应的行情会被丢弃,详情如下表所示:
|
行情类型 |
key |
说明 |
|---|---|---|
|
快照 |
indexTable、optionTable、actualTable、bondTable |
指数快照表、期权快照表、现货快照表(股票/基金等)、债券快照表 |
|
快照(marketType=3) |
BSEMarketData |
北交所及全国股转系统快照表,必须配置此键 |
|
逐笔 |
entrustTable、tradeTable、statusTable、TickByTickTable |
逐笔委托表、逐笔成交表、逐笔状态表、逐笔合并表 |
|
订单簿 |
orderBookTable |
订单簿表 |
注意:TickByTickTable 即逐笔合并表,其包含收到的三种逐笔数据(委托、成交、状态),在订阅逐笔数据时,tableDict 如果指定了 “TickByTickTable”,就会忽略其它的表。当 key 为 “TickByTickTable” 时,value 分成两种情况:
-
value 为一个表,即包含收到的所有数据。
-
value 为一个字典,该字典的键为整型,表示 channelNo,值是共享表,会将收到数据按照 channelNo 进行分类,放到不同的表中。
unsubscribe
语法
XTPPro::unsubscribe(conn, quoteType)
详情
取消订阅某个类型的行情数据。无返回值。
参数
conn 由 createXTPConnection 接口返回的句柄。
quoteType INT 类型标量,表示行情类型。1:快照;2:逐笔;3:订单簿。
getStatus
语法
XTPPro::getStatus([conn])
详情
获取订阅的状态信息。返回一个表,表结构如下所示:
|
列名 |
含义 |
类型 |
|---|---|---|
|
conn |
连接名称 |
STRING |
|
quotationType |
行情类型:MarketData、TickByTick 或 OrderBook |
STRING |
|
startTime |
订阅开始的时间 |
NANOTIMESTAMP |
|
endTime |
订阅结束的时间 |
NANOTIMESTAMP |
|
lastMsgTime |
最近一条成功写入目标表的消息的处理时间 |
NANOTIMESTAMP |
|
processedMsgCount |
成功写入目标表的消息数 |
LONG |
|
lastErrMsg |
最后一条错误信息 |
STRING |
|
failedMsgCount |
处理失败的消息数 |
LONG |
|
lastFailedTimestamp |
最后一条错误消息发生的时间 |
NANOTIMESTAMP |
参数
conn 由 createXTPConnection 接口返回的句柄,可选参数。如果不填,则返回当前所有连接的状态信息。
getHandle
语法
XTPPro::getHandle(name)
详情
返回由 name 指定的连接句柄。
参数
name STRING 类型标量,表示连接句柄的唯一标识符。
closeXTPConnection
语法
XTPPro::closeXTPConnection(conn)
详情
断开连接,销毁句柄。
参数
conn 由 createXTPConnection 接口返回的句柄。
getSchema
语法
XTPPro::getSchema(type, [outputRecvTime=false], [outputElapsed=false])
详情
返回可存储相应行情类型数据的表的结构。
参数
type STRING 类型标量,表示类型。可选的 type 如下表所示:
|
type |
含义 |
|---|---|
|
indexMarketData |
指数快照表 |
|
optionMarketData |
期权快照表 |
|
actualMarketData |
现货快照表 |
|
bondMarketData |
债券快照表 |
|
BSEMarketData |
北交所数据表 |
|
entrust |
逐笔委托表 |
|
trade |
逐笔成交表 |
|
state |
逐笔状态表 |
|
orderBook |
订单簿表 |
|
TickByTickTable |
逐笔合并表 |
outputRecvTime BOOL 类型标量,可选参数,默认为 false,表示是否需要包含 receiveTime 列。如果在 createXTPConnection 时指定了 receiveTime=1 配置,那么该参数须设置为 true。
outputElapsed BOOL 类型标量,可选参数,表示返回的 schema 是否包含 elapsedTime 列。默认为 false,表示不包含。如果在 createXTPConnection 时指定了 OutputElapsed=1 配置,那么该参数须设置为 true。
当 outputRecvTime 和 outputElapsed 均为 true 时,最后两列依次为 receiveTime、elapsedTime。
返回值
一个表结构。返回表每行描述一个输出字段,按输出列的实际顺序排列,包含以下列:
|
列名 |
类型 |
说明 |
|---|---|---|
|
name |
STRING |
输出字段名 |
|
typeString |
STRING |
输出字段的数据类型名称 |
|
typeInt |
INT |
输出字段的数据类型编号 |
各行情输出表的完整字段说明见“数据表结构”。
getAllNQTickersFullInfo
语法
XTPPro::getAllNQTickersFullInfo(conn)
详情
查询北交所及全国股转系统证券的全量基础信息,返回包含 37 列的表,字段说明见“证券基础信息表”。
参数
conn 由 createXTPConnection 或 getHandle 返回的连接句柄,须已成功登录。
数据表结构
以下列出各行情输出表的基础字段。
指数快照表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeID |
INT |
交易所 ID |
|
ticker |
SYMBOL |
指数代码,6位 |
|
lastPrice |
DOUBLE |
最新价 |
|
preClosePrice |
DOUBLE |
昨日收盘 |
|
openPrice |
DOUBLE |
今日开盘 |
|
highPrice |
DOUBLE |
最高 |
|
lowPrice |
DOUBLE |
最低 |
|
closePrice |
DOUBLE |
今收 |
|
dataTime |
TIMESTAMP |
时间戳 |
|
qty |
LONG |
成交量,单位:上交所是手,深交所是股 |
|
turnover |
DOUBLE |
成交金额,单位元 |
|
tradesCount |
LONG |
成交笔数 注意,该字段对上交所无意义(填0) |
|
bid1Qty |
LONG[] |
买一队列 |
|
maxBid1Count |
INT |
买一队列总委托笔数 |
|
bid1Count |
INT |
买一队列的有效委托笔数 |
|
ask1Qty |
LONG[] |
卖一队列 |
|
maxAsk1Count |
INT |
卖一队列总委托笔数 |
|
ask1Count |
INT |
卖一队列的有效委托笔数 |
期权快照表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeID |
INT |
交易所 ID |
|
ticker |
SYMBOL |
期权代码,8位 |
|
lastPrice |
DOUBLE |
最新成交价 |
|
preClosePrice |
DOUBLE |
昨日收盘价 |
|
openPrice |
DOUBLE |
今日开盘 |
|
highPrice |
DOUBLE |
当日最高价 |
|
lowPrice |
DOUBLE |
当日最低价 |
|
closePrice |
DOUBLE |
今收价 |
|
preTotalLongPosition |
LONG |
昨持仓量 |
|
totalLongPosition |
LONG |
未平仓合约数量(张或股) |
|
preSettlPrice |
DOUBLE |
昨日结算价 |
|
settlPrice |
DOUBLE |
今日结算价 |
|
upperLimitPrice |
DOUBLE |
涨停价 |
|
lowerLimitPrice |
DOUBLE |
跌停价 |
|
dataTime |
TIMESTAMP |
时间戳 |
|
qty |
LONG |
当日累计成交量 |
|
turnover |
DOUBLE |
当日累计成交金额 |
|
avgPrice |
DOUBLE |
均价 |
|
bids |
DOUBLE[] |
10档买价 |
|
asks |
DOUBLE[] |
10档卖价 |
|
bidQty |
LONG[] |
10档买量 |
|
askQty |
LONG[] |
10档卖量 |
|
tradesCount |
LONG |
成交笔数 |
|
tickerStatus |
SYMBOL |
当前交易状态及标志 |
|
auctionPrice |
DOUBLE |
波段性中断参考价 |
|
auctionQty |
LONG |
波段性中断集合竞价虚拟匹配量 |
|
lastEnquiryTime |
TIMESTAMP |
最近询价时间 |
|
bid1Qty |
LONG[] |
买一队列 |
|
maxBid1Count |
INT |
买一队列总委托笔数 |
|
bid1Count |
INT |
买一队列的有效委托笔数 |
|
ask1Qty |
LONG[] |
卖一队列 |
|
maxAsk1Count |
INT |
卖一队列总委托笔数 |
|
ask1Count |
INT |
卖一队列的有效委托笔数 |
现货快照表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeID |
INT |
交易所ID |
|
ticker |
SYMBOL |
现货代码(股票、基金等) |
|
lastPrice |
DOUBLE |
最新成交价 |
|
preClosePrice |
DOUBLE |
昨日收盘价 |
|
openPrice |
DOUBLE |
今日开盘 |
|
highPrice |
DOUBLE |
当日最高价 |
|
lowPrice |
DOUBLE |
当日最低价 |
|
closePrice |
DOUBLE |
今收价 |
|
upperLimitPrice |
DOUBLE |
涨停价 |
|
lowerLimitPrice |
DOUBLE |
跌停价 |
|
dataTime |
TIMESTAMP |
时间戳 |
|
qty |
LONG |
当日累计成交量 |
|
turnover |
DOUBLE |
当日累计成交金额 |
|
bids |
DOUBLE[] |
10档买价 |
|
asks |
DOUBLE[] |
10档卖价 |
|
bidQty |
LONG[] |
10档买量 |
|
askQty |
LONG[] |
10档卖量 |
|
tradesCount |
LONG |
成交笔数 |
|
tickerStatus |
SYMBOL |
当前交易状态及标志 |
|
totalBidQty |
LONG |
委托买入总量,SHL2/SZ有值 |
|
totalAskQty |
LONG |
委托卖出总量,SHL2/SZ有值 |
|
maBidPrice |
DOUBLE |
加权平均委买价格,SHL2/SZ有值 |
|
maAskPrice |
DOUBLE |
加权平均委卖价格,SHL2/SZ有值 |
|
maBondBidPrice |
DOUBLE |
债券加权平均委买价格,SHL2有值 |
|
maBondAskPrice |
DOUBLE |
债券加权平均委卖价格,SHL2有值 |
|
yieldToMaturity |
DOUBLE |
债券到期收益率,SHL2有值 |
|
iopv |
DOUBLE |
基金实时参考净值,SH/SZ有值 |
|
etfBuyCount |
INT |
ETF申购笔数,SHL2有值 |
|
etfSellCount |
INT |
ETF赎回笔数,SHL2有值 |
|
etfBuyQty |
DOUBLE |
ETF申购数量,SHL2有值 |
|
etfBuyMoney |
DOUBLE |
ETF申购金额,SHL2有值 |
|
etfSellQty |
DOUBLE |
ETF赎回数量,SHL2有值 |
|
etfSellMoney |
DOUBLE |
ETF赎回金额,SHL2有值 |
|
totalWarrantExecQty |
DOUBLE |
权证执行的总数量,SHL2有值 |
|
warrantLowerPrice |
DOUBLE |
权证跌停价格,SHL2有值 |
|
warrantUpperPrice |
DOUBLE |
权证涨停价格,SHL2有值 |
|
cancelBuyCount |
INT |
买入撤单笔数,SHL2有值 |
|
cancelSellCount |
INT |
卖出撤单笔数,SHL2有值 |
|
cancelBuyQty |
DOUBLE |
买入撤单数量,SHL2有值 |
|
cancelSellQty |
DOUBLE |
卖出撤单数量,SHL2有值 |
|
cancelBuyMoney |
DOUBLE |
买入撤单金额,SHL2有值 |
|
cancelSellMoney |
DOUBLE |
卖出撤单金额,SHL2有值 |
|
totalBuyCount |
LONG |
买入总笔数,SHL2有值 |
|
totalSellCount |
LONG |
卖出总笔数,SHL2有值 |
|
durationAfterBuy |
INT |
买入委托成交最大等待时间,SHL2有值 |
|
durationAfterSell |
INT |
卖出委托成交最大等待时间,SHL2有值 |
|
numBidOrders |
INT |
买方委托价位数,SHL2有值 |
|
numAskORders |
INT |
卖方委托价位数,SHL2有值 |
|
preIopv |
DOUBLE |
基金T-1日净值。SZ有值 |
|
bid1Qty |
LONG[] |
买一队列 |
|
maxBid1Count |
INT |
买一队列总委托笔数 |
|
bid1Count |
INT |
买一队列的有效委托笔数 |
|
ask1Qty |
LONG[] |
卖一队列 |
|
maxAsk1Count |
INT |
卖一队列总委托笔数 |
|
ask1Count |
INT |
卖一队列的有效委托笔数 |
债券快照表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeID |
INT |
交易所ID |
|
ticker |
SYMBOL |
债券代码 |
|
lastPrice |
DOUBLE |
最新成交价 |
|
preClosePrice |
DOUBLE |
昨日收盘价 |
|
openPrice |
DOUBLE |
今日开盘 |
|
highPrice |
DOUBLE |
当日最高价 |
|
lowPrice |
DOUBLE |
当日最低价 |
|
closePrice |
DOUBLE |
今收价 |
|
upperLimitPrice |
DOUBLE |
涨停价 |
|
lowerLimitPrice |
DOUBLE |
跌停价 |
|
dataTime |
TIMESTAMP |
时间戳 |
|
qty |
LONG |
当日累计成交量 |
|
turnover |
DOUBLE |
当日累计成交金额 |
|
bids |
DOUBLE[] |
10档买价 |
|
asks |
DOUBLE[] |
10档卖价 |
|
bidQty |
LONG[] |
10档买量 |
|
askQty |
LONG[] |
10档卖量 |
|
tradesCount |
LONG |
成交笔数 |
|
tickerStatus |
SYMBOL |
当前交易状态及标志 |
|
totalBidQty |
LONG |
委托买入总量(SH,SZ) |
|
totalAskQty |
LONG |
委托卖出总量(SH,SZ) |
|
maBidPrice |
DOUBLE |
加权平均委买价格(SZ) |
|
maAskPrice |
DOUBLE |
加权平均委卖价格(SZ) |
|
maBondBidPrice |
DOUBLE |
债券加权平均委买价格(SH) |
|
maBondAskPrice |
DOUBLE |
债券加权平均委卖价格(SH) |
|
yieldToMaturity |
DOUBLE |
债券到期收益率(SH) |
|
matchLastpx |
DOUBLE |
匹配成交最近价(SZ) |
|
maBondPrice |
DOUBLE |
债券加权平均价格(SH) |
|
matchQty |
LONG |
匹配成交量(SZ) |
|
matchTurnover |
DOUBLE |
匹配成交金额(SZ) |
|
cancelBuyCount |
INT |
买入撤单笔数(SH) |
|
cancelSellCount |
INT |
卖出撤单笔数(SH) |
|
cancelBuyQty |
DOUBLE |
买入撤单数量(SH) |
|
cancelSellQty |
DOUBLE |
卖出撤单数量(SH) |
|
cancelBuyMoney |
DOUBLE |
买入撤单金额(SH) |
|
cancelSellMoney |
DOUBLE |
卖出撤单金额(SH) |
|
totalBuyCount |
LONG |
买入总笔数(SH) |
|
totalSellCount |
LONG |
卖出总笔数(SH) |
|
durationAfterBuy |
INT |
买入委托成交最大等待时间(SH) |
|
durationAfterSell |
INT |
卖出委托成交最大等待时间(SH) |
|
numBidOrders |
INT |
买方委托价位数(SH) |
|
numAskOrders |
INT |
卖方委托价位数(SH) |
|
instrumentStatus |
SYMBOL |
状态 |
|
bid1Qty |
LONG[] |
买一队列 |
|
maxBid1Count |
INT |
买一队列总委托笔数 |
|
bid1Count |
INT |
买一队列的有效委托笔数 |
|
ask1Qty |
LONG[] |
卖一队列 |
|
maxAsk1Count |
INT |
卖一队列总委托笔数 |
|
ask1Count |
INT |
卖一队列的有效委托笔数 |
北交所数据表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeID |
INT |
交易所ID |
|
ticker |
SYMBOL |
股票 ID |
|
lastPrice |
DOUBLE |
最新成交价 |
|
preClosePrice |
DOUBLE |
昨日收盘价 |
|
openPrice |
DOUBLE |
今日开盘 |
|
highPrice |
DOUBLE |
当日最高价 |
|
lowPrice |
DOUBLE |
当日最低价 |
|
closePrice |
DOUBLE |
今收价 |
|
totalLongPosition |
LONG |
未平仓合约数量(张或股) |
|
dataTime |
TIMESTAMP |
时间戳 |
|
qty |
LONG |
当日累计成交量 |
|
turnover |
DOUBLE |
当日累计成交金额 |
|
upperLimitPrice |
DOUBLE |
涨停价 |
|
lowerLimitPrice |
DOUBLE |
跌停价 |
|
tradesCount |
LONG |
成交笔数 |
|
tickerStatus |
SYMBOL |
当前交易状态及标志 |
|
bids |
DOUBLE[] |
5档买价 |
|
asks |
DOUBLE[] |
5档卖价 |
|
bidQty |
LONG[] |
5档买量 |
|
askQty |
LONG[] |
5档卖量 |
|
bid1Qty |
LONG[] |
买一队列 |
|
maxBid1Count |
INT |
买一队列总委托笔数 |
|
bid1Count |
INT |
买一队列的有效委托笔数 |
|
ask1Qty |
LONG[] |
卖一队列 |
|
maxAsk1Count |
INT |
卖一队列总委托笔数 |
|
ask1Count |
INT |
卖一队列的有效委托笔数 |
逐笔委托表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeID |
INT |
交易所 ID |
|
ticker |
SYMBOL |
代码,6位 |
|
seq |
LONG |
上交所表示业务序号;深交所无意义 |
|
dataTime |
TIMESTAMP |
时间戳 |
|
channelNo |
INT |
频道代码 |
|
entrustSeq |
LONG |
委托序号 |
|
price |
DOUBLE |
委托价格 |
|
qty |
LONG |
上交所表示剩余委托数量;深交所表示委托数量 |
|
side |
CHAR |
上交所:'B'(买);'S'(卖) 深交所:'1'(买);'2'(卖);'G'(借入);'F'(出借) |
|
ordType |
CHAR |
上交所:'A'(增加);'D'(删除) 深交所表示订单类别:'1'(市价); '2'(限价);'U'(本方最优) |
|
orderNo |
LONG |
上交所表示原始订单号;深交所无意义 |
|
tradeQty |
LONG |
已成交数量 |
逐笔成交表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeID |
INT |
交易所 ID |
|
ticker |
SYMBOL |
代码,6位 |
|
seq |
LONG |
上交所表示业务序号;深交所无意义 |
|
dataTime |
TIMESTAMP |
时间戳 |
|
channelNo |
INT |
频道代码 |
|
tradeSeq |
LONG |
成交序号 |
|
price |
DOUBLE |
成交价格 |
|
qty |
LONG |
成交量 |
|
money |
DOUBLE |
成交金额(仅适用上交所) |
|
bidNo |
LONG |
买方订单号 |
|
askNo |
LONG |
卖方订单号 |
|
tradeFlag |
CHAR |
上交所表示内外盘标识('B':主动买;'S':主动卖;'N':未知) 深交所表示成交标识('4':撤;'F':成交) |
逐笔状态表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeID |
INT |
交易所 ID |
|
ticker |
SYMBOL |
代码,6位 |
|
seq |
LONG |
上交所表示业务序号;深交所无意义 |
|
dataTime |
TIMESTAMP |
时间戳 |
|
channelNo |
INT |
频道代码 |
|
statusSeq |
LONG |
状态序号 |
|
flag |
SYMBOL |
状态信息 |
订单簿表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeID |
INT |
交易所 ID |
|
ticker |
SYMBOL |
代码,6位 |
|
lastPrice |
DOUBLE |
最近成交价 |
|
qty |
LONG |
成交总量 |
|
turnover |
DOUBLE |
成交总金额 |
|
tradesCount |
LONG |
成交笔数 |
|
bids |
DOUBLE[] |
十档买价 |
|
asks |
DOUBLE[] |
十档卖价 |
|
bidQty |
LONG[] |
十档买量 |
|
askQty |
LONG[] |
十档卖量 |
|
dataTime |
TIMESTAMP |
最近成交时间 |
逐笔合并表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
SecurityID |
SYMBOL |
标的字符串 |
|
MDDate |
DATE |
日期 |
|
MDTime |
TIME |
时间 |
|
ExchangeType |
INT |
1 上证 2 深证 |
|
SourceType |
INT |
0表示逐笔委托 1表示逐笔成交 -1表示产品状态 |
|
Type |
INT |
交易类型: 如果是逐笔委托单,则:1表示市价;2表示限价;3表示本方最优;10表示撤单(仅上交所) 如果是逐笔成交单,则:0表示成交;1表示撤单(仅深交所) 如果是产品状态,则:11市场状态(仅上交所) |
|
Price |
LONG |
价格,真实价格*10000 |
|
Qty |
LONG |
数量 |
|
BSFlag |
INT |
买卖方向:1表示买单;2表示卖单 在逐笔成交时,通过买卖订单号判断,如果买单订单号大,就是买单,如果卖单订单号大,就是卖单 |
|
BuyNo |
LONG |
买方委托序号 |
|
SellNo |
LONG |
卖方委托序号 |
|
ApplSeqNum |
LONG |
一个通道内的逐笔数据序号 |
|
ChannelNo |
INT |
channel 序号 |
证券基础信息表
|
列名 |
列类型 |
说明 |
|---|---|---|
|
exchangeId |
INT |
交易所标识 |
|
ticker |
SYMBOL |
证券代码 |
|
tickerName |
SYMBOL |
证券名称 |
|
securityType |
INT |
证券类型 |
|
tickerQualificationClass |
INT |
证券资格分类 |
|
tickerAbbrEn |
SYMBOL |
证券英文简称 |
|
baseTicker |
SYMBOL |
基础证券代码 |
|
industryType |
SYMBOL |
行业类别 |
|
currencyType |
SYMBOL |
币种 |
|
tradeUnit |
INT |
交易单位 |
|
hangOutDate |
INT |
挂牌日期,保留 SDK 返回的整型值 |
|
valueDate |
INT |
起息日期,保留 SDK 返回的整型值 |
|
maturityDate |
INT |
到期日期,保留 SDK 返回的整型值 |
|
perLimitVol |
INT |
单笔数量限制参数 |
|
buyVolUnit |
INT |
买入数量单位 |
|
sellVolUnit |
INT |
卖出数量单位 |
|
miniDeclaredVol |
INT |
最小申报数量 |
|
limitPriceAttr |
INT |
价格限制属性 |
|
marketMakerQuantity |
INT |
做市商数量 |
|
priceGear |
DOUBLE |
价格档位 |
|
firstLimitTrans |
DOUBLE |
首次交易限制参数(SDK 字段 first_limit_trans) |
|
subsequentLimitTrans |
DOUBLE |
后续交易限制参数(SDK 字段 subsequent_limit_trans) |
|
limitUpperPrice |
DOUBLE |
价格上限 |
|
limitLowerPrice |
DOUBLE |
价格下限 |
|
blockTradeUpper |
DOUBLE |
大宗交易价格上限 |
|
blockTradeLower |
DOUBLE |
大宗交易价格下限 |
|
convertIntoRation |
DOUBLE |
转换比例参数(SDK 字段 convert_into_ration) |
|
tradeStatus |
INT |
交易状态 |
|
securityLevel |
INT |
证券级别 |
|
tradeType |
INT |
交易类型 |
|
suspendFlag |
INT |
停牌标志 |
|
exDividendFlag |
INT |
除权除息标志 |
|
layerType |
INT |
分层类型 |
|
isRzbd |
CHAR |
融资标的标志(SDK 字段 is_rzbd) |
|
isRqbd |
CHAR |
融券标的标志(SDK 字段 is_rqbd) |
|
isDrrz |
CHAR |
当日融资标志(SDK 字段 is_drrz) |
|
isDrrq |
CHAR |
当日融券标志(SDK 字段 is_drrq) |
使用示例
示例中的账户、密码、IP 和目录从 DolphinDB 服务器进程的环境变量读取,需在启动服务前配置。
订阅沪深现货快照
先设置 XTP_CLIENT_ID、XTP_LOG_PATH、XTP_IP、XTP_PORT、XTP_USER 和 XTP_PASSWORD 环境变量。以下示例采用 TCP,订阅上交所两个证券,并启用接收时间和处理耗时字段。
// 1. 设置全局配置。此时不能已有 XTPPro 连接句柄。
XTPPro::setGlobalConfig(
clientId=int(getEnv("XTP_CLIENT_ID")),
saveFilePath=getEnv("XTP_LOG_PATH"),
logLevel=3,
udpSeqOutput=false)
// 2. 创建句柄。如需多个连接,应在首次登录前全部创建。
connConfig = dict(keyType=STRING, valueType=ANY)
connConfig["receiveTime"] = 1
connConfig["OutputElapsed"] = 1
conn = XTPPro::createXTPConnection(name="xtpProFeed", config=connConfig)
// 3. 按对应 schema 创建并共享输出表。
quoteSchema = XTPPro::getSchema(
type="actualMarketData", outputRecvTime=true, outputElapsed=true)
quoteTable = streamTable(10000:0, quoteSchema.name, quoteSchema.typeString)
share(table=quoteTable, sharedName="xtpProActual")
outputTables = dict(keyType=STRING, valueType=ANY)
outputTables["actualTable"] = quoteTable
// 4. 登录 TCP 行情服务器。
loginConfig = dict(keyType=STRING, valueType=ANY)
loginConfig["ip"] = getEnv("XTP_IP")
loginConfig["port"] = int(getEnv("XTP_PORT"))
loginConfig["user"] = getEnv("XTP_USER")
loginConfig["password"] = getEnv("XTP_PASSWORD")
loginConfig["protocolType"] = 1
XTPPro::login(conn=conn, config=loginConfig)
// 5. 订阅现货快照;其他未配置输出表的快照不会写入。
XTPPro::subscribe(conn=conn, quoteType=1, marketType=1,
codeList=["600000", "600519"], tableDict=outputTables)
接收行情后,可在同一节点查询状态和输出表。
XTPPro::getStatus(conn=conn)
select top 10 * from xtpProActual
停止接收时,取消订阅并关闭连接。共享表保留,可继续查询已收到的数据。
XTPPro::unsubscribe(conn=conn, quoteType=1)
XTPPro::closeXTPConnection(conn=conn)
订阅逐笔合并数据
以下为快照示例中第 3 步、第 5 步的替换模板;先按相同流程配置、创建句柄并成功登录。
tickSchema = XTPPro::getSchema(
type="TickByTickTable", outputRecvTime=true, outputElapsed=true)
tickTable = streamTable(10000:0, tickSchema.name, tickSchema.typeString)
share(table=tickTable, sharedName="xtpProTicks")
tickTables = dict(keyType=STRING, valueType=ANY)
tickTables["TickByTickTable"] = tickTable
XTPPro::subscribe(conn=conn, quoteType=2, marketType=1,
codeList=["600000", "600519"], tableDict=tickTables)
如需按通道分表,将 TickByTickTable 的值改为通道字典。下例通道号仅作示意,应替换为行情源实际使用的通道号。此配置应在首次订阅逐笔数据时使用;已订阅时需先取消该类型的全部订阅。
channelOneTable = streamTable(10000:0, tickSchema.name, tickSchema.typeString)
channelTwoTable = streamTable(10000:0, tickSchema.name, tickSchema.typeString)
share(table=channelOneTable, sharedName="xtpProChannelOne")
share(table=channelTwoTable, sharedName="xtpProChannelTwo")
channelTables = dict(keyType=INT, valueType=ANY)
channelTables[1] = channelOneTable
channelTables[2] = channelTwoTable
tickTables = dict(keyType=STRING, valueType=ANY)
tickTables["TickByTickTable"] = channelTables
XTPPro::subscribe(conn=conn, quoteType=2, marketType=1,
codeList=["600000", "600519"], tableDict=tickTables)
通过 UDP 订阅北交所快照
以下为快照示例的替换模板。不要在已有 TCP 登录的句柄上直接重复登录。
// 替换原登录步骤。XTP_CONFIG_FILE 为服务器上可读配置文件的绝对路径。
loginConfig["protocolType"] = 2
loginConfig["configFilePath"] = getEnv("XTP_CONFIG_FILE")
loginConfig["localIP"] = getEnv("XTP_LOCAL_IP")
XTPPro::login(conn=conn, config=loginConfig)
bseSchema = XTPPro::getSchema(
type="BSEMarketData", outputRecvTime=true, outputElapsed=true)
bseTable = streamTable(10000:0, bseSchema.name, bseSchema.typeString)
share(table=bseTable, sharedName="xtpProBse")
bseTables = dict(keyType=STRING, valueType=ANY)
bseTables["BSEMarketData"] = bseTable
XTPPro::subscribe(conn=conn, quoteType=1, marketType=3,
codeList=NULL, tableDict=bseTables)
// 一次性查询证券基础信息。
nqInfo = XTPPro::getAllNQTickersFullInfo(conn=conn)
注意事项
-
如果需要连接多个 XTP-Pro 服务器,则需要创建多个句柄,用每个句柄连接不同的服务器。
-
在登录任一个 XTP-Pro 服务器之前,必须创建完毕所有句柄,即在登录后就不允许创建新的句柄,否则会抛出异常。
-
连接由节点进程管理,退出客户端会话不会自动关闭。其他会话可通过
getHandle获取连接;结束接入时须调用closeXTPConnection。 -
连接断开后会自动重连。TCP 重新登录成功后恢复原有订阅,UDP 重新登录后继续接收组播行情。自动重连不补齐断线期间的历史行情。
