A partial fill occurs when only part of your order quantity executes because available liquidity at your price level cannot match the full size immediately. The unfilled remainder either rests in the order book, cancels automatically, or kills the entire order, depending on your time-in-force setting. Your average fill price is the volume-weighted average of all executed portions. This guide covers why partial fills happen, how to calculate your true entry cost, and what order-type choices reduce unwanted partials on spot and perpetual futures markets.
What Is a Partial Fill and Why Does It Happen?
A partial fill means some but not all of your requested order quantity has executed at or better than your specified price. The exchange matched what was available, and the rest depends on your time-in-force rule: GTC leaves the remainder resting, IOC cancels it, and FOK would have rejected the entire order upfront.
Partial fills are standard order book behavior, not errors. They happen because the depth at your price level contains less size than your order demands at that moment. If you place a limit buy for 10 ETH at $3,000 and only 4 ETH of sell orders exist at that price, you receive a 4 ETH partial fill and the remaining 6 ETH rests in the book waiting for sellers.
Three conditions make partials more likely:
Thin depth at your price level. Fewer resting orders means your order exhausts available size faster.
Volatility draining the book. During fast moves, market makers cancel resting orders to avoid adverse selection, temporarily removing depth.
Large order size relative to visible depth. If your order exceeds 5-10% of the displayed quantity at your price, expect partial execution.
A partial fill is not slippage. Slippage is price deviation from expectation. A partial fill at your exact limit price means you got the right price on fewer units than requested.
How Average Fill Price Is Calculated
Your average fill price is the volume-weighted mean of all individual executions within a single order. It sums the notional value of each fill (price multiplied by size) and divides by total filled quantity. The result is your gross execution price before fees, and it updates live as each new portion matches a counterparty.
On our markets, partial fills are most visible during lower-liquidity hours when resting depth thins out. Traders who set realistic size expectations relative to visible book depth avoid the frustration of orders sitting half-filled for extended periods.
Avg Fill Price = Sum(price per fill x size per fill) / Sum(all filled sizes)
If you see your average price changing while the order is open, additional fills are executing at different prices. This is normal recalculation behavior, not an error.
Worked example: You place a limit buy for 10 ETH at $3,000.
Fill | Price | Size | Notional |
|---|---|---|---|
1 | $2,998 | 3 ETH | $8,994 |
2 | $3,000 | 4 ETH | $12,000 |
3 | $2,997 | 3 ETH | $8,991 |
Average fill price: ($8,994 + $12,000 + $8,991) / 10 = $2,998.50
All fills came in at or below your $3,000 limit. This is price improvement, not an error. Your effective entry after fees depends on your fee tier:
Gross entry: $2,998.50
Taker fee at 0.05%: $14.99 total
Effective entry: $2,998.50 + ($14.99 / 10) = $3,000.00
Each fill generates its own fee line in your trade history. Sum all fees across fills for accurate cost basis.
Order Book Mechanics Behind Partial Fills
When you submit an order, the exchange matching engine processes it against resting orders using price-time priority: best price first, then earliest timestamp at equal price. Your order either rests as a maker (if your limit does not cross the current best price) or matches immediately as a taker.
Why single orders match multiple counterparties. If you buy 5 BTC and the ask side shows 2 BTC at $60,000, 1 BTC at $60,010, and 3 BTC at $60,020, a market order sweeps all three levels. A limit order at $60,010 takes the first two levels (3 BTC) and rests the remaining 2 BTC.
What changes between click and fill. The order book rebuilds continuously. Between your click and the matching engine receiving your order, other traders may cancel or modify their resting orders. During volatile periods, visible depth can drop 40% or more within seconds, turning what looked like a full fill into a partial.
Time-in-force determines what happens to the remainder:
TIF | Unfilled Portion Behavior |
|---|---|
GTC (Good-Til-Canceled) | Rests in book until filled or you cancel |
IOC (Immediate-Or-Cancel) | Cancels automatically after immediate portion |
FOK (Fill-Or-Kill) | Entire order rejected if full size unavailable |
For details on these execution modifiers, see post-only, IOC, and FOK orders.
Liquidity and Depth: The Root Cause
Partial fills are a liquidity problem. The less depth available at your price, the more likely your order exceeds what the book can match instantly. Two metrics predict partial fill probability before you place the order: depth (total size within a price range) and spread (gap between best bid and ask). Checking both takes ten seconds and prevents most fill surprises.
Depth is the total order size available within a price range. BTC/USDT on major exchanges typically shows $30-80M within 2% of mid-price. Smaller altcoins may show $500K-$5M. Your order relative to that depth determines fill behavior.
Spread is the gap between best bid and best ask. Tight spreads (0.01-0.05% on major pairs) indicate competitive liquidity. Wide spreads (0.3%+) signal thin books where partial fills and slippage become common.
Practical depth check before placing a large order:
Look at the order book 2% above and below current price.
Compare your order size to visible depth at your target level.
If your order exceeds 10% of visible depth at that level, split into smaller clips.
Avoid placing during high-impact news when depth typically drops 30-50%.
During liquidation cascades or ETF-related announcements, resting orders vanish as market makers pull quotes. Your limit order that would have filled completely at 14:00 might partially fill at 14:01 because the depth evaporated.
Managing Partial Fills: Order Types and Tactics
Your order type choice directly controls partial fill outcomes. The right selection depends on whether you prioritize price control, fill completeness, or fee optimization. GTC accepts partials and waits, IOC takes what is available and cancels the rest, and FOK demands everything or nothing. Beyond order type, splitting large orders into smaller clips is the most practical tactic for reducing unwanted partials.
When price control matters most: Use limit orders with GTC. Accept that partial fills may occur, and the remainder rests at your price. This is the standard approach for entries where your thesis gives you time.
When you need immediate size but accept partials: Use IOC. You get whatever fills instantly at your price or better, and the unfilled portion cancels cleanly. No resting order, no ongoing exposure.
When partial fills are unacceptable: Use FOK. The exchange fills the entire quantity immediately or rejects the order completely. Useful for hedging where a partial position creates more risk than no position.
Splitting large orders into clips. Instead of one 10 BTC order, place 5 x 2 BTC. Each smaller order is less likely to exhaust available depth. Space them 5-15 seconds apart during normal conditions, or use a TWAP approach across a wider time window during thin periods.
When to cancel a partial remainder:
Price moved materially away from your entry zone
Your original thesis changed
The open order ties up margin you need elsewhere
Market conditions shifted (sudden volatility, news event)
When to leave it resting:
Your thesis is intact and price may return
The remaining size is small relative to your target position
You have no margin pressure from the open order
Partial Fills and Position Risk
When you receive a partial fill, your actual position differs from your planned position. This mismatch creates three risk management problems: stops calibrated for the wrong size, fees scattered across multiple fill lines, and on perpetuals, a liquidation price that shifted from your original calculation. All three require verification before you set protective orders.
Stop and take-profit calibration. If you planned a 10 BTC position with stops sized for that notional exposure, but only 6 BTC filled, your risk parameters need adjustment. Always confirm filled quantity before placing protective orders. Basing stops on intended size rather than actual size leads to either over-protection (cutting winners too early) or under-protection (accepting larger percentage losses).
Fee accumulation across fills. Multiple partial fills generate separate fee entries. Three fills of 2, 3, and 2 ETH each incur their own maker or taker fee. The total fee burden is identical to a single 7 ETH fill at the same weighted average price, but reconciling your actual cost basis requires summing all individual fee lines.
Perpetual futures complications. On perps, partial fills interact with:
Average entry and unrealized PnL: Your average entry updates with each fill, shifting your break-even price.
Liquidation price: Changes as position size and average entry change. A partial fill moves your liquidation level.
Reduce-only orders: If you place a reduce-only sell for 20 BTC to close a 20 BTC long but only 12 BTC fills, your position drops to 8 BTC with 8 BTC still resting. Monitor for completion or adjust.
I have been caught by this exact scenario: placing a reduce-only order to close a full position during a volatile move, getting a partial, and then needing to manually chase the remainder at worse prices. Now I always confirm fill status within 30 seconds of any close order during fast markets.
Pre-fill safety checklist:
Check 2% depth is at least 2x your order size
Verify spread is under 0.1% for major pairs
Use limit orders for price control on entries
Confirm filled quantity before setting stops
Review all fee lines for accurate cost basis
Troubleshooting Partial Fill Issues
Most partial fill confusion comes from misreading exchange interfaces or not understanding how time-in-force interacts with available depth. The five scenarios below cover the majority of cases traders encounter, each with a specific diagnostic step.
"Partially Filled" status but price is at my level. Depth at your exact price was consumed by other orders before yours (price-time priority). Your order queues behind earlier orders at the same price. Wait for new counterparties or adjust your price.
Average price keeps changing. Normal. Each new fill recalculates the weighted average. This will continue until the order is fully filled or canceled.
Position size does not match filled quantity. Check that you are viewing the correct trading pair, correct account (main vs. subaccount), and correct margin mode. Also verify the order was not reduce-only when you had no existing position.
"Insufficient liquidity" rejection vs. partial fill. A rejection means zero quantity matched. A partial fill means some quantity matched. If you expected a fill and got rejected entirely, your price limit may be too far from the current market, or the pair has extremely thin depth.
Post-only order canceled instead of resting. Post-only cancels any order that would take liquidity. If your limit price crosses the current best price on the opposite side, the exchange rejects it rather than filling you as a taker. Reprice further from the spread.
Frequently Asked Questions
Is a partial fill a trading error or system malfunction?
No. A partial fill is standard order book behavior indicating that available depth at your price level was insufficient to match your full order quantity at that moment. It reflects current market liquidity conditions, not a platform problem. Exchanges process partial fills identically to full fills in terms of settlement, fee calculation, and position accounting. The only difference is that some portion of your order remains open or cancels depending on your time-in-force setting.
How do I calculate my true cost basis after multiple partial fills?
Sum the notional value of each fill (price multiplied by quantity), add all fee charges across fills, then divide by total filled quantity. For example: three fills of 2 ETH at $3,000, 3 ETH at $2,998, and 2 ETH at $2,999 produce a gross average of $2,999.00. Add total fees of $10.49 across all three fills, and your effective entry becomes $2,999.00 + ($10.49 / 7) = $3,000.50 per ETH. Always use the sum of actual fee lines from your trade history rather than estimating from a single rate.
Should I cancel the unfilled remainder or leave it resting?
Cancel if your trading thesis has changed, price moved significantly away from your level, or the open order creates unwanted margin exposure. Leave it resting if your thesis is intact, price may return to your level, and the open order does not pressure your available margin. There is no universal right answer because it depends entirely on whether the conditions that motivated your original order still hold.
Can partial fills increase my liquidation risk on perpetuals?
Yes. When a position-building order partially fills, your actual leverage and liquidation price differ from your planned levels. If you intended a 10 BTC position at 5x leverage but only received 4 BTC, your liquidation price is tighter than calculated for the full position. Conversely, if you are partially filled on a position-closing order, you retain more exposure than intended. Always verify actual filled size and recalculate liquidation distance after any partial fill on leveraged positions.
What is the fastest way to avoid partial fills on large orders?
Use FOK time-in-force if you need the full size or nothing at all. When partial execution is acceptable but you want to minimize it, split into smaller clips each representing under 5-10% of visible depth at your price level. Trade during peak liquidity hours when book depth is at its deepest, and avoid placing large orders during news events when market makers pull resting orders and depth thins out rapidly.
---
Researched and written by the Blofin Academy editorial team with AI-assisted drafting. Primary sources include BloFin exchange order-type documentation (execution constraints, time-in-force specifications); Gemini support documentation on partial limit order fills (https://support.gemini.com/hc/en-us/articles/10842942376475-Is-it-possible-for-limit-orders-to-partially-fill); OKX education on fill-or-kill order mechanics (https://www.okx.com/en-us/learn/fill-kill-orders); CoinGlass aggregated order book depth data (https://www.coinglass.com/pro/depth-delta). All facts independently verified against cited documentation current as of April 2026.
This article is for informational purposes only and does not constitute financial advice. Cryptocurrency trading involves substantial risk of loss. Past performance does not guarantee future results. Always conduct your own research and consider your financial situation before trading. BloFin does not guarantee the accuracy of third-party data referenced herein.
