Managing Qty fields when Trade Cancels occur
Daniel Lee <>
22 May 2008 6:20AM ET
For illustration, let's assign these values:
>> OrderQty = 100 | CumQty = 30 | LeavesQty = 70
With reference to Execution Cancels scenarios under the Order State Change Matrices, I learnt that when trade cancel occur, the OrderQty is unchanged, the CumQty is reduced, the LeavesQty is increased (as though the trade didn't occur at all and the Qty that was "trade-cancelled" is restored into the orderbook).
For illustration, there was a trade cancel of Qty 30.
Based on my understanding, I think the Qty values should be:
>> OrderQty = 100 | CumQty = 0 | LeavesQty = 100
I receive trade cancels from a non-FIX system and need to forward this message to a downstream FIX-based OMS which sends orders and receives execution reports from me.
It turned out that the non-FIX system DOES NOT restore those "trade-cancelled" Qty back into its orderbook. The non-FIX system will not add the "trade-cancelled" Qty back into the market queue. Essentially it does not want the LeavesQty to be changed after a trade cancel event.
The question here is: How should I communicate this to my downstream FIX-based OMS? Did anyone ever encounter a similar situation? How did you overcome it?
I have brainstormed the following options and love to have your comments. Any feedback is much appreciated.
Option #1: send to the FIX-based OMS with these Qty values:
>> OrderQty = 100 | CumQty = 0 | LeavesQty = 70
This breaks the Rule: OrderQty - CumQty = LeavesQty
I have to ask my downstream FIX-based OMS to treat this as exceptional case.
Option #2: send to FIX OMS the desired FIX complaince Qty values, followed by an unsolicited cancel/replace
>> step 1 - send: OrderQty = 100 | CumQty = 0 | LeavesQty = 100
>> step 2 - unsolicited modify to have end result of: OrderQty = 70 | CumQty = 0 | LeavesQty = 70
This makes the LeavesQty consistent with the view of my upstream non-FIX system which thinks there is remaining qty of 70 out there in orderbook.
But this is an overhead for me to perform unsolicited modify whenever there is a trade cancel from my upstream non-FIX system.
Option #3: don't change anything Qty values when processing the trade cancel. Create a custom tag - tradeCancelQty. send to FIX OMS
>> OrderQty = 100 | CumQty = 30 | LeavesQty = 70 | tradeCancelQty = 30
This forces my downstream FIX OMS to manage the inconsistent of CumQty and the new custom tag tradeCancelQty. It needs to substract tradeCancelQty from CumQty to get the accurate CumQty.
Option #4: I welcome more options...
I look forward to your contribution.