createSZSEOrderReconstructionEngine

首发版本:3.00.6.2

语法

createSZSEOrderReconstructionEngine(name, dummyTable, outputTable, inputColMap)

详情

深交所逐笔行情会标识委托的类别(市价、限价或撤单委托),但不会直接提供除本方最优价格申报外的市价委托类型。此函数定义一个深交所委托类型还原引擎。将深交所逐笔行情注入引擎后,引擎将根据市价委托及紧随其后的成交和撤单记录,推断该市价委托的具体类型并输出对应的标记值;对于限价和撤单委托,直接输出对应的标记值。引擎还原逻辑如下:

逐笔数据特征 还原类型 标记值

市价委托只在一个价格上部分成交,未成交部分未撤销

对手方最优价格申报

0

市价委托已经标记为本方最优

本方最优价格申报

1

成交价格不超过五个档位,并且委托完全成交,或者部分成交后剩余数量撤销

最优五档即时成交剩余撤销申报

2

成交价格超过五个档位,并且委托完全成交,或者部分成交后剩余数量撤销

即时成交剩余撤销申报(IOC)

3

委托没有成交,委托数量全部撤销

全额成交或撤销申报(FOK)

4

已经标记为限价委托

限价委托

5

已经标记为撤单委托

撤单委托

6

注:

成交价格档位数是该市价委托对应的正常成交记录(msgTypeColumn=1 且 typeColumn=0)中不同成交价格的数量。同一个价格上的多条成交记录只计为一个成交价格档位。撤单记录不是成交,其价格不计入成交价格档位数。

参数

name 字符串标量,指定引擎的名称,作为其在一个数据节点或计算节点上的唯一标识。名称可以包含字母、数字和下划线,但必须以字母开头。

dummyTable 一个表对象,其 schema 必须与输入数据表的 schema 一致。该表可以包含数据,也可以为空表。

outputTable 一个表对象,指定计算结果的输出表,可以是内存表或分布式表。其表结构必须在 dummyTable 的列之后增加以下两列:

  • 倒数第二列:INT 类型,表示还原出的委托类型,不同标记值的含义如下:

    注:
    • 对于市价委托,只有委托对应的行在该列中输出 0~4 中的还原结果。

    • 对于市价委托关联的逐笔成交记录,该列均为空。

    • 对于限价或撤单委托,直接输出 5 或 6。

    标记值 委托类型

    0

    对手方最优价格申报

    1

    本方最优价格申报

    2

    最优五档即时成交剩余撤销申报

    3

    即时成交剩余撤销申报(IOC)

    4

    全额成交或撤销申报(FOK)

    5

    限价委托

    6

    撤单委托

  • 最后一列:LONG 类型,记录输出顺序,从 0 开始递增。

inputColMap 一个字典,用于将输入表中的列名映射到引擎计算所需的字段:

  • key 为 STRING 类型,指定引擎所需的字段。字段名大小写敏感,顺序不限,但必须全部指定。

  • value 为 STRING 类型,必须是 dummyTable 中的列名。

key 字段类型 字段说明

"codeColumn"

SYMBOL

证券代码。

"msgTypeColumn"

INT

行情数据类型。

  • 0 表示逐笔委托。

  • 1 表示逐笔成交。

"typeColumn"

INT

交易类型。

  • 对于逐笔委托:1 表示市价委托,2 表示限价委托,3 表示本方最优价格委托。

  • 对于逐笔成交:0 表示成交,1 表示撤单。

"applSeqNumColumn"

INT

逐笔成交和逐笔委托的序列号。序列号是唯一的。对于每一个市价委托(本方最优除外),下单以后,只要有成交或撤单,其applSeqNum 都会紧随其后且是连续递增的。比如,市价委托的applSeqNum 为 0,对应成交单的 applSeqNum 将依次为 1、2、3、4…。

"sideColumn"

INT

买卖方向:1 表示买单,2 表示卖单。委托和撤单记录必须指定该字段;成交记录中的该字段不影响计算结果。

"buyOrderColumn"

LONG

买方委托序号。

  • 对于逐笔委托,买方向记录填写本笔委托的序号,卖方向记录填 0

  • 对于逐笔成交,填写参与成交的买方委托序号。

  • 对于撤单,买方向撤单填写被撤委托的序号,卖方向撤单填 0。

"sellOrderColumn"

LONG

卖方委托序号。

  • 对于逐笔委托,卖方向记录填写本笔委托的序号,买方向记录填 0

  • 对于逐笔成交,填写参与成交的卖方委托序号。

  • 对于撤单,卖方向撤单填写被撤委托的序号,买方向撤单填 0。

"priceColumn"

LONG

委托价格或成交价格。价格通常以定点整数保存,具体缩放倍率由行情数据源决定。市价委托没有固定委托价格时可以填 0;深交所撤单记录的价格通常也为 0。撤单记录的价格不属于成交价格。

"qtyColumn"

LONG

委托量、成交量或撤单量,单位为股。

注:

