Appendix K

Example Usage of Allocations and Ready-To-Book Messaging

The Allocation Instruction message provides the the ability to specify how an order or set of orders should be subdivided amongst one or more accounts.

Allocation is typically communicated Post-Trade (after fills have been received and processed). It can, however, also be communicated Pre-Trade (at the time the order is being placed) to specify the account(s) and their respective order quantities which make up the order. This is a regulatory requirement in certain markets and for certain types of securities.

The Allocation Instruction message can also be sent by the buyside firm after execution to indicate to the sellside firm that one or a combined (aggregated) set of orders are "Ready-To-Book" without specifying individual account breakdowns. This can be used to trigger post-trade allocation, matching, and settlement processing via other channels (e.g. post-trade industry utilities). See "Ready-To-Book Processing" subsection below.

Please refer to the overview section at the start of this category for more details.

Ready-To-Book Processing:

The Ready-To-Book capability of the Allocation Instruction message is designed to provide a clean interface between the "trading" and "booking" spaces. This allows buyside firms to both trigger and provide suitable references which can be passed down to assist in the matching process within industry utilities (e.g. Virual Matching Utilities) or bilaterally with their sellside counterparts. Bookable units can be single fills, combinations of fills, single orders, or groups of orders for the same security, side, settlement date, etc. Automated booking instructions can be communicated either pre-trade or post-trade.

Booking instructions can be communicated Pre-Trade (at the time the order is being placed) to convey that as soon as the order is filled it can be considered by the acceptor as ready for booking (e.g. in particular when there is no additional quantity behind). This can be accomplished by specifying DayBookingInst="auto" on the new order message. In addition, BookingUnit and PreallocMethod can be used to fine tune the automated booking procedure to be taken.

Booking instructions can also be communicated Post-Trade (after fills have been received and processed) to signal that a particular order is now ready for booking or to signal that a set of orders for the same security, side, settlement date, etc., are to be aggregated as single booking unit which is now ready for booking.

  • Buyside sends a New Order request message
  • Sellside sends Execution Report messages for the "New" and resulting fills.
  • Sellside sends Execution Report messages with OrdStatus = 'Filled' or 'Done For Day'.
  • Buyside sends Allocation Instruction message with AllocType="Ready-To-Book "
    • The order id information from the order and execution report processing is referenced within NoOrders repeating group
    • Note that the NoAllocs repeating group (group of AllocAccount) is not required for Ready-To-Book

Example flow for AllocType="Ready-To-Book" post-trade processing which books out a single order:

Initiator  New Order-Single <D> (OrderQty <38>=35000, ClOrdID <11>=123) Respondent
 Execution Report <8> (ExecType = “0” [New] (ClOrdID=123, OrderID <37>=ABC)

Execution Report <8> (ExecType <150> ='F') [Trade] (ClOrdID=123, OrderID=ABC)

(optional Execution Report (ExecType = '3') [Done for day] (ClOrdID=123, OrderID=ABC)

(receive either OrdStatus <40>='Filled' or 'Done For Day') and buyside ready for sellside to initiate booking

 Allocation Instruction <J> (AllocType <626>="Ready-To-Book ", NoOrders <73>=1, OrderID=ABC, ClOrdID=123)
 Allocation Instruction Ack <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Accepted")
Post-Trade Matching and Allocation Processing occurs (e.g. via an industry utility)

Example flow for AllocType="Ready-To-Book" post-trade processing which books out a number of orders as a single block:

Initiator  New Order-Single <D> (OrderQty <38>=35000, ClOrdID <11>=123, Symbol <55>=IBM, Side <54>=1) Respondent
 Execution Report <8> (ExecType = '0' [New] (ClOrdID=123, OrderID <37>=ABC)

Execution Report <8> (ExecType <150> ='F') [Trade] (ClOrdID=123, OrderID=ABC)

(optional Execution Report (ExecType = '3') [Done for day] (ClOrdID=123, OrderID=ABC)

 New Order-Single (OrderQty=2000, ClOrdID=456, Symbol=IBM, Side=1)
 Execution Report <8> (ExecType = '0' [New]) (ClOrdID=456, OrderID=DEF)

Execution Report <8> (ExecType <150> ='F') [Trade] (ClOrdID=456, OrderID=DEF)

(optional Execution Report (ExecType = '3') [Done for day] (ClOrdID=456, OrderID=DEF)

(receive either OrdStatus <40>='Filled' or 'Done For Day') for all orders to be combined and buyside ready for sellside to initiate booking

 Allocation Instruction <J> (AllocType <626>="Ready-To-Book", NoOrders <73>=2, OrderID=ABC, ClOrdID=123, OrderID=DEF, ClOrdID=456)
 Allocation Instruction Ack <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Accepted")
Post-Trade Matching and Allocation Processing occurs (e.g. via an industry utility)

Pre-Trade Allocation

There are two models for pre-trade allocation in FIX

  • Allocating using details on the New Order message (Pre-allocated order).
  • Allocating at the time of placing the order using a separate allocation instruction message (Pre-trade allocation).
Example flow for Pre-allocated order
Initiator  New Order-Single <D> (OrderQty <38>=35000, NoAllocs <78>=2, AllocID <70>=50, AllocAccount <79>=ACCT1, AllocQty <80>=10000, AllocAccount=ACCT2, AllocQty=25000) Respondent
 Execution Report <8> (ExecType = '0' [New]

Execution Report <8> (ExecType <150> ='F') [Trade]

(optional Execution Report (ExecType = '3') [Done for day]

These three messages below are optional – used for buyside ready to book notification, e.g. to agree average price, quantity to book or any order combination requirements:
 Allocation Instruction <J> (AllocType <626>="Preliminary", AllocAccounts provided without MiscFees or NetMoney)
 Allocation Instruction Ack <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Received Not Yet Processed")
These three messages below are optional – used for sellside notification:
 Allocation Report <AS> (AllocReportType <794>="Sellside Calculated using Preliminary", AllocStatus="Accepted")
 Allocation Report Ack <AT> (AllocStatus="Received Not Yet Processed")
 Allocation Report Ack (AllocStatus="Accepted" or "Rejected")

Note this same flow can be used for other kinds of New Order message, e.g. New Order List.

Example flow for rejection of Pre-allocated order

There are two ways to reject the allocation details on a pre-allocated order. The first is simply to reject the entire order:

Initiator  New Order-Single <D> (OrderQty=35000, NoAllocs=2, AllocID = 100, AllocAccount=ACCT1, AllocQty=10000, AllocAccount=ACCT2, AllocQty=25000) Respondent
 Execution Report <8> (ExecType = '8' [Rejected]

The second is to send an Allocation Instruction Ack message:

Initiator  New Order-Single <D> (OrderQty=35000, NoAllocs=2, AllocID = 100, AllocAccount=ACCT1, AllocQty=10000, AllocAccount=ACCT2, AllocQty=25000) Respondent
 Execution Report <8> (ExecType = '0' [New]

Execution Report (ExecType = 'F') [Trade]

(optional Execution Report (ExecType = '3') [Done for day]

 Allocation Instruction Ack <P> (AllocID = 100, AllocStatus <87>="Received")
 Allocation Instruction Ack (AllocID = 100, AllocStatus="Block level reject" or "Account level reject")
Example flow for Pre-Trade Allocation (using Allocation Instruction message)
Initiator  New Order-Single <D> (OrderQty=35000) Respondent
 Execution Report <8> (ExecType = '0' [New]
 Allocation Instruction <J> (AllocType <626>=" Preliminary", AllocAccounts provided without MiscFees or NetMoney)
 Allocation Instruction Ack <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Accepted")

Execution Report <8> (ExecType = 'F') [Trade]

(optional Execution Report (ExecType = '3') [Done for day]

Note the Allocation Instruction can be sent any time after the New Order message, at the same time or even before (though only if the sellside is able to queue the message until the order arrives).

The message initiator may optionally send an Allocation Instruction message of type 'Ready to book' (if this is provided, the respondent should respond by accepting or rejecting the message before proceeding to the next step). The purpose of this message is to confirm the average price and quantity to allocate (especially if multiple orders are to be combined for booking).

Message flows for rejection of allocation details when communicated pre-trade are the same as for post-trade allocations and are covered in the next section.

Post-Trade Allocation

Post trade allocations can be computed via one of two methods:

  1. Using Average Price: Each AllocAccount has a single AllocAvgPx (e.g. US and European) (see examples 1-1, 2-1, 3-1)
  2. Using Executed Price: Combination of each AllocAccount and AllocPrice (unique LastPx) (e.g. Japan) (see examples 1-2, 2-2, 3-2)

Post-Trade Allocation supports three different message flows:

1. Buyside initiated with buyside-computed Misc Fees and NetMoney (see examples 1-1 and 1-2)

The typical flow for US domestic trading (withNetMoney and MiscFees provided by the buyside) is as follows:

Initiator  Allocation Instruction <J> (AllocType <626>=" Calculated") Respondent
 Allocation Instruction ACK <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction ACK (AllocStatus="Accepted")
2. Buyside-initiated with Misc Fee computation by the sellside firm (see examples 2-1 and 2-2)

The typical flow for international equity trading is as follows:

Initiator  Allocation Instruction <J> (AllocType <626>=" Preliminary", AllocAccounts provided without MiscFees or NetMoney) Respondent
 Allocation Instruction ACK <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction ACK (AllocStatus="Accepted")
3. Sellside-initiated (see examples 3-1 and 3-2)

The typical flow for sellside-initiated (unsolicited by the buyside) is as follows:

Initiator  Allocation Report <AS> (AllocReportType <794> <794>="Sellside Calculated without Preliminary" Respondent
 Allocation Report Ack <AT> (AllocStatus="Received Not Yet Processed")
 Allocation Report Ack (AllocStatus="Accepted")

Note in all three of these flows, the following should be noted:

  • The buyside may send fee and expense information (MiscFees) on the allocation instruction, or may elect not to do this. Either way, the sellside does not respond back with fee and expense information on the Allocation Instruction Ack; such information is transmitted via the Confirmation message. This is different to the flows used in earlier versions of FIX where the sellside was able to respond using an allocation message populated with the MiscFees.
  • Settlement instructions have been removed from the flow (see Settlement Instructions section for further details). However, there is a Parties block in the NoAllocs group of the Allocation Instruction message which can be used to transmit settlement location information (equivalent to ISO15022 PSET field).
Rejection Scenarios

To reject an entire Allocation Instruction, use an Allocation Instruction Ack of status 'Block level reject':

Initiator  Allocation Instruction <J> (AllocTransType <71> = New) Respondent
 Allocation Instruction Ack <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Block level reject")
The corrected allocation details are communicated using a new Allocation Instruction:
 Allocation Instruction <J> (AllocTransType <71> = New)
 Allocation Instruction Ack (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Accepted")

To reject one or more of the allocation account details in an Allocation Instruction, use an Allocation Instruction Ack of status 'Account level reject':

Initiator  Allocation Instruction <J> (AllocTransType <71> = New) Respondent
 Allocation Instruction Ack <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Account level reject")
The corrected allocation details are communicated either by using a 'replace' Allocation Instruction:
 Allocation Instruction <J> (AllocTransType <71> = Replace)
 Allocation Instruction Ack (AllocStatus="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Accepted")

OR by cancelling the original Allocation Instruction and submitting a new one
 Allocation Instruction (AllocTransType <71> = Cancel)
 Allocation Instruction Ack <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Accepted")

 Allocation Instruction (AllocTransType <71> = New)
 Allocation Instruction Ack (AllocStatus="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Accepted")

Example 1-1: Buyside-initiated flow withbuyside calculated NetMoney and MiscFees, using Average Price (all AllocAccounts with same AvgPx)

BUYSIDE SELLSIDE
 New Order-Single <D>
 Execution Report <8> (ExecType <150> ='0') [New]

Execution Report (ExecType ='F') [Trade]

(optional Execution Report (ExecType ='3') [Done for day]

Allocate
 Allocation <J> (AllocType <626>="Calculated")
 Allocation Instruction ACK <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction ACK (AllocStatus="Accepted", "Block level reject" or "Account level reject")

 

Symbol B/S Mkt Order Message Execution Rpt Messages
Account OrdID ClOrdID ExecID LastPx LastShares
IBM Buy N 520 20 300 100.00 3000
301 100.25 1000
302 100.00 3000
303 100.50 2000

Allocation Instruction Msg:

Symbol B/S Mkt Order section AvgPx Repeating fields Repeating fields
ID OrdID ClOrdID ExecID LastPx LastShares AllocPrice AllocShares Commission
IBM Buy N 999 520 20 100.1389 300 100.00 3000 F1 3000 150
301 100.25 1000 F2 3000 150
302 100.00 3000 F3 3000 150
303 100.50 2000

Example 1-2: Buyside-initiated flow withbuyside calculated NetMoney and MiscFees, using Executed Price

BUYSIDE SELLSIDE
 New Order-Single <D>
 Execution Report <8> (ExecType <150> ='0') [New]

Execution Report (ExecType ='F') [Trade]

(optional Execution Report (ExecType ='3') [Done for day]

Allocate
 Allocation Instruction <J> (AllocType <626>="Calculated")
 Allocation Instruction ACK <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction ACK (AllocStatus ="Accepted", "Block level reject" or "Account level reject")

 

Symbol B/S Mkt Order Message Execution Rpt Messages
Account OrdID ClOrdID ExecID LastPx LastShares
IBM Buy N 520 20 300 100.00 3000
301 100.25 1000
302 100.00 3000
303 100.50 2000

Allocation Instruction Msg:

Symbol B/S Mkt Order section Repeating fields Repeating fields
ID OrdID ClOrdID ExecID LastPx LastShares AllocAccount AllocPrice AllocShares Commission
IBM Buy N 999 520 20 300 100.00 3000 F1 100.00 2000 100
301 100.25 1000 F1 100.25 1000 50
302 100.00 3000 F2 100.00 2000 100
303 100.50 2000 F2 100.50 1000 50
F3 100.00 2000 100
F3 100.50 1000 50

Example 2-1: Buyside-initiated flow without buyside calculated NetMoney and MiscFees, using Average Price (all AllocAccounts with same AvgPx)

BUYSIDE SELLSIDE
 New Order-Single <D>
 Execution Report <8> (ExecType <150> ='0') [New]

Execution Report (ExecType ='F') [Trade]

(optional Execution Report (ExecType ='3') [Done for day]

Allocate
 Allocation Instruction <J> (AllocTransTyp <71>=Preliminary, AllocAccounts provided without MiscFees or NetMoney)
 Allocation Instruction ACK <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Accepted", "Block level reject" or "Account level reject")

 

Symbol B/S Mkt Order Message Execution Rpt Messages
Account OrdID ClOrdID ExecID LastPx LastShares
HNS.L Buy L 520 20 300 3.9809 100000
301 3.9809 25000

Allocation Instruction Msg:

Symbol B/S Mkt Order section Repeating fields Repeating fields
ID OrdID ClOrdID ExecID LastPx LastShares AllocAccount AllocShares Commission Repeating fields (NoMiscFees=2)
HNS.L Buy L 999 520 20 300 3.9809 100000 MiscFeeType MiscFeeAmt
301 3.9809 25000 F1 42200 335.988 5 830.9699
6 .25
F2 82800 652.937 5 1648.0926
6 .25

Example 2-2: Buyside-initiated flow with MiscFee computation, using Executed Price

BUYSIDE SELLSIDE
 New Order-Single <D>
 Execution Report <8> (ExecType <150> ='0') [New]

Execution Report (ExecType ='F') [Trade]

(optional Execution Report (ExecType ='3') [Done for day]

Allocate
 Allocation Instruction <J> (AllocTransTyp <71>=Preliminary, AllocAccounts provided without MiscFees or NetMoney)
 Allocation Instruction ACK <P> (AllocStatus <87>="Received Not Yet Processed")
 Allocation Instruction Ack (AllocStatus="Accepted", "Block level reject" or "Account level reject")

 

Symbol B/S Mkt Order Message Execution Rpt Messages
Account OrdID ClOrdID ExecID LastPx LastShares
1234 Buy T 520 20 300 1300 3000
301 1313 1000
302 1300 3000
303 1320 2000

Allocation Instruction Msg:

Symbol B/S Mkt Order section Repeating fields Repeating fields
ID OrdID ClOrdID ExecID LastPx LastShares AllocAccount AllocPrice AllocShares Commission Repeating fields (NoMiscFees=2)
1234 Buy T 999 520 20 300 1300 3000 MiscFeeType MiscFeeAmt
301 1313 1000 F1 1300 2000 25061 9 1253
302 1300 3000 F1 1313 1000 12656 9 632
303 1320 2000 F2 1300 2000 25058 9 1252
F2 1320 1000 12722 9 636
F3 1300 2000 25058 9 1252
F3 1320 1000 12722 9 636

Note: This example’s values are for a Japanese Domestic Trade, and for actual use, you need to set any other required fields.

Example 3-1: Sellside-initiated flow, single Account, using Average Price

BUYSIDE SELLSIDE
 New Order-Single <D>
 Execution Report <8> (ExecType <150> ='0') [New]

Execution Report (ExecType ='F') [Trade]

(optional Execution Report (ExecType ='3') [Done for day]

Allocate
Commission/Fee Calc
 Allocation Report <AS> (AllocType <626>="Sellside Calculated without Preliminary", optional MiscFees and NetMoney provided by AllocAccount)
 Allocation Report Ack <AT> (AllocStatus="Received Not Yet Processed")
 Allocation Report Ack (AllocStatus="Accepted", "Block level reject" or "Account level reject")

 

Symbol B/S Mkt Order Message Execution Rpt Messages
Account OrdID ClOrdID ExecID LastPx LastShares
IBM Buy N F1 520 20 300 1300 3000
301 1313 1000
302 1300 3000
303 1320 2000

Allocation Report Msg:

Symbol B/S Mkt Order section AvgPx Repeating fields Repeating fields
ID OrdID ClOrdID ExecID LastPx LastShares AllocAccount AllocShares Commission
IBM Buy N 999 520 20 1305.889 300 1300 3000 F1 9000 113277
301 1313 1000
302 1300 3000
303 1320 2000

Example 3-2: Sellside-initiated flow, single Account, using Executed Price

BUYSIDE SELLSIDE
 New Order-Single <D>
 Execution Report <8> (ExecType <150> ='0') [New]

Execution Report (ExecType ='F') [Trade]

(optional Execution Report (ExecType ='3') [Done for day]

Allocate
Commission/Fee Calc
 Allocation Report <AS> (AllocType <626>="Sellside Calculated without Preliminary", optional MiscFees and NetMoney provided by AllocAccount)
 Allocation Report Ack <AT> (AllocStatus="Received Not Yet Processed")
 Allocation Report Ack (AllocStatus="Accepted", "Block level reject" or "Account level reject")

 

Symbol B/S Mkt Order Message Execution Rpt Messages
Account OrdID ClOrdID ExecID LastPx LastShares
1234 Buy T F1 520 20 300 1300 3000
301 1313 1000
302 1300 3000
303 1320 2000

Allocation Report Msg:

Symbol B/S Mkt Order section Repeating fields Repeating fields
ID OrdID ClOrdID ExecID LastPx LastShares AllocAccount AllocPrice AllocShares Commission Repeating fields (NoMiscFees=1)
1234 Buy T 999 520 20 300 1300 3000 MiscFeeType MiscFeeAmt
301 1313 1000 F1 1300 6000 61441 9 3072
302 1300 3000 F1 1313 1000 10342 9 517
303 1320 2000 F1 1320 2000 20796 9 1039

Note: This example’s values are for a Japanese Domestic Trade, and for actual use, you need to set any other required fields.