Direct Answer
When a block order executes across multiple fills at different prices, the OMS computes a single volume-weighted average price (VWAP) across all fills. That average price is the price at which every participating account is booked, regardless of the timing of individual fills. This price equality is the defining feature of block order allocation, it ensures that no account receives systematically better or worse execution than another account in the same block.
Allocation is the process of distributing fill quantities to individual accounts in proportions defined before execution begins. Pro-rata by account target weight is the industry-standard methodology. Partial fills, when execution completes only a fraction of the order, must be allocated proportionally to maintain fairness, with rounding residuals handled by a documented deterministic rule. Every allocation decision is a regulatory record that must be retained and auditable on demand.
Key Takeaways
- Average price = Σ(qty × price) / Σqty: The volume-weighted average across all fills, not a simple arithmetic average. Each fill's weight is its quantity.
- All accounts get the same average price: The purpose of block trade average pricing is price equality, not execution-time-based favoritism.
- Pro-rata is the default: Allocate in proportion to each account's target share of the block. Document the methodology before trading begins.
- Residuals must follow a deterministic rule: Rounding to whole shares creates residuals. The allocation engine must assign them by a documented rule, not ad hoc judgment.
- Partial fills are allocated proportionally: If a block only partially executes, each account receives its proportional share of what did fill, not a sequential allocation to some accounts and zero to others (unless that methodology is pre-documented).
- Allocation timing matters for compliance: Final allocation must be determined no later than end of trading day, and in many cases must be pre-specified. Post-trade allocation decisions are more heavily scrutinized by regulators.
- Proprietary accounts cannot be favored: When a firm trades proprietary capital alongside client accounts in the same block, the proprietary allocation must not receive better pricing than client accounts. Regulators examine this pattern closely.
- Cumulative allocation tracks fairness over time: Individual allocations may be imperfect due to rounding. The firm's allocation system should track cumulative over- and under-allocations per account to ensure fairness over time, not just per-trade.
Core Concepts
Computing the weighted average fill price
The average fill price for a block order is the volume-weighted average of all fills received. Given N fills with quantities q₁, q₂, ..., qₙ and prices p₁, p₂, ..., pₙ, the average price is: avg_price = Σᵢ(qᵢ × pᵢ) / Σᵢ(qᵢ). This is not the same as the arithmetic average of prices: a fill for 50,000 shares counts 50 times more than a fill for 1,000 shares in the weighted average.
In production, the OMS maintains a running numerator (the sum of price×quantity products) and a running denominator (total filled quantity) separately. On each new fill, it adds fill_qty × fill_price to the numerator and fill_qty to the denominator. The displayed average price is the ratio, recomputed on demand. Storing the ratio directly and incrementally updating it introduces floating-point errors that accumulate across hundreds of fills on large blocks.
Testing average price accuracy: generate a synthetic fill sequence of 500 fills with varying quantities and prices, compute the expected average independently with arbitrary precision arithmetic, and compare it to the OMS result. The difference should be zero or within floating-point epsilon. Any larger discrepancy indicates a bug in the running average update logic.
Evidence to retain: the fill ledger itself is the source of truth for average price recalculation. If the stored average price is ever questioned, the OMS must be able to recompute it from the fill ledger and produce the same result. An OMS that cannot reproduce its average price from its fill records fails auditability requirements.
Pro-rata allocation mechanics
Before the block executes, the OMS records the allocation schedule: the set of accounts and their target quantities or proportions. For a 200,000-share block with three accounts at 40%, 35%, and 25%, the targets are 80,000, 70,000, and 50,000 shares respectively. As fills arrive, each fill is allocated in these proportions.
For a fill of 40,000 shares: Account A gets 40,000 × 0.40 = 16,000; Account B gets 40,000 × 0.35 = 14,000; Account C gets 40,000 × 0.25 = 10,000. Total: 40,000. No residual in this case. For a fill of 30,001 shares: A=12,000.4, B=10,500.35, C=7,500.25. Rounded: 12,000 + 10,500 + 7,500 = 30,000, one share residual. The allocation engine assigns the residual to Account A per the "largest account gets residual" rule and logs the assignment.
The allocation engine must track cumulative allocated quantities per account and ensure the running total allocated does not exceed the fill total for the block. A common bug is allocating a fill individually (which rounds correctly) but not tracking that the cumulative allocations to all accounts may drift from the cumulative fills by more than 1 share over many fills. The engine must periodically reconcile cumulative allocated vs. cumulative filled and apply a correction if drift exceeds the acceptable rounding tolerance.
Fairness over time means that residuals are not always assigned to the same account. If Account A always receives the residual, it systematically receives slightly more shares (and slightly more or less favorable pricing depending on market direction) than its pro-rata share. A rotation or equalization approach, tracking who received the last residual and rotating to the next account, maintains long-run fairness.
Handling partial fills in a position system
A partial fill updates the position by the actual filled quantity, not the ordered quantity. This is fundamental: open orders are contingent claims on future execution, not actual positions. An OMS that books positions based on order quantity rather than fill quantity will overstate positions and potentially breach risk limits that do not exist yet.
When a partial fill arrives for a block order, each account's position is updated by its allocated share of that fill. If the allocation schedule specifies Account A receives 40% of fills, and a 10,000-share partial fill arrives, Account A's position increases by 4,000 shares. Its position remains as-filled until subsequent fills add to it.
End-of-day state for a partially filled block: the block order is in Partially Filled state. Each account has a position equal to its cumulative allocated fills so far. The block's remaining open quantity represents future intent, not a position. Day-end compliance checks use the actual filled positions, not the order quantities. If the remaining open quantity is carried to the next day (as a day order that was not fully filled, unusual but possible for certain order types), it must be re-submitted as a new order, it cannot automatically reopen.
Cash impact of partial fills: for equities settling T+1, the cash committed to a partial fill is the filled quantity × average price, not the ordered quantity × price. The unfilled portion commits no cash. Buying power calculations must use filled quantity, not ordered quantity, for the cash commitment component.
Allocation timing and regulatory scrutiny
The timing of allocation decisions is a regulatory focus area. SEC guidance on investment adviser best practices (particularly the 2023 Staff Bulletin on broker-dealer and investment adviser conflicts) distinguishes pre-trade allocation (methodology and proportions set before execution begins), at-trade allocation (set as execution happens), and post-trade allocation (determined after seeing the fills). Post-trade allocation is viewed as higher-risk because it creates opportunity to direct favorable fills to preferred accounts after the fact.
The safest practice is to fix the allocation schedule in the OMS before the order is sent to the EMS. This means the OMS records the account proportions as part of the block order record at order entry time, with a timestamp. Any change to the allocation schedule after the order is sent must be documented with a reason. Changes after fills begin to arrive are extremely sensitive and require compliance approval in most firms' policies.
Worked Scenario
A 90,000-share block buy of GS is placed for three accounts: Fund Alpha (50,000 shares, 55.6%), Fund Beta (30,000 shares, 33.3%), Fund Gamma (10,000 shares, 11.1%). The block partially fills with two fills before the order is cancelled.
- Fill 1: 60,000 shares at $490.00. Alpha: 60,000 × 0.556 = 33,360. Beta: 60,000 × 0.333 = 19,980. Gamma: 60,000 × 0.111 = 6,660. Sum: 60,000. No residual.
- Fill 2: 10,007 shares at $491.50. Alpha: 10,007 × 0.556 = 5,563.89 → 5,564. Beta: 10,007 × 0.333 = 3,332.33 → 3,332. Gamma: 10,007 × 0.111 = 1,110.78 → 1,111. Sum: 10,007. Checks out exactly.
- Block average price computation: Total filled: 70,007 shares. Numerator: 60,000×$490.00 + 10,007×$491.50 = $29,400,000 + $4,918,440.50 = $34,318,440.50. Average price: $34,318,440.50 / 70,007 = $490.21 (rounded).
- Order cancellation: Remaining 19,993 shares cancelled. The block moves to Partially Filled/Cancelled state.
- Position updates at $490.21 average: Alpha: 5,564 + 33,360 = 38,924 shares at $490.21. Beta: 3,332 + 19,980 = 23,312 shares at $490.21. Gamma: 1,111 + 6,660 = 7,771 shares at $490.21. All three accounts receive the same average price.
- Verification: 38,924 + 23,312 + 7,771 = 70,007. Matches total filled quantity. No shares unallocated.
Measurement Framework
| Measurement | Question it answers |
|---|---|
| Allocation sum accuracy | For every fill, does Σ(account allocations) = fill quantity exactly? Any discrepancy indicates a rounding bug. |
| Average price recomputation match | Does the stored average price equal Σ(fill_qty × fill_price) / Σfill_qty recomputed from the fill ledger? Test nightly. |
| Residual distribution fairness | Over the trailing 90 days, does each account's cumulative residual allocation approximate zero? Systematic nonzero indicates unfair residual handling. |
| Pre-trade vs. post-trade allocation ratio | What fraction of block orders have allocation schedules set before execution begins? Regulators want this near 100%. |
| Allocation amendment rate | How often are allocation schedules changed after order submission? Each change requires a documented reason; high rates warrant policy review. |
| Partial fill allocation completeness | Do all partially filled blocks have positions that sum exactly to the cumulative filled quantity, with no unallocated shares? |
Common Failure Modes
Simple average replacing weighted average
An easy implementation mistake is to compute average price as (sum of fill prices) / (number of fills) rather than the weighted average. For fills of equal size, these are identical. For fills of unequal size, the normal case in institutional execution, they differ. A 1,000-share fill at $100 and a 100,000-share fill at $101 have a simple average of $100.50 but a weighted average of $100.99. Using the simple average systematically underpays or overpays for the block relative to actual execution cost.
This bug typically surfaces in P&L reconciliation, the OMS-reported average price differs from the broker's average price by a small amount on every block. The broker computes weighted average; if the OMS computes simple average, they will never match.
Allocation not summing to fill quantity
When the allocation engine computes each account's share independently and rounds each one, the sum of rounded allocations can differ from the fill quantity by 1 or 2 shares. If the engine does not apply a residual correction, the difference accumulates as unallocated shares. By end of day, a large number of block fills may have left several hundred shares unallocated, shares that exist in the fill ledger but in no account's position. The position total will undercount relative to what the broker holds, producing a reconciliation break.
The fix is to compute all allocations, sum them, compare to the fill quantity, and assign any residual to the residual recipient before writing the allocation records to the database. The residual assignment must be atomic with the allocation writes.
Post-trade allocation change without audit trail
When an allocation change is made after execution without creating an audit trail entry, whether by a compliance override, an operations correction, or a direct database update, the allocation record becomes inconsistent with what regulators expect to see. The before-and-after allocation states, the reason for the change, and the approving party must all be captured. A missing audit entry for an allocation change is an immediate regulatory finding in an examination.
Partial fill causing zero allocation for small account
For a block with a very small account (e.g., 0.5% of the block = 500 shares out of 100,000), a partial fill of 100 shares would allocate 0.5 shares to that account, which rounds to zero. If the allocation engine assigns zero and moves on, the small account never receives shares from that fill. If this happens across many small fills, the small account may end up with significantly fewer shares than its proportion entitles it to, while the residual has systematically gone to larger accounts.
Correct behavior: track a running decimal allocation for each account across fills, rounding only when the decimal portion exceeds 0.5. This allows a small account to accumulate fractional credits from multiple small fills until the credit equals or exceeds one share.
Proprietary account receiving favorable timing
If a firm trades both proprietary and client accounts in the same block, and the allocation engine is set up to fill the proprietary account first from each fill (before distributing the remainder pro-rata to clients), the proprietary account may receive fills at earlier, potentially more favorable prices. This is a violation of fiduciary and best execution obligations even if the proprietary account ultimately receives the same average price, the issue is the order in which capacity is allocated, not just the final price.
Frequently Asked Questions
How is the average fill price calculated for a block order?
The average fill price is the volume-weighted average across all fills: sum(fill_price × fill_quantity) / sum(fill_quantity). For example, three fills of 10,000 shares at $100, 15,000 at $101, and 5,000 at $99 produce an average price of (10,000×100 + 15,000×101 + 5,000×99) / 30,000 = $100.33. This is the price at which all accounts in the block are booked, regardless of the specific sequence of fills.
What is pro-rata allocation and when is it used?
Pro-rata allocation distributes fills to accounts in proportion to each account's target share of the block. If three accounts requested 60%, 30%, and 10% of a 100,000-share block, each fill is allocated in those proportions. It is the most common methodology for investment advisers managing multiple accounts and is considered fair because every account participates at the same average price.
What happens to rounding residuals in pro-rata allocation?
When pro-rata calculations produce fractional shares, the OMS rounds each account's allocation to whole shares. The sum of rounded allocations may differ from the fill quantity by one or more shares. The residual is assigned to a specific account per the firm's documented residual rule, typically the largest account or the next account in a rotation. This rule must be documented, consistently applied, and recorded in the audit trail.
Can different accounts in a block receive different average prices?
Under standard average-price allocation, all accounts receive the same average price for their shares regardless of when the fills arrived. This is the defining feature of a block trade allocation, it achieves price equality across participants. Some firms use sequential allocation (each fill goes to one account until full) which results in different prices per account; this methodology requires more careful documentation of fairness justification.
What is a partial fill and how should it be handled in a position system?
A partial fill occurs when a venue executes only part of the submitted order quantity. The position is updated by the actual filled quantity, not the order quantity. The order remains open for the unfilled portion. If the account had no prior position in the symbol, a partial fill creates a position equal to the filled quantity. The unfilled order quantity does not affect the position, open orders are not positions.
What is the difference between average price and VWAP?
In the context of block order allocation, average price refers to the weighted average of the specific fills on that order. VWAP (Volume-Weighted Average Price) typically refers to the market-wide VWAP computed from all trades in a security over a time period, used as an execution quality benchmark. A trader targeting VWAP aims to execute at approximately the market VWAP; the actual fills are averaged to compute the achieved average price for comparison.
What regulatory rules govern allocation fairness?
For registered investment advisers in the U.S., Advisers Act Rule 206(4)-7 (the Compliance Rule) requires written policies and procedures reasonably designed to prevent violations of the Act, which in practice means a written allocation policy that is applied consistently, does not favor certain accounts (especially proprietary accounts), and documents deviations. FINRA rules covering broker-dealers similarly require documented fair allocation practices for block orders. Allocations must be deterministic, the outcome cannot depend on which employee happens to run the allocation that day.
How does the OMS handle a partial fill when the block's allocation would result in zero shares for a small account?
When a partial fill is too small to allocate at least one share to every account in the block under pro-rata methodology, the allocation engine must decide which accounts receive shares and which receive zero. The standard approach is to give priority to the largest accounts until the fill is exhausted, then carry the allocation forward, smaller accounts receive their proportional share from subsequent fills. The allocation is cumulative across the life of the block, not fill-by-fill.
How should an allocation be handled when the block is only partly filled at the close?
The unfilled remainder has to be distributed as deliberately as the filled portion. Allocating the executed quantity pro rata across accounts and canceling the balance keeps each account at its intended proportion, while filling some accounts completely and leaving others with nothing changes the intended exposure. Whichever policy applies should be written down in advance rather than decided per event, because deciding after seeing the outcome is what allocation fairness requirements are designed to prevent.
References
- SEC: Compliance Programs of Investment Companies and Investment Advisers (Release No. IA-2204, adopting Advisers Act Rule 206(4)-7): The rule requiring registered advisers to adopt written policies and procedures reasonably designed to prevent violations of the Advisers Act, which is where a written trade-allocation policy sits.
- FINRA Rule 5310: Best Execution and Interpositioning: Includes requirements for fair allocation of block order fills across customer accounts.
- SEC: Staff Bulletin, Standards of Conduct for Broker-Dealers and Investment Advisers, Conflicts of Interest: Covers the timing of allocation decisions and the treatment of proprietary vs. client accounts in block trades.
- CFTC: Account Identification for Eligible Bunched Orders (Final Rule, 17 CFR Part 1): CFTC guidance on block trade allocation for swaps and futures, parallel to SEC equity requirements.
Educational Disclaimer
This guide is for educational purposes only. Allocation practices are subject to regulatory oversight that varies by jurisdiction and firm registration type. Consult qualified compliance and legal professionals before establishing or modifying block order allocation policies.