Partial Fill
Definition
A partial fill occurs when the broker can only execute part of the requested order volume — for example, requesting 5 lots but only filling 3 at the requested price because liquidity is thin. Common during fast markets, news events, and on illiquid instruments. EAs must handle partial fills explicitly or risk inconsistent position state.
In-depth: Partial Fill
Partial fills occur when the requested order size exceeds the available liquidity at the requested price. Causes: 1. Fast markets — by the time the order arrives, only some liquidity is available at the original price; remaining liquidity is at worse prices 2. Low-liquidity windows — Asian session opens, around major news, on exotic instruments 3. Large orders relative to typical instrument liquidity — a 50-lot order on EURUSD is unlikely to partial-fill; the same order on USDZAR (less liquid) almost certainly will 4. Broker-specific position-sizing limits — some brokers enforce maximum order sizes per request
Broker-model behaviour: - ECN brokers: partial fills are common and explicit. The order is filled to the depth of book available at the requested price, with the remainder either filled at the next-best price (slippage) or rejected (depending on order type — Fill or Kill vs Immediate or Cancel vs Limit). - Dealing-desk brokers: behaviour varies. Some honour partial fills similar to ECN; others reject the entire order rather than partial-fill.
EA handling: critical for production EAs. The MT5 OrderSend response includes `volume_filled` which may be less than `volume_requested`. EAs must: 1. Check fill status before assuming the position exists at the intended size 2. Decide how to handle the unfilled remainder: retry, abort, or accept the partial position 3. Adjust stop-loss / take-profit calculations based on actual fill size, not requested 4. Log partial-fill events for post-hoc execution-quality analysis
EAs that ignore partial-fill possibility commonly encounter bugs like 'stop-loss orphan' — the stop is attached to the requested position size, but only part of it filled, so the stop manages more volume than actually exists. On exit, the SL attempts to close more than the position holds and fails.
For scalping EAs, partial fills are particularly disruptive: the entry logic typically expects the full position to be open before stop/target placement, and partial fills break that assumption. Designing scalping EAs with explicit Fill-or-Kill (FOK) order types avoids partial fills at the cost of more rejected orders.
For position-trading EAs with wider stops, partial fills are usually acceptable — the per-trade impact is small relative to overall trade variance.