Tags 31 & 32 when order is bust (150=H)

Dear All,

When an order is bust (i.e. tag 150=H), should tags 31 (LastPx) and 32 (LastQty) retain their original values or equal to zero?

Thanks

Orders cannot be bust, only executions/trades from orders can be bust. 150=H refers to an execution of an order which should be considered an entity in its own right. Orders can only be cancelled. My view is that orders should not be changed due to a trade bust as this causes all kinds of issues with the order state change model of FIX.

For example, fully filled orders are considered to be in a terminal state and would need to be “revived” again. Exchanges automatically remove orders reaching a terminal state and you cannot access them anymore. Trades from such orders could still be busted hours later.

Hi,
Thanks for your reply. When the trade is bust (150=H), should tags 31 & 32 be zero?

No, 150=H explicitly indicates the bust and LastPx(31) and LastQty(32) should remain unchanged to show details of what was busted.

Hi, Thanks very much for your reply. May I know if you have any documentation to show that tags 31 & 32 should remain unchanged when 150=H?

@song, I have to admit that I had not checked the FIX spec before and believe I gave you the wrong answer. The spec for Order State Changes (Order State Changes – FIX Trading Community v2.1) has a large number of scenarios and was initially created for FIX 4.2.

Check scenario J.1.a – Filled order, followed by correction and cancellation of executions (jump to section J (Execution Cancels/Corrects)). It shows the opposite of what I had said, i.e. it sets LastQty(32)=LastPx(31)=0 and you need to use ExecRefID(19) to find the ExecutionReport(35=8) message containing this information. I do not see the advantage of setting these fields to zero as this is redundant to ExecType(150)=H. Maybe it is to avoid confusion as you could have multiple partial fills and only one of them is cancelled. LastQty(32) and LastPx(31) could be viewed as an additional execution if they are non-zero. I do not know what the reasoning was at the time.

The following is from the FIX spec for the trade business area and defines the general usage (Business Area: Trade – FIX Trading Community v2.1):

ExecType(150) = H (Trade Cancel) applies at the execution level and is used to cancel an execution which has been reported in error. The canceled execution will be identified in ExecRefID(19). Note: ExecType(150) = H (Trade Cancel) should not be used to cancel a previous ExecutionReport(35=8) message with ExecType(150) = H (Trade Cancel), i.e. one cannot cancel a cancel.