跳至主要內容

xtp_master大约 9 分钟

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.逐笔委托结构体字段

avatar
avatar

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.逐笔成交结构体字段

avatar
avatar

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.逐笔状态订单结构体字段

avatar
avatar

逐笔状态订单数据仅在上交所有意义,且逐笔合并类数据中的字段 Type = S 即逐笔类型为产品状态订单;深交所不存在逐笔状态订单数据

channel_no字段:逐笔状态订单结构体的channel_no字段对应上交所逐笔合并类数据的Channel字段,表示频道代码。

seq字段:逐笔状态订单结构体的seq字段对应上交所逐笔合并类数据的BizIndex字段,表示业务序列号,从 1 开始,在同一频道内是连续的。上交所中的逐笔委托消息与逐笔成交消息属于不同的消息,没有固定的到达先后次序关系,而该seq字段是逐笔委托消息和逐笔成交消息合并后的连续编号,故可以通过seq字段判断逐笔委托消息与逐笔成交消息产生的先后顺序。

flag字段:逐笔状态订单结构体的flag字段对应上交所逐笔合并类数据的TickBSFlag字段,表示处于产品状态订单下的状态信息(START:启动;OCALL:开市集合竞价;TRADE:连续自动撮;SUSP:停牌;CCALL:收盘集合竞价;CLOSE:闭市;ENDTR:交易结束)。

4.逐笔数据信息结构体字段

avatar
avatar

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,不存在逐笔状态订单类型。