FPL Exchanges / ECN Working Group Recommendations – Part 1 July 2006 Co-Chairs: Matt Simpson, Chicago Mercantile Exchange (Americas Representative) Kathleen Grey, HSBC (Asia-Pacific/Japan Representative) Hanno Klein, Deutsche Börse (EMEA Representative) Mission Statement The mission of FPL’s Exchanges/ECN Working Group (ExWG) is to enable and promote the harmonized usage of FIX by exchanges and ECNs for the major asset classes of equities, derivatives, fixed income and foreign exchange markets. The working group will seek to reduce redundancies in the interest of achieving optimal performance and to remove ambiguities to attain true standardization for firms accessing multiple exchanges via FIX. 2 Scope Definition The following topics are discussed in detail together with examples for different possible behaviors and templates to define best practices and give recommendations Order Lifetime Order Identification Order Modification Order Entry and Modification from Different Sources Order Rejections Message Bundling Pending Order States Restatement of Orders Corporate Actions 3 Topic Order Lifetime Order Identification Order Modification Order Entry and Modification from Different Sources Order Rejections Message Bundling Pending Order States Restatement of Orders Corporate Actions 4 Order Lifetime The lifetime of an order ends when all or partial information about an order is no longer accessible through the interface. FIX does not foresee the sell-side to end the lifetime without an explicit request from the buy-side to cancel it. Even then, the buyside can still access this order through a number of FIX requests. Some exchanges restrict the lifetime of an order to its existence in the book of active, i.e. executable orders. During order modification for change of price or increase of quantity, some exchanges will automatically end the lifetime of the order and issue a new one. Guidelines are relevant for the following issues: Status request for filled orders (A) Modification of filled orders (B) 5 Order Lifetime (cont.) Status request for filled orders (A) Model A1: Return ExecutionReport with status and quantity information for orders of current business day Model A2: Reject status request in the same way as an invalid order identification Modification request for filled orders (B) Model B1: Accept increase of order quantity and set order status back to “partially filled” Model B2: Reject modification request in the same way as an invalid order identification 6 Order Lifetime: Status Request for Filled Orders (A-A1/A2) Time Message Received (ClOrdID, OrigClOrdID) 1 New Order(X) Message Sent (ClOrdID, OrigClOrdID) Exchange (OrderID, OrigOrderID) Exec Type Ord Status Order Qty Cum Qty Leaves Qty Comment Exchange issues A as OrderID 10,000 2 Execution(X) A New New 10,000 0 10,000 3 Execution (X) A Trade Filled 10,000 10,000 0 4 Status Request(X) 5 A Execution (X) A Execution for 10,000 Request for information Order Status Filled 10,000 10,000 0 Order has been completely filled with a quantity of 10,000 Model A1: Return ExecutionReport with status and quantity information for orders of current business day Time Message Received (ClOrdID, OrigClOrdID) 1 New Order(X) Message Sent (ClOrdID, OrigClOrdID) Exchange (OrderID, OrigOrderID) Exec Type Ord Status Order Qty Cum Qty Leaves Qty Comment Exchange issues A as OrderID 10,000 2 Execution(X) A New New 10,000 0 10,000 3 Execution (X) A Trade Filled 10,000 10,000 0 4 5 Status Request(X) A Execution (X) A Execution for 10,000 Request for information Order Status Rejected 0 0 0 OrdRejReason = unknown order Model A2: Reject status request in the same way as an invalid order identification 7 Order Lifetime: Modification Request for Filled Orders (B-B1/B2) Time Message Received (ClOrdID, OrigClOrdID) 1 New Order(X) Message Sent (ClOrdID, OrigClOrdID) Exchange (OrderID, OrigOrderID) Exec Type Ord Status Order Qty Cum Qty Leaves Qty Comment Exchange issues A as OrderID 10,000 2 Execution(X) A New New 10,000 0 10,000 3 Execution (X) A Trade Filled 10,000 10,000 0 4 Replace Request(Y,X) 5 12,000 A Execution (Y,X) B, A Replace Partially Filled 12,000 Execution for 10,000 Request to increase total order qty from 10,000 to 12,000 10,000 2,000 Order has been completely filled with a quantity of 10,000 Model B1: Accept increase of order quantity and sets order status back to “partially filled” (order identification model E1) Time Message Received (ClOrdID, OrigClOrdID) 1 New Order(X) Message Sent (ClOrdID, OrigClOrdID) Exchange (OrderID, OrigOrderID) Exec Type Ord Status Order Qty Cum Qty Leaves Qty Comment Exchange issues A as OrderID 10,000 2 Execution(X) A New New 10,000 0 10,000 3 Execution (X) A Trade Filled 10,000 10,000 0 4 5 Replace Request(Y,X) 12,000 A Execution (Y,X) B, A Replace Rejected 12,000 Execution for 10,000 Request to increase total order qty from 10,000 to 12,000 0 0 OrdRejReason = unknown order, order quantity is echoed back Model B2: Reject modification request in the same way as an invalid order identification (order identification model E1) 8 Order Lifetime - Recommendation Issues: Best Practices: Status request for filled orders (A1, A2) Modification of filled orders (B1, B2) A1 – return order status and quantity for filled orders B2 – reject modification of filled orders Additional guidelines and comments: Scope of A1 should be restricted, e.g. to the current business day A1 might not deliver the best performance compared with A2 but is significantly more user friendly A2 has the drawback that it cannot differentiate between orders that have been filled, cancelled or that have never existed B1 might be useful in environments with high (manual) effort to create new order A1 and B2 can also apply to orders that have been cancelled or that have expired 9 Topic Order Lifetime Order Identification Order Modification Order Entry and Modification from Different Sources Order Rejections Message Bundling Pending Order States Restatement of Orders Corporate Actions 10 Order Identification FIX knows order identification fields coming from the buy-side (ClOrdID) as well as from the sell side (OrderID) Buy-side order identification (ClOrdID) is typically mandatory, needs to be changed when modifying the order and must be unique (at least for the current business day) OrderID is typically optional and does not need to change during the order lifetime Exchanges issue their own order identification (OrderID) and often require this information for any subsequent actions on this order Guidelines are relevant for the following issues: Mandatory vs. optional nature of ClOrdID and OrderID (C) Enforcement of ClOrdID uniqueness by the exchange (D) Persistence of exchange issued order identification (E) 11 Order Identification (cont.) Mandatory vs. optional nature of ClOrdID and OrderID (C) Enforcement of ClOrdID uniqueness by the exchange (D) Model C1: ClOrdID is mandatory, OrderID is unused or used for first ClOrdID Model C2: ClOrdID is mandatory, OrderID is optional Model C3: ClOrdID is optional, OrderID is mandatory Model C4: ClOrdID and OrderID are conditionally required Model D1: Check ClOrdID and reject orders with duplicate values Model D2: Do not check ClOrdID and treat orders with duplicate values as separate entities Persistence of exchange issued order identification (E) Model E1: Issue single order identification and optionally change it during the lifetime of an order Model E2: Issue two order identifications (private/static and public/ dynamic) whereby private one does not change 12 Order Identification: Enforcement of ClOrdID Uniqueness by the Exchange (D-D1/D2) Time Message Received (ClOrdID, OrigClOrdID) 1 New Order(X) 2 3 New Order(X) Time 1 New Order(X) 2 Message Sent (ClOrdID, OrigClOrdID) Order Qty Cum Qty Leaves Qty Comment A New New A 10,000 0 10,000 Exchange issues A as OrderID 12,000 Rejected New 10,000 Second order carries the same ClOrdID 1,000 9,000 OrdRejReason = duplicate order, current status and quantities of existing order are returned Exchange (OrderID, OrigOrderID) Exec Type Ord Status Order Qty Cum Qty Leaves Qty Comment 10,000 Execution(X) New Order(X) Model D2: Ord Status Check ClOrdID and reject orders with duplicate values Message Received (ClOrdID, OrigClOrdID) 4 Exec Type A Execution (X) Model D1: Exchange (OrderID, OrigOrderID) 10,000 Execution(X) 4 3 Message Sent (ClOrdID, OrigClOrdID) A New New B 0 10,000 12,000 A Execution (X) 10,000 New New 12,000 Exchange issues A as OrderID of first new order Second order carries the same ClOrdID 0 12,000 Exchange issues B as OrderID of second new order Do not check ClOrdID and treat orders with duplicate values as separate entities 13 Order Identification: Persistence of Exchange Issued Order Identification (E-E1) Time Message Received (ClOrdID, OrigClOrdID) 1 New Order(X) Message Sent (ClOrdID, OrigClOrdID) Exchange (OrderID, OrigOrderID) Exec Type Ord Status Order Qty Cum Qty Leaves Qty Comment Exchange issues A as OrderID 10,000 2 Execution(X) A New New 10,000 0 10,000 3 Execution (X) A Trade Partially Filled 10,000 1,000 9,000 4 Replace Request(Y,X) 12,000 A 5 Execution (Y,X) 6 Execution (Y) B, A B Execution for 1,000 Request to increase total order qty from 10,000 to 12,000 Replace Partially Filled 12,000 1,000 11,000 Order continues to exist with an executed quantity of 1,000, client order ID changes from X to Y, exchange order ID changes from A to B Trade Partially Filled 12,000 2,000 10,000 Execution for 1,000 Model E1: Issues single order identification and optionally change it during the lifetime of an order 14 Order Identification: Persistence of Exchange Issued Order Identification (E-E2) Time Message Received (ClOrdID, OrigClOrdID) 1 New Order(X) Message Sent (ClOrdID, OrigClOrdID) Exchange (OrderID, OrigOrderID, SecondaryOrderID) Exec Type Ord Status Order Qty Cum Qty Leaves Qty 10,000 2 Execution(X) A, -, N New New 10,000 0 10,000 3 Execution (X) A, -, N Trade Partially Filled 10,000 1,000 9,000 4 Comment Replace Request(Y,X) 12,000 A/-/N Exchange issues A as public/ dynamic order ID and N as private/ static order ID Execution for 1,000 Request to increase total order qty from 10,000 to 12,000. Sender uses either static value N or current public value A to identify order. 5 Execution (Y,X) B, A, N Replace Partially Filled 12,000 1,000 11,000 Order continues to exist with an executed quantity of 1,000, client order ID changes from X to Y, public/dynamic exchange order ID changes from A to B, private exchange order ID N does not change 6 Execution (Y) B, -, N Trade Partially Filled 12,000 2,000 10,000 Execution for 1,000 Model E2: Issue two order identifications (private/static and public/dynamic) whereby private one does not change 15 Order Identification - Recommendation Issues: Best Practices: Mandatory vs. optional nature of ClOrdID and OrderID (C1, C2, C3, C4) Enforcement of ClOrdID uniqueness by the exchange (D1, D2) Persistence of exchange issued order identification (E1, E2) C4: ClOrdID and OrderID conditionally required D2: ClOrdID uniqueness not enforced by exchange E2: Issue two order identifications Additional guidelines and comments: Usage of ClOrdID might not deliver the best performance compared with OrderID but is more user friendly and allows modification and deletion of orders prior to the order entry being confirmed. D1 increases latency if exchange internally uses OrderID but can be considered best practice when offered as an optional service. Scope of uniqueness (current day, single security, active orders) for D1 depends on exchange architecture and makes specific recommendation impractical. Potential misuse of model D1 when member firms can resend order entries without having to consider duplicates. In order to avoid dependencies, order identification tags should not be used for ranking purposes of matching algorithms supporting price/time priority. 16
© Copyright 2026 Paperzz