Imported from previous forum
There are two general ways how cancel replace should be handled that were recommended by FIX committee (see specifications section). One way is to respond to cancel replace request is with an execution report "New Order" (39=0) reflecting new client order ID, another is "Replaced" (39=5) reflecting the new client ordered ID as well.
It seems that a lot of problems have arisen from issue of having one field for both order state and type in the execution report (that should be resolved in FIX version 4.1).
One of the problems that I just run into is when a sell side responds to a cancel replace with execution report "Partial Fill" (39=1) on the new client order id. This is a result of having a following scenario:
New order SE1, Sell 2000 sh. of IBM @ $100
Execution report "New" SE1
Execution report "Partial Fill" SE1 100 sh. @$ 100.25
Cancel Replace Request CX2 referring SE1, Sell 1100 sh. of IBM @ $100
Execution report "Pending Cancel" SE1
Execution report "Partial Fill" CX2, last shares = last price = 0; cum. quantity = 100.
It seems that this is an extension of situation when response is a "new" order. Although, if we look at the order, the buy side has a new order ID and that is the reason why an execution report "Replaced" / "new" would be appropriate. The scenario mentioned above also opens door for the rest of the order statuses in execution reports to carry the same response for cancel replacement requests which becomes an increasing set of values: "Partially Filled", "Filled", "Stopped", "Suspended", "Calculated" (ignoring the fact that it is recommended that a separate message arrives for each state we can expand it to "Done for Today" and "Expired").
It is possible to look in general at last price and last shares first and then at order state but (my personal recommendation is) it just complicates the matters where a simple execution report "replaced" will do the work.
Thanks,
Nathan