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 |
行情数据类型。
|
|
"typeColumn" |
INT |
交易类型。
|
|
"applSeqNumColumn" |
INT |
逐笔成交和逐笔委托的序列号。序列号是唯一的。对于每一个市价委托(本方最优除外),下单以后,只要有成交或撤单,其applSeqNum 都会紧随其后且是连续递增的。比如,市价委托的applSeqNum 为 0,对应成交单的 applSeqNum 将依次为 1、2、3、4…。 |
|
"sideColumn" |
INT |
买卖方向:1 表示买单,2 表示卖单。委托和撤单记录必须指定该字段;成交记录中的该字段不影响计算结果。 |
|
"buyOrderColumn" |
LONG |
买方委托序号。
|
|
"sellOrderColumn" |
LONG |
卖方委托序号。
|
|
"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 |
对于本方最优价格申报、限价委托、撤单委托,引擎直接按输入记录的类型输出相应标记:
| 输入记录 | 输出结果 |
|---|---|
|
本方最优价格申报( |
本方最优价格申报,标记值为 1 |
|
限价委托( |
限价委托,标记值为 5 |
|
撤单委托( |
撤单委托,标记值为 6 |