输入表的列名可以自定义,但 inputColMap 中的所有 key 都必须指定,且对应列的数据类型和业务含义必须符合要求。输入表可以包含日期、时间和通道号等未参与映射的其他列。

返回值

返回一个表对象。通过向该表对象写入数据,可以将逐笔数据注入引擎进行计算。

例子

以下示例构造一笔深交所市价委托。该市价委托的数量为 600 股,随后分别在四个价格档位上成交 100 股,未成交的 200 股被撤销。通过将逐笔数据注入引擎,得到该市价委托的类型。

示例中的价格以 LONG 类型保存,并采用放大 10000 倍的表示方式。例如,100,000 表示 10.0000 元,100,100 表示 10.0100 元。实际使用时,价格的缩放倍率以行情数据源的约定为准。

// 定义输入表结构
colNames = `SecurityID`Date`Time`TickDataType`TradeType`Price`Qty`BSFlag`BuyNo`SellNo`ApplSeqNum`ChannelNo
colTypes = [SYMBOL, DATE, TIME, INT, INT, LONG, LONG, INT, LONG, LONG, LONG, INT]
dummyOrderTrans = table(1:0, colNames, colTypes)

// 定义输入列映射
colMap = dict(
 `codeColumn`typeColumn`priceColumn`qtyColumn`buyOrderColumn`sellOrderColumn`sideColumn`applSeqNumColumn`msgTypeColumn,
 `SecurityID`TradeType`Price`Qty`BuyNo`SellNo`BSFlag`ApplSeqNum`TickDataType
)

// 定义输出表
outputTable = table(
 1:0,
 colNames join ["marketType", "index"],
 colTypes join [INT, LONG]
)

// 创建深交所市价委托类型还原引擎
engine = createSZSEOrderReconstructionEngine(
 name="szseOrderReconstructionDemo",
 dummyTable=dummyOrderTrans,
 outputTable=outputTable,
 inputColMap=colMap
)

// 构造输入数据:
// ApplSeqNum=300 的记录为一笔买入 600 股的市价委托。
// 随后的四条记录分别在四个价格档位上成交 100 股。
// 最后一条记录撤销剩余的 200 股。
inputData = table(
 symbol(take("000001", 6)) as SecurityID,
 take(2026.07.23, 6) as Date,
 [09:30:00.000, 09:30:00.001, 09:30:00.002, 09:30:00.003,
 09:30:00.004, 09:30:00.005] as Time,
 [0, 1, 1, 1, 1, 1] as TickDataType,
 [1, 0, 0, 0, 0, 1] as TradeType,
 long([0, 100000, 100100, 100200, 100300, 0]) as Price,
 long([600, 100, 100, 100, 100, 200]) as Qty,
 take(1, 6) as BSFlag,
   // 市价委托及其关联成交、撤单使用相同的买方委托序号 300
 long([300, 300, 300, 300, 300, 300]) as BuyNo,
 long([0, 9001, 9002, 9003, 9004, 0]) as SellNo,
 long(100..105) as ApplSeqNum,
 take(1, 6) as ChannelNo
)

// 将一笔市价委托及其全部成交和撤单记录一次性写入引擎
engine.append!(inputData)

select * from outputTable

输入数据如下:

  • 第一条记录是数量为 600 股的市价委托,其 BuyNo 为 300,引擎需要还原的是该委托的类型。

  • 中间四条记录分别以 100,000、100,100、100,200 和 100,300 的价格成交 100 股,合计成交 400 股。这些记录的 BuyNo 均为 300,因此与第一条市价委托关联。

  • 最后一条记录撤销剩余的 200 股。

输出数据如下:

  • 输出数据在输入数据的基础上增加了 marketType 和 index 列。

  • 该市价委托一共使用四个成交价格档位,且未成交部分被撤销,因此市价委托类型应标记为 2,即最优五档即时成交剩余撤销申报。

  • 输出数据中,市价委托行的 marketType 为 2,与预期相符;四条逐笔成交记录的 marketType 为空,撤单记录的 marketType 为 6。

以下是其他典型输入特征及对应结果:

委托量 成交记录 撤单记录 还原结果

500

仅在一个价格成交 200 股

无

对手方最优价格申报,标记值为 0

500

在五个不同价格上合计成交 500 股

无

最优五档即时成交剩余撤销申报,标记值为 2

800

在六个不同价格上合计成交 600 股

撤销 200 股

即时成交剩余撤销申报,标记值为 3

700

无成交

撤销 700 股

全额成交或撤销申报,标记值为 4

对于本方最优价格申报、限价委托、撤单委托,引擎直接按输入记录的类型输出相应标记:

输入记录 输出结果

本方最优价格申报(msgTypeColumn=0、typeColumn=3)

本方最优价格申报,标记值为 1

限价委托(msgTypeColumn=0、typeColumn=2)

限价委托,标记值为 5

撤单委托(msgTypeColumn=1、typeColumn=1)

撤单委托,标记值为 6

相关函数:createSSEOrderReconstructionEngine