Skip to content

Execution

Crypto post-only and time in force: what each controls

Seven units fill in two examples, but only one leaves permission to buy more. Decode post-only, GTC, IOC and FOK as concrete account outcomes.

Stepped order-book blocks illustrate crypto post only time in force.
Illustration for execution; examples in this article are educational.

Post-only controls whether an order can take liquidity on arrival. Time in force controls its immediate-fill conditions and how an unfilled remainder is handled. A good-till-canceled limit can wait; an immediate-or-cancel limit cancels the part it cannot execute immediately; fill-or-kill requires the applicable full immediate execution or none. These options do not guarantee a favorable price path or a completed position.

The labels are easy to confuse because exchanges expose them differently. This AI-assisted article turns them into observable account outcomes using original hypothetical examples. It does not recommend a fee strategy or claim every option is available through KLINEO.

Ask two questions about the same order

First: may this instruction match an opposing order immediately? Second: what happens if the requested quantity cannot all match now?

An ordinary limit order can be immediately executable. A buy limit at or above an available ask may consume that ask. The price ceiling remains in force, but the order is not automatically a maker merely because the operator selected limit.

Post-only adds a condition against that immediate taker result. Bybit describes canceling a post-only order that would execute immediately on placement. Binance Spot expresses maker-only placement through its LIMIT_MAKER order type, rejecting an immediately taker-executable instruction. The different status wording and parameter design matter to an integration. Bybit: post-only orders, Binance Spot: new order.

Neither response says an asset was acquired. The operational result of a prevented placement is usually no new fill from that attempt, subject to checking the actual exchange record. It is not a queue reservation and not a reason to silently submit an ordinary taker order instead.

Three lifetimes for a ten-unit intention

Assume an invented spot market, ABC/USDT, with these asks: three ABC at 25.00, four at 25.05 and nine at 25.20. An operator wants to buy ten ABC with a maximum price of 25.05. Ignore fees, competition, price changes and all other constraints so that only the instruction differences remain.

Seven ABC are immediately available at or below the authorized price. Their total cost is (3 × 25.00) + (4 × 25.05) = 175.20 USDT. The modeled average is 175.20 ÷ 7 = 25.028571... USDT/ABC.

Instruction for the same ten ABCImmediate filled quantityRemaining account obligation
Limit, good till canceled7 ABC3 ABC remain working at 25.05
Limit, immediate or cancel7 ABC3 ABC are canceled
Limit, fill or kill0 ABCEntire ten-unit instruction is canceled

The table applies the stated textbook conditions to a frozen, otherwise valid book. Venue-specific matching restrictions and self-trade rules can alter what liquidity is eligible in practice. Bybit documents the GTC, IOC and FOK distinctions for its supported limit orders. Bybit: time-in-force selections.

The first two rows produce the same immediate inventory and cost. They differ in future permission. One can still buy three more ABC; the other cannot under that existing instruction. A dashboard that displays only seven filled omits the distinction that matters for a subsequent action.

Fill-or-kill produces neither a partial position nor proof that the trade was good. The operator still has no ABC from that instruction. If the surrounding strategy required an existing holding, its next step must not run as though ten ABC were acquired.

A passive preview can become executable in transit

Consider a separate constructed observation: best bid 24.98 and best ask 25.00. The operator chooses a post-only buy at 24.99. On that snapshot it would sit between the two sides rather than immediately match the 25.00 ask.

Before the order reaches the engine, the best ask moves to 24.98. A normal buy limit at 24.99 could now take that available ask. Under the post-only behavior documented above, the attempt is prevented from taking liquidity and may be canceled or rejected according to the venue.

The preview was not necessarily wrong when shown. The input changed between observation and placement. Nor is the prevented order necessarily a system failure; refusing the immediate match can be the exact condition the operator requested.

A robust result message should preserve the reason and distinguish prevented placement from a resting order and a filled order. Repeatedly moving a post-only price closer can create a chase loop, lose queue position and leave the original decision unreviewed as conditions change.

For the underlying price and size behavior, see market versus limit orders. The comparison is about the actual book when matching occurs, not just whether a price looked passive when typed.

Lower modeled commission can coexist with a worse trade

Assume a hypothetical maker fee of 0.02% and taker fee of 0.06%, both charged in USDT. These are invented rates, not a current venue schedule. On a 250 USDT notional, they would be 0.05 and 0.15 USDT respectively, a difference of 0.10 USDT.

Now suppose a resting order buys ten ABC at 25.00 and the next observed price is 24.50. Marking that hypothetical holding at the new observation produces a five-USDT gross decline. The 0.10 USDT modeled fee difference cannot establish that the passive execution was economically better.

This does not prove passive orders are bad. The example identifies a missing comparison: what happened to the asset and what alternative execution was actually available? A maker label alone does not measure either.

A full analysis also includes orders that never fill. Comparing only filled maker orders with all taker orders can introduce selection effects. The strategies may have different opportunity sets, waiting times and exposure after partial execution.

Use the spread worksheet to separate displayed price gaps, actual fills and commission. Maker status is an execution characteristic, not a statement that the provider pays a rebate, that the fee is lower for every product or that total costs are smallest.

Treat expiry as an order outcome, not automatically a fault

An IOC order can execute part and expire for the remainder. A FOK order can expire without any fill. If an application converts every expired status into an undifferentiated failed trade, it can lose the information needed to manage inventory.

Binance Spot's enum reference explicitly includes expiry outcomes for IOC and FOK instructions. Its status definitions should be read together with cumulative executed quantities. Binance Spot: order and time-in-force enums.

For the seven-ABC IOC example, a local label of expired does not mean zero exposure. The complete result is seven acquired, three not acquired and no live remainder under that order. Count fills and fees before releasing a budget or approving another entry.

The partial-fill guide follows that accounting in detail. If the response never arrives, the distinct timeout-reconciliation guide applies; lack of an acknowledgement is different from a known IOC expiry.

Do not make an automatic fallback from FOK to IOC without a new authorization. That changes the permissible result from all-or-none to partial exposure. Likewise, removing post-only changes whether a taker execution is allowed. A convenient retry can silently become a different trading instruction.

A configuration is a product-specific contract

Write down the exact order type, time-in-force value and maker-only setting supported by the actual endpoint. Some exchanges encode post-only as a type; others expose it through another field or enum. A generic checkbox in a client does not prove the exchange received an equivalent request.

Inspect accepted parameters and any returned normalization. An unsupported combination should surface as a clear block, not disappear from the request while the application continues as if it applied. Record the final normalized instruction with the account, environment and instrument.

For closing derivatives, also check whether reduction-only semantics are compatible with the selected order type and account mode. The reduce-only explanation covers a different constraint: avoiding unintended position expansion. Post-only and IOC do not substitute for it.

KLINEO's Virtual, testnet and Live guidance explains why a simulated acceptance should not be carried into a production claim. This article's external references describe their own venues and do not establish a KLINEO control for every combination.

Verify what the choice actually permitted

For a GTC instruction, verify whether any remainder remains open after the immediate fills. For IOC, verify the filled quantity and terminal remainder. For FOK, establish whether the applicable full execution occurred. For post-only, distinguish a resting order from prevented placement and eventual fills.

Keep the original quantity and a stable decision benchmark when an intention is split into several attempts. Otherwise each refreshed submission can look cheap while the complete intention becomes expensive or remains unfinished.

These settings are useful because they express precise permissions. Their value disappears when a client ignores the distinctions between no fill, partial fill, live remainder and prevented taker placement. A clear instruction and an explained exchange result are stronger evidence than a favorable-looking button label.

Keep the context with the example.

Prepared with AI assistance by KLINEO Editorial. Each worked example is illustrative, with its sources and assumptions in the article. Read our editorial standards for authorship, verification and corrections.