XTP逐笔数据结构体字段说明
一、 逐笔数据结构体
QuoteAPI中的逐笔数据结构体。 代码如下:
///逐笔委托
struct XTPTickByTickEntrust {
///频道代码
int32_t channel_no;
///SH: 委托序号(委托单独编号, 同一channel_no内连续)
///SZ: 委托序号(委托成交统一编号, 同一channel_no内连续)
int64_t seq;
///委托价格
double price;
///SH: 剩余委托数量(balance)
///SZ: 委托数量
int64_t qty;
///SH: 'B':买; 'S':卖
///SZ: '1':买; '2':卖; 'G':借入; 'F':出借
char side;
///SH: 'A': 增加; 'D': 删除
///SZ: 订单类别: '1': 市价; '2': 限价; 'U': 本方最优
char ord_type;
///SH: 原始订单号
///SZ: 无意义
int64_t order_no;
};
///逐笔成交
struct XTPTickByTickTrade {
///频道代码
int32_t channel_no;
///SH: 成交序号(成交单独编号, 同一channel_no内连续)
///SZ: 成交序号(委托成交统一编号, 同一channel_no内连续)
int64_t seq;
///成交价格
double price;
///成交量
int64_t qty;
///成交金额(仅适用上交所)
double money;
///买方订单号
int64_t bid_no;
///卖方订单号
int64_t ask_no;
/// SH: 内外盘标识('B':主动买; 'S':主动卖; 'N':未知)
/// SZ: 成交标识('4':撤; 'F':成交)
char trade_flag;
};
///逐笔状态订单
struct XTPTickByTickStatus {
///频道代码
int32_t channel_no;
///同一channel_no内连续
int64_t seq;
///状态信息
char flag[8];
};
///逐笔数据信息
typedef struct XTPTickByTickStruct {
///交易所代码
XTP_EXCHANGE_TYPE exchange_id;
///合约代码(不包含交易所信息),不带空格,以'\0'结尾
char ticker[XTP_TICKER_LEN];
/// SH: 业务序号(委托成交统一编号,同一个channel_no内连续,此seq区别于联合体内的seq,channel_no等同于联合体内的channel_no)
/// SZ: 无意义
int64_t seq;
///委托时间 or 成交时间
int64_t data_time;
///委托 or 成交
XTP_TBT_TYPE type;
union {
XTPTickByTickEntrust entrust;
XTPTickByTickTrade trade;
XTPTickByTickStatus state;
};
} XTPTBT;
二、 逐笔数据结构体的字段对应关系
1.逐笔委托结构体字段

channel_no字段:逐笔委托结构体的channel_no字段对应上交所的Channel字段以及深交所的ChannelNo字段,均表示逐笔委托的频道代码;在沪深交易所中,同一证券当天的频道代码是固定的,逐笔委托数据和逐笔成交数据均在这个频道中,因而有:XTPTickByTickEntrust.channel_no = XTPTickByTickTrade.channel_no。
seq字段:逐笔委托结构体的seq字段在上交所对应OrderIndex字段表示委托序号,上交所中委托序号具有单独的序号;而在深交所对应ApplSeqNum字段代表委托序号,深交所中同一频道下的委托序号和成交序号共用一套序号。
price字段:逐笔委托结构体的price字段在上交对应OrderPrice字段,深交所对应Price字段,均表示逐笔委托价格。
qty字段:逐笔委托结构体的qty字段在上交所对应Balance字段,代表的是经过一次成交撮合后剩余数量,即XTPTickByTickEntrust.qty = 原始订单量 - 对应的逐笔成交量XTPTickByTickTrade.qty,当某一个订单经过一次撮合全部成交的话,是不会有对应逐笔委托数据的,只会有逐笔成交数据;而在深交所中对应OrderQt字段,表示逐笔委托的委托数量,深交所中的逐笔委托量大于等于对应的逐笔成交量即:XTPTickByTickEntrust.qty >= XTPTickByTickTrade.qty。
side字段:逐笔委托结构体的side字段在上交所中对应OrderBSFlag字段,表示'B':买和'S':卖;在深交所中对应Side字段,不仅表示'B':买和'S':卖,还可以表示'G':借入和'F':出借,对应转融通业务的借入申报和出借申报。
ord_type字段:逐笔委托结构体的ord_type字段在上交所中对应OrderType字段,表示订单类型:'A': 增加和'D': 删除委托订单;在深交所则对应OrdType字段,表示订单类别: '1': 市价; '2': 限价; 'U': 本方最优。
order_no字段:order_no字段在深交所中没有相对应的字段,仅在上交所中对应逐笔委托类数据中的OrderNO字段,表示原始订单号,与逐笔成交中买方订单号bid_no字段或卖方订单号ask_no字段相对应。当逐笔委托为撤单时,该逐笔委托订单的order_no字段与需要被撤销的逐笔委托订单中的order_no字段数据相同。
2.逐笔成交结构体字段

channel_no字段:逐笔成交结构体的channel_no字段对应上交所的TradeChannel字段以及深交所的ChannelNo字段,均表示逐笔成交的频道代码;在沪深交易所中,同一证券当天的频道代码是固定的,逐笔委托数据和逐笔成交数据均在这个频道中,因而有:XTPTickByTickEntrust.channel_no = XTPTickByTickTrade.channel_no。
seq字段:逐笔成交结构体的seq字段在上交所对应TradeIndex字段表示成交序号,上交所中成交序号具有单独的序号;而在深交所对应ApplSeqNum字段也代表成交序号,但是深交所中同一频道下的委托序号和成交序号共用一套序号。
price字段:逐笔成交结构体的price字段在上交对应TradePrice字段,深交所对应LastPx字段,均表示逐笔成交价格。
qty字段:逐笔成交结构体的qty字段对应上交所的TradeQty字段以及深交所中的LastQty字段,表示逐笔成交的成交数量。
money字段:逐笔成交结构体的money字段在上交所中对应TradeMoney字段,表示逐笔成交的金额;深交所中无意义,深交所中计算逐笔成交的金额计算公式:price × qty。
bid_no字段:逐笔成交结构体中的bid_no字段在上交所中对应TradeBuyNo字段,表示买方订单号,与逐笔委托order_no字段相对应;在深交所中对应BidApplSeqNum字段,表示买委托索引,与表示卖委托索引的ask_no字段相对应,二者均与字段委托序号seq相关联,seq在同一频道中是按照时间顺序自增且唯一的,因此若bid_no的序号小于ask_no的序号,则表示该逐笔成交为主动卖,反之则表明该逐笔成交为主动买。当逐笔成交为撤单时,则bid_no和ask_no的序号其中一个为0。
ask_no字段:逐笔成交结构体中的ask_no字段在上交所中对应TradeSellNo字段,表示卖方订单号,与逐笔委托中的order_no字段相对应;在深交所中对应OfferApplSeqNum字段,表示卖委托索引,与表示买委托索引的ask_no字段相对应,二者均与字段委托序号seq相关联,seq在同一频道中是按照时间顺序自增且唯一的,因此若bid_no的序号小于ask_no的序号,则表示该逐笔成交为主动卖,反之则表明该逐笔成交为主动买。当逐笔成交为撤单时,则bid_no和ask_no的序号其中一个为0。
trade_flag字段:逐笔成交结构体的trade_flag字段在上交所对应TradeBSFlag字段,表示内外盘标识('B':主动买; 'S':主动卖; 'N':未知);而在深交所中则对应ExecType字段,表示成交标识('4':撤; 'F':成交),深交所中逐笔成交的主动买和卖主要通过bid_no字段和ask_no字段来判断。
3.逐笔状态订单结构体字段

逐笔状态订单数据仅在上交所有意义,且逐笔合并类数据中的字段 Type = S 即逐笔类型为产品状态订单;深交所不存在逐笔状态订单数据
channel_no字段:逐笔状态订单结构体的channel_no字段对应上交所逐笔合并类数据的Channel字段,表示频道代码。
seq字段:逐笔状态订单结构体的seq字段对应上交所逐笔合并类数据的BizIndex字段,表示业务序列号,从 1 开始,在同一频道内是连续的。上交所中的逐笔委托消息与逐笔成交消息属于不同的消息,没有固定的到达先后次序关系,而该seq字段是逐笔委托消息和逐笔成交消息合并后的连续编号,故可以通过seq字段判断逐笔委托消息与逐笔成交消息产生的先后顺序。
flag字段:逐笔状态订单结构体的flag字段对应上交所逐笔合并类数据的TickBSFlag字段,表示处于产品状态订单下的状态信息(START:启动;OCALL:开市集合竞价;TRADE:连续自动撮;SUSP:停牌;CCALL:收盘集合竞价;CLOSE:闭市;ENDTR:交易结束)。
4.逐笔数据信息结构体字段

ticker字段:上交所中,union中的逐笔类型为逐笔委托、逐笔成交以及逐笔状态订单时,ticker字段均对应SecurityID字段,表示证券代码;深交所中,union中的逐笔类型为逐笔委托以及逐笔成交时,ticker字段均对应SecurityID字段,也表示证券代码,深交所不存在逐笔状态订单数据。
seq字段:逐笔数据信息的seq字段在上交所对应逐笔数据中的BizIndex字段,表示业务序列号,从 1 开始,在同一频道内是连续的,上交所中的逐笔委托消息与逐笔成交消息属于不同的消息,没有固定的到达先后次序关系,而该seq字段是逐笔委托消息和逐笔成交消息合并后的连续编号,故可以通过seq字段判断逐笔委托消息与逐笔成交消息产生的先后顺序;深交所中该字段无意义。
data_time字段:上交所中,union中的逐笔类型为逐笔委托时,data_time字段对应者委托时间OrderTime字段,为逐笔成交时,data_time字段对应者成交时间TradeTime字段,为逐笔状态订单时,data_time字段对应TickTime字段,表示订单时间;深交所中,union中的逐笔类型为逐笔委托或者逐笔成交时,data_time字段均对应TransactTime字段,表示逐笔委托时间或者逐笔成交时间,深交所不存在逐笔状态订单数据。
union联合体:在上交所中,逐笔类型可以为逐笔委托XTPTickByTickEntrust、逐笔成交XTPTickByTickTrade以及逐笔状态订单XTPTickByTickStatus;深交所中,逐笔类型仅能为逐笔委托XTPTickByTickEntrust和逐笔成交XTPTickByTickTrade,不存在逐笔状态订单类型。