关于Order结构体成员orderId订单编号和fillVolume成交量在整个订单状态变化过程中的变化规则
2024-05-12 17:07
下单过程
假设现在报单指令买入11手开多仓,然后监控OnOrder事件域,一旦
ord.status == Enum_Declared
当检测到订单状态为【已申报】后,会得到交易所分配的报单编号,记录为【0号orderId】,由于撮合成交原因,可能不会一次性成交,假设
【第1次】部分成交2手(剩余9手),那么OnOder事件域的状态
ord.status == Enum_FillPart
同时,也会得到一个报单编号,记录为【1号orderId】,此时会得到【1号fillVolume】成交量。
依次......
【第2次】部分成交3手(剩余6手),【2号orderId】【2号fillVolume】
ord.status == Enum_Filled
【第3次】全部成交6手,【3号orderId】【3号fillVolume】
问题
- 请问【3号orderId】全部成交时的报单编号 与 订单创建申报时的【0号orderId】相同吗?
- 请问【0号orderId】和【1号orderId】、【2号orderId】相同吗?如果不同,那么他们之间是否可以通过系统函数追溯关联查找?是哪个系统函数?
- 【1号orderId】发生时,【1号fillVolume】应该是【2手】,因为第1次成交,那么【2号orderId】发生时,【2号fillVolume】的值 是当次部分成交的【3手】?还是【0号orderId订单】累计成交的【5手】?因为第3次全部成交了,那么【3号fillVolume】应该是【11手】,这样理解对吗?
- 因为【第1次】和【第2次】都是【部分成交】,所以【ord.status == Enum_FillPart】应该歧义不大,关键是【第3次】在【ord.status == Enum_Filled】之前,是否先经过一个【ord.status == Enum_FillPart】部分成交6手,然后状态才快速变为【ord.status == Enum_Filled】?
重新复习了一下这个视频内容: https://www.tbquant.net/TrainDetail?id=448
(1)【0号orderId】、【1号orderId】、【2号orderId】【3号orderId】应该都是 同一个【orderId】,每次部分成交时,不同的应该是【成交索引】【FillId】
(2)OnOrder事件域,每次部分成交时,【fillVolume】到底是【增量成交量】还是【累计成交量】目前还不知道,但是OnFiill事件域中【fillVolume】是每次部分成交时的【增量成交量】。
这个视频有演示过程: https://www.tbquant.net/TrainDetail?id=449
(3)在【全部成交】之前,到底会不会经过 最后一次【部分成交】目前还不清楚。