A market order that only fills partially happens because there aren't enough opposing orders on the order book within your expected price range. A market order is designed to "execute immediately at the best available price." The system starts at the best price and eats up all the resting orders on the opposite side of the book, one level at a time, until your entire order quantity is filled or until no more eligible orders remain. If it runs out of orders halfway, the leftover portion gets canceled, and you'll see a "partial fill."
Step 1: Check the order book depth to see if there are enough opposing orders
Order book depth is the total quantity of all resting orders at the moment you place your order. A market buy order eats up orders at "sell level 1, sell level 2, sell level 3..." and so on. The same logic applies to sell orders. If the quantity you submit is larger than all the available orders near the current price, your order can only partially fill.
What to do: Open the OKX trading page, find the Depth Chart or Order Book data, and look at the total order quantity across the first few levels around the best bid/ask. If your order size is much larger than the combined quantity at those nearby levels, a partial fill is normal — not a system error. Order book data updates in milliseconds, so the depth at the exact moment you place your order determines how much gets filled.
How to know it worked: You can see the gap between "my order size" and the "depth near the current price" on the order book, confirming that insufficient depth caused the partial fill.
Common mistake: Many people only glance at the quantity at "sell level 1" and assume it's enough, then place the order. But after "sell level 1" is consumed, there's hardly any volume at "sell level 2" or "sell level 3." A market order doesn't just eat one price level — it eats the combined volume across multiple consecutive levels. Before placing a market order, you should check the cumulative depth at least across the first 5–10 levels.
Step 2: Check if your order was blocked by the price limit mechanism
OKX has a price protection mechanism for spot market orders: if the expected execution price exceeds the asset's price limit (for example, during extreme price swings), the order will only fill within the allowed price range. Any leftover quantity beyond that limit will be canceled by the system.
This can also happen in futures trading: when the index price deviates sharply, the system activates a dynamic price limit band. A market order cannot fill at an unreasonable price, which protects you from being forced into a trade at an extreme level.
What to do: Check your order history for the "average fill price" and "unfilled quantity." If the average price is within a reasonable range but the remaining portion is marked "Canceled," that means the price limit mechanism cut off the part that fell outside the allowed band. This is not a system malfunction — it's a risk control feature.
How to know it worked: You can now tell the difference between "partial fill due to insufficient depth" and "partial fill due to price limits."
Step 3: Check if "Immediate Or Cancel (IOC)" is active
Market orders on OKX use the Immediate Or Cancel (IOC) time-in-force setting by default. This means the order fills as much as possible instantly, and any unfilled part is immediately canceled — it doesn't stay on the order book waiting. The partial fill you see is a direct result of this mechanism.
What to do: In the order details, look at the "Time-in-force" field. If it says IOC, then a partial fill with the rest canceled is normal behavior. If you want your order to be "fill all or kill all," switch to Fill Or Kill (FOK). In FOK mode, if the order cannot be completely filled in one go, the entire order is canceled — so you'll never see a partial fill.
How to know it worked: You know whether you used IOC or FOK, and you can judge whether a partial fill matches the time-in-force setting you chose.
High-risk warning: Placing a large market order when the order book is thin can eat through multiple price levels and cause heavy slippage. Your actual average fill price may end up far worse than the price you saw when placing the order. If you place another order to catch up without checking the executed price, you might repeatedly buy at higher and higher costs. For large trades, it's better to use a limit order and manually set your price and quantity, so you stay in control of the execution price.
How to verify after the trade: Go to your Order History and check the order's "average fill price" and "filled quantity." If the average price is significantly higher than the "sell level 1" you saw before placing the order, it means you ate through multiple levels of depth. Next time, split large market orders into smaller chunks or simply switch to a limit order and wait for a fill at your desired price.


