You sent a limit order for 5 contracts. Three filled. Two are still working, and your platform shows a position you did not plan. Nothing malfunctioned. A partial fill is the exchange reporting exactly how much size existed at your price. Read it as information, not as a failure.
A futures order is not all-or-nothing by default. A limit order for 5 contracts matches against whatever quantity is resting at that price, so if only 3 contracts are offered there, 3 fill and the remaining 2 stay working until they fill, are cancelled, or expire. Fill or Kill and Fill and Kill (called Immediate or Cancel on most retail platforms) are the instructions that change that behavior; hoping for a complete fill is not an instruction.
Why did only 3 of your 5 contracts fill?
Because 3 was all that was offered at your price. An order is a request to trade up to a quantity at a price, not a single indivisible event. CME Group's order types documentation states that a limit order remains on the book until it is executed, cancelled, or expires. The remainder is a designed state, not an error.
The mechanics sit in the matching engine. Under the CME Globex matching algorithm, FIFO matches resting orders in timestamp order and hands quantity down the queue one order at a time. The same page states that if there is more quantity aggressing than resting, Globex uses FIFO as an exception to the algorithm in place. The exchange documents the case where your incoming size exceeds the size waiting for you. Partials are designed in.
The CFTC glossary defines an open order as one valid until cancelled by the customer, and notes that unless specified GTC, unfilled orders expire at the end of the trading day. Your 2 remaining contracts are an open order, not a pending version of your original 5, and they get no special treatment in the queue.
Where do partial fills cluster?
Four conditions, and they compound. Thin books, which includes the overnight Globex session and the minutes around a scheduled release when resting size gets pulled. Order size that is large relative to displayed size at the touch. Deferred contract months, where equity index liquidity concentrates in the lead month and much of the deferred-month activity that does exist trades as calendar spreads rather than outrights. And low-volume products generally.
Size relative to depth is the only one you control, and it reduces to one ratio. If the inside offer shows 40 contracts and you want 5, you are asking for 12.5% of displayed size and a complete fill is near certain. If the inside offer shows 4 and you want 5, you are asking for 125% of displayed size and the partial is the expected outcome. Read the size at the touch before you size, not just the price. That is the practical payoff of learning to read the DOM and order flow. Displayed depth is live and can be pulled in an instant, so treat any depth figure as a snapshot, not a guarantee.
Contract month matters more than traders expect. CME equity index futures list on the quarterly March, June, September and December cycle, and trading in an expiring contract terminates on the third Friday of its contract month. Volume migrates to the next quarter across the roll period in the days before that date, so the contract that carries the depth changes on a calendar, not gradually. Check CME Group's published expiration and roll calendar for the quarter you are actually trading rather than working from memory. In the lead month a 5-lot is a rounding error against displayed depth. In the deferred quarter it is a meaningful share of the book.
That explains a common claim. A 1 to 5 lot in the ES or MES lead month during US cash hours rarely partials, because inside size normally dwarfs a small retail order. The same order in a deferred quarter, in a thin product, around a release, or at 02:00 US Central can and does. So "I have never had a partial fill" usually means "I trade the most liquid contract in the world during its busiest hours."
What happens to the 2 contracts that did not fill?
They change sides. Trace one order through the book. A buy limit for 5 arrives at price P. The resting sell queue at P holds two orders, a 2-lot that arrived first and a 1-lot behind it. FIFO consumes the 2-lot, then the 1-lot, in timestamp order. Three contracts are done. The residual 2 does not vanish and does not walk up to the next price level. It stops aggressing and starts resting. It becomes a bid at P, carrying the entry timestamp it already had, which is later than every bid that was already waiting at P. That puts it at the back of the bid queue.
Its position in that queue is where money quietly leaks. The matching algorithm page lists exactly three modifications that cost a resting order its timestamp priority: an increase of working quantity, a change of price, and a change of account number. Decreasing quantity is not among them. Cancel and replace your 2-lot remainder at a more aggressive price to chase, and it goes to the back of the queue at the new price, behind everyone already waiting there. Chasing a remainder with a price change usually makes it less likely to fill, not more.
A partial fill is not a rejection. It is a measurement of how much size actually existed at your price.
Which order instructions actually control partial fills?
Three, and you pick one every time you send an order whether you know it or not. CME's order qualifier documentation defines them cleanly. Fill and Kill (FAK) orders are immediately executed against resting orders, and if the order cannot be fully filled the remaining balance is cancelled. Fill or Kill (FOK) orders must be fully filled immediately or the entire order is cancelled. The default, a plain resting limit, fills what it can and leaves the balance working.
There is a naming trap. On CME Globex the qualifier that takes what is available and cancels the rest is called Fill and Kill. Immediate or Cancel is the name used in equities, in MetaTrader 5 and in cTrader. Same behavior, different label, so a trader searching CME's pages for IOC can come away believing the exchange does not offer it.
| Behavior you want | CME Globex | MetaTrader 5 | cTrader Open API |
|---|---|---|---|
| All of it now, or nothing at all | Fill or Kill (FOK) | ORDER_FILLING_FOK | FILL_OR_KILL |
| Whatever is available now, cancel the rest | Fill and Kill (FAK) | ORDER_FILLING_IOC | IMMEDIATE_OR_CANCEL |
| Fill what you can, leave the balance working | Default resting limit | ORDER_FILLING_RETURN | GOOD_TILL_CANCEL |
The two APIs put the same choice in different fields. MetaTrader 5 expresses it as a filling mode attached to the order; cTrader expresses it as a time in force. Same three behaviors, different place on the ticket, which is one reason traders who move between platforms think a behavior is missing when it is only relabelled.
MetaQuotes documents ORDER_FILLING_RETURN as the mode where a partially filled order's remaining volume is not cancelled but processed further, and it is disabled under Market Execution regardless of symbol settings, which is why MT5 traders sometimes find the option unavailable. CME also offers a minimum quantity qualifier: name a minimum that must execute immediately on entry, and if that threshold cannot be met the order is cancelled, while quantity above the minimum rests according to the order's time in force. That is the middle ground for anyone who needs a floor on size rather than all or nothing.
One correction to a widespread belief: market orders partial too. CME's order types page states that a Market Order with Protection that cannot be filled inside the protected range leaves the unfilled quantity in the book as a limit order at the limit of the protected range, and a Market-Limit order that only partially fills leaves the remaining quantity resting on the book at the specified limit price. A market order trades price certainty for fill certainty. It does not remove the incomplete-fill case.
Exchange support and platform support are different questions. Many retail and prop-firm-provided front ends expose only a subset of time-in-force options, so check your order ticket's dropdown before assuming FOK is available to you.
The risk asymmetry a partial fill creates
A partial leaves you smaller than planned, which is safe. The damage comes from fixing it. Micro E-mini S&P 500 futures are $5 per index point. Plan: buy 5 MES at 5000.00, stop at 4990.00, a 10-point stop. Planned risk is 5 x 10 x $5 = $250.
Only 3 fill. Two remain working at 5000.00. Actual risk is 3 x 10 x $5 = $150, or 60% of plan. Under-exposure never blew up an account.
Then price rallies away from 5000.00 and the working 2 never fill. The trader wants full size, so they buy the last 2 at market at 5004.00, four points worse than the intended entry. Blended entry is ((3 x 5000.00) + (2 x 5004.00)) / 5 = (15000.00 + 10008.00) / 5 = 25008.00 / 5 = 5001.60.
The stop still sits at 4990.00 and no longer means what it meant. Distance from the blended entry to the stop is 5001.60 - 4990.00 = 11.60 points. Realized risk on the completed 5-lot is 5 x 11.60 x $5 = $290. Planned $250, actual $290, an overshoot of $40, or 16% more risk than the plan allowed. Nothing on the screen flags it. The stop price is the one you wrote down, the contract count is the one you wrote down, and the risk is wrong.
The asymmetry in one line: the price move that helped the 3 contracts already on is the same move that made the last 2 expensive. Being right early is what degrades the average. This is slippage arriving through a side door, dressed as a completed plan.
Three ways out, each with a bill attached.
| Response | Arithmetic | Result | Cost |
|---|---|---|---|
| Move the stop to hold dollar risk constant | $250 / (5 x $5) = 10.00 points; 5001.60 - 10.00 | Stop at 4991.60, risk back to exactly $250 | The stop is 1.60 points tighter than the level you chose for structural reasons |
| Keep the original stop and size down | 11.60 x $5 = $58.00 per contract; $250 / $58.00 = 4.31 | 4 contracts, risking 4 x 11.60 x $5 = $232.00 | You never get back to intended size; 5 would be $290.00, over budget |
| Trade the 3 you got | 3 x 10 x $5 = $150 | 60% of planned risk, entry and stop structure intact | Only the feeling that you left size on the table |
The third option costs nothing and breaks nothing, and most traders skip it, because taking less size than planned feels like an error rather than a decision. The second carries the quiet lesson: a trader who chases back to 5 is chasing a size their own stop no longer supports. ES is $50 per index point, so the same plan risks 5 x 10 x $50 = $2,500 and the same chase realizes 5 x 11.60 x $50 = $2,900. Overshoot $400, the same 16% error on a base ten times larger. Only the dollar consequence scales.
What a partial on a master account does to a copier fleet
It hands the copier an ambiguous instruction, and how the copier resolves that ambiguity decides whether your followers end up riskier than your master. The ambiguity is visible at the API level. An order object in Spotware's cTrader Open API carries two distinct volume figures: the trade data volume, which is what the order asked for, and executedVolume, documented as the part of that volume that was filled. Intent and reality, side by side in one object, plus a PARTIALLY_FILLED deal status alongside FILLED. The fill event reaches the copier, the copier reads one of those two figures at a single decision node, multiplies it by each follower's ratio, and fans that number out to every follower account. Pick the wrong field and the error is duplicated on every branch of the fan-out.
Take the same trade. Master intends 5 MES, fills 3, stop 10 points. The master's real risk is 3 x 10 x $5 = $150. A copier that mirrors intent sends 5 to each 1:1 follower, so each follower carries 5 x 10 x $5 = $250, which is 66.7% more risk than the master account it is supposed to be following. The reference account becomes the least exposed account in the fleet, which inverts the point of having a lead account. A copier that mirrors reality sends 3, and each follower carries $150, matching exactly.
The error scales with the multiplier, so your largest accounts absorb the largest absolute error. A follower on a 2x multiplier takes 10 contracts off intent (10 x 10 x $5 = $500) versus 6 off reality (6 x 10 x $5 = $300). Four contracts and $200 of unplanned risk, from a single misread field.
Mirror reality. The argument is asymmetry of harm, not preference. Mirroring intent can only make followers larger than the master, an unbounded overshoot in the direction that loses accounts. Mirroring reality can only make followers smaller than intended, which is a performance cost, not a risk-control failure. Given a bounded shortfall or an unbounded overshoot, take the shortfall.
There is a second trap in the event stream. A partially filled order delivers multiple execution events. In the cTrader model the order and position identifiers stay constant across those events while each fill arrives as its own deal with its own deal identifier. A copier that acts on the first fill event and never aggregates the rest under-copies; one that acts on the parent order quantity over-copies. Same root cause: treating an order as a single event.
Then expect divergence, because it is normal. Master intends 5, gets 3, the copier correctly sends 3 to each of four followers, and each follower queues its own order at its own broker. Follower A fills 3, B fills 2, C fills 3, D fills 1. The fleet holds 3 + 2 + 3 + 1 = 9 contracts against an instructed 12, with a master holding 3. Fleet risk is $150 + $100 + $150 + $50 = $450 against $600 if every follower had completed. Four independent orders met four independent order books. The success criterion is not "every account shows 3," it is "every account's protective orders match that account's actual position." An operator chasing quantity parity instead will manually add contracts the stops were never sized for.
No copier fixes partial fills, and any claim to the contrary describes something that does not exist. A copier can only avoid amplifying them by reading executed quantity, then surface the divergence fast enough to act on. Test yours: send a deliberately oversized order in a thin instrument and watch what quantity the followers receive.
What a partial does to your bracket
It desynchronizes protection from position, on one account or on forty. There are two bad states. State A: the protective quantity stays at the configured 5 against a real position of 3. State B: the protective quantity is sized to the 3 that filled, then the working remainder of 2 fills later and sits unprotected until something re-syncs the bracket.
State A is the one that hurts. A long position of 3 is live and the protective sell-stop was configured for the intended 5. That stop triggers in full at 4990.00. Net position is +3 long minus 5 sold, which equals -2. The trader is now short 2 MES at 4990.00, with no stop, no target, and no intention of being short. If that short runs 10 points against them, that is 2 x 10 x $5 = $100 of loss they never authorized and are not watching for, because in their mental model the trade is closed. The order whose entire job was to remove risk created a new naked position.
After any partial fill, compare the working protective quantity against the actual filled quantity before doing anything else. That three-second check catches every variant of the bracket mismatch, and it belongs in the same category as knowing your stop price.
Which state you land in is platform configuration, not a universal rule. Two designs exist. Some front ends treat the bracket as a managed object and resize the exit orders whenever the position changes, so scaling in or out rewrites the stop and target quantities for you. Others place static exit orders at the quantity you configured and never revisit them, which is exactly how a stop for 5 survives against a position of 3. Native exchange-side brackets can also behave differently from platform-simulated ones on the same front end. Understand how bracket and OCO orders behave before relying on them, then verify your own platform once with a deliberately oversized order in a thin instrument. The vendor help guide is where you start; the order ticket is where you get proof.
Which failure mode do you want?
That is the real question, because no configuration removes the problem. FOK removes partials and pays in complete non-fills, which for a discretionary trader means missed trades and for a systematic trader means a live record that silently diverges from the backtest. FAK or IOC removes the lingering remainder and pays in permanently undersized positions. A market order removes fill uncertainty and pays in slippage, and on CME even that is not absolute, since an unfilled market-with-protection remainder rests as a limit at the protection boundary. Accepting partials and reconciling by hand is the fourth choice, and it costs attention exactly when attention is scarce.
Fanning out across accounts is sometimes the wrong response entirely. If a strategy's edge depends on getting the whole intended size at one price, a scalp with a 2 to 4 tick target where one tick of blended-entry degradation eats a real share of expected profit, spreading it across a fleet in thin instruments multiplies the problem. Every follower queues independently and partials independently. Fewer accounts in more liquid instruments, or smaller per-account size relative to displayed depth, is the fix. Adding accounts to a size problem makes it a bigger size problem.
The reframe that makes this manageable: the partial is not the event. The depth information at that level is the event. Do the two-number check, choose deliberately between holding the smaller position and repricing your risk, and never let a chase turn a 60% position into a 116% risk.
Frequently asked questions
Why did only 3 of my 5 contracts fill?
Because only 3 contracts of opposing interest were resting at your price when your order arrived. A limit order matches against available quantity one resting order at a time, so the balance you could not match stays working at that price until it fills, is cancelled, or expires. Nothing rejected your order; it partially matched and the remainder became an open order.
Is a partial fill a broker error?
No, a partial fill is a documented exchange outcome, not a fault. CME Group's matching documentation explicitly covers the case where more quantity is aggressing than resting, and resolves it by allocating available quantity in timestamp order. If you want a different result you have to send a different instruction, not a complaint.
What is the difference between Fill or Kill and Immediate or Cancel?
Fill or Kill must execute the entire quantity immediately or the whole order is cancelled, while Immediate or Cancel takes whatever is immediately available and cancels the rest. On CME Globex the Immediate or Cancel behavior is documented under the name Fill and Kill (FAK), so the exchange's own pages label it differently from most retail platforms. MetaTrader 5 and cTrader both use the IOC name for the same behavior.
Can a market order be partially filled in futures?
Yes. CME documents that a Market Order with Protection which cannot be completed inside its protected price range leaves the unfilled quantity resting in the book as a limit order at the protection boundary, and a Market-Limit order that only partially fills leaves the remaining quantity resting at the specified limit price. A market order buys fill likelihood with price uncertainty; it does not remove the incomplete-fill case.
Should I chase the unfilled part of my order to a better price?
Usually not, because repricing costs you queue position. CME lists a change of price as one of exactly three modifications that make a resting order lose its timestamp priority, alongside an increase in working quantity and a change of account number. Cancelling and replacing your remainder at a new price puts it behind every order already waiting there, which makes it less likely to fill, not more.
Does a partial fill make my trade less risky?
Only until you try to complete it. Three contracts of an intended five with a 10 point MES stop risks 3 x 10 x $5 = $150 instead of $250, which is 60% of plan. If you later add the missing 2 at a price 4 points worse, the blended entry becomes 5001.60, the original 4990.00 stop is now 11.60 points away, and realized risk is 5 x 11.60 x $5 = $290, which is 16% above plan.
What happens to my bracket order if only part of my entry fills?
Your protective quantity can stop matching your real position, and the outcome depends on your platform. If the stop and target were sized for 5 while only 3 filled, a stop that triggers in full sells 5 against a long 3 and leaves you short 2 with no protection at all. Some front ends resize exit orders automatically when the position changes and others leave them static, so verify yours once with a deliberately oversized order rather than assuming.
Why do I get partial fills at night but never during the day?
Because displayed depth at the inside is far thinner outside US cash hours. A 1 to 5 lot order in the ES or MES lead month during active hours is a tiny fraction of resting size, so it completes. The same order in the overnight session, in a deferred quarter, or in a low volume product can easily exceed what is offered at the touch.
How should a trade copier handle a partially filled master order?
It should mirror the executed quantity, not the requested quantity. Copying intent when the master got 3 of 5 makes every 1:1 follower carry $250 of risk against the master's $150, so the reference account becomes the least exposed account in the fleet. Copying reality can only make followers smaller than intended, which is a performance cost rather than a risk control failure.
Can I eliminate partial fills completely?
You can only choose which failure mode replaces them. Fill or Kill removes partials and pays in outright missed trades, which quietly breaks a systematic trader's match to their backtest. Fill and Kill removes the lingering remainder and pays in permanently undersized positions, and a market order pays in slippage, so every option has a bill.