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:
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:
Example flow for Pre-Trade Allocation (using Allocation Instruction message)
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:
-
Using Average Price: Each AllocAccount has a single AllocAvgPx (e.g. US and European) (see examples 1-1, 2-1, 3-1)
-
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:
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:
3. Sellside-initiated (see examples 3-1 and 3-2)
The typical flow for sellside-initiated (unsolicited by the buyside) is as follows:
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':
To reject one or more of the allocation account details in an Allocation Instruction, use an Allocation Instruction Ack of status 'Account level reject':
Example 1-1: Buyside-initiated flow withbuyside calculated NetMoney and MiscFees, using Average Price (all AllocAccounts with same AvgPx)
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
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)
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
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
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
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.
|