↗
TENSORPARADIGMNEURAL MARKET INTELLIGENCE
TENSORPARADIGM RESEARCH / ORDER EXECUTION / COSTS AND MISSED TRADES

Market Orders vs. Limit Orders for Trading Bots: Do Lower Fees Actually Improve Returns?

Compare five identical trading decisions with market and passive limit entries. Reconcile fees, queue assumptions, partial fills, missed winners and avoided losses.

THE ANSWER

A lower maker fee improves the cost of a particular fill; it does not establish that a passive-order policy improves the whole strategy. The policy can fill a smaller quantity, miss profitable signals or receive fills just before the market moves against it. In our executed calculation on five deliberately constructed BTC/USDT episodes, passive entries lose 16.48590 USDT versus 22.98900 for immediate market entries. The 6.50310 difference comprises 2.00060 of matched-entry fee savings, 1.00000 of matched price improvement and 3.50250 from positions not taken. Both policies lose money. These are model outputs from a disclosed hypothetical event tape, not historical exchange fills or evidence of live profitability.

WHAT THE COMPARISON ESTABLISHES

  • A limit order can execute as a taker; a post-only instruction adds a different acceptance condition.
  • Compare the same eligible decisions and capital, including unfilled orders, rather than comparing only completed trades.
  • A price touching the limit does not establish a fill behind an existing queue.
  • Separate fee savings on matched quantities from changed exposure and opportunities not taken.
  • Cancellation is a request until its actual result is known; a late fill remains a real position.

A limit price does not guarantee a maker fill

A marketable buy limit can take an existing offer immediately. A resting limit can later provide liquidity. Some orders can contain both kinds of fill, so the relevant fee belongs to the execution, not merely the label on the submitted order. Coinbase describes this split explicitly. Binance’s LIMIT_MAKER instruction instead rejects an order that would immediately trade as a taker. Rejection avoids that execution; it does not deliver a free fill at the desired price. [1] [2]

A limit controls the permitted execution price, not the return after entry or the probability of execution. A market order also does not guarantee any particular price or a full fill under every venue condition. Our question is which complete execution policy serves a trading rule, not which order name sounds cheaper. The order-placement research of Cont and Kukanov treats fees, queues, order flow and execution risk together; its results do not supply a universal rule for this BTC example. [7]

Hold the signals and exit policy fixed before comparing entries

We specified two policies and five non-overlapping synthetic BTC/USDT spot episodes before calculating their outcomes. The cases were deliberately designed to expose mechanisms, not randomly sampled to estimate their frequency. Each policy receives the same five buy decisions, 60,000 milliseconds apart, starts with 10,000 USDT, and targets 0.02 BTC per episode. The quote at order arrival is 49,990 bid / 50,010 ask. The market policy buys the full target at the ask; the passive policy rests at the bid without topping up or chasing.

The constructed comparison fixes the whole policy, not only a fee rate
ItemFixed assumption
ClockDecision at 0 ms; arrival at 10 ms; next episode begins 60,000 ms later
Entry target0.02 BTC; market purchase costs 1,000.20 USDT before its fee; adequate cash reserved
Passive entryPost-only at 49,990; 0.03 BTC ahead in the base-case queue; no repricing or market completion
CancellationRequest at 500 ms; effective at 650 ms; all fills and final status known by 700 ms
ExitSell confirmed inventory at the common 10,000-ms bid; no residual entry order remains
FeesHypothetical maker 0.02%, taker 0.10%, all charged in USDT; all exits are taker
Selection boundaryFive designed cases and four queue assumptions; no market-data evaluation or chosen winning parameter

Both sell whatever they actually own at the episode’s declared bid at 10,000 milliseconds. An unfilled entry stays cash. The two accounts carry all previous results forward, with no deposits, borrowing, funding or compounding of the fixed target quantity. Quantities and prices are assumed valid under the hypothetical filters. Sufficient displayed liquidity is assumed for each modeled market execution. The tape is exogenous: neither policy changes later prices, order flow or other traders’ actions. That restriction prevents a claim about actual market impact or capacity.

Work through the queue instead of assigning fills from a candle low

The model uses a simple first-in, first-out queue at one price level. Eligible aggressive sell volume consumes the quantity ahead before reaching our order. We give no credit for other traders canceling ahead and assume no hidden quantity. These are model choices, not facts inferred about a venue. Coinbase’s published matching rules illustrate why time and displayed priority matter, while also describing details such as iceberg priority that this simple model omits. [3]

Synthetic event tape: sell flow executable at the passive bid before effective cancellation
EpisodeSell flow and event timePassive quantity filledCommon exit bid USDT
A: missed winner0.015 BTC at 200 ms0.000 BTC50,500
B: filled loser0.060 BTC at 100 ms0.020 BTC49,500
C: partial winner0.040 BTC at 200 ms0.010 BTC50,200
D: cancellation race0.050 BTC at 550 ms0.020 BTC49,700
E: avoided loserNo eligible flow before 650 ms0.000 BTC49,500

In Case C, 0.040 BTC of executable sell flow arrives at 200 ms. After consuming 0.030 BTC ahead, 0.010 BTC fills our 0.020 target; the remaining 0.010 is canceled. A candle low of 49,990 cannot reveal that quantity. Nor can aggregate trade data alone tell us precisely which cancellations occurred ahead of our order. A credible historical reconstruction needs event ordering and justified queue assumptions.

Case E has no eligible sell flow before cancellation. Its price declines only after the cancellation has become effective. In Case D, sell flow arrives at 550 ms, after our request but before cancellation takes effect. The complete 0.020 BTC fills and is acknowledged before the common exit. This is why the time of a cancellation request cannot be treated as the time an order stopped existing.

Lower fees coexist with a losing passive policy

The executed decimal calculation charges each fill once and carries cash and inventory through every episode. Market entries acquire 0.100 BTC across the five decisions; passive entries acquire 0.050 BTC. Passive order participation is 3/5, or 60%, because two orders fill fully and one partly. Its quantity fill rate is 0.050/0.100, or 50%. Reporting only the three filled orders would remove the missed opportunities from the comparison.

Net episode results in USDT; identical eligible decisions, actual modeled quantities
EpisodeMarket netPassive netPassive minus market
A+7.789800.00000−7.78980
B−12.19020−10.98996+1.20024
C+1.79580+1.49802−0.29778
D−8.19420−6.99396+1.20024
E−12.190200.00000+12.19020
Total−22.98900−16.48590+6.50310

Market gross price P&L is −13.00000 USDT and fees are 9.98900, giving −22.98900 net. Passive gross P&L is −13.50000 and fees are 2.98590, giving −16.48590 net. Ending equities are 9,977.01100 and 9,983.51410: returns of −0.229890% and −0.164859% on the common starting capital. Passive has lower fees but slightly worse gross P&L, despite trading half the quantity. These designed cases cannot establish an expected return, drawdown distribution or statistical edge. A no-trade cash baseline earns zero in this no-interest exercise and therefore finishes above both policies; that is an accounting benchmark, not a finding about the underlying market strategy.

Only part of the difference is a fee saving

First match the 0.050 BTC actually bought passively to the same quantities in the market policy, within each episode and with identical exits. On that matched quantity, buying at 49,990 instead of 50,010 improves gross price P&L by 1.00000 USDT. Entry fee savings are 0.050 × (50,010 × 0.001 − 49,990 × 0.0002) = 2.00060. Exit fees cancel in this matched comparison because quantity, exit price and taker rate match.

The remaining difference comes from exposure not taken. The missing market-policy quantities would have earned +7.78980 in A and +0.89790 in the unfilled half of C, but lost 12.19020 in E. Their combined net result is −3.50250. Not taking them therefore adds +3.50250 to passive relative performance. We did not identify which signals to skip in advance; these are an after-the-calculation accounting decomposition, not a proposed profitable filter.

Exact reconciliation of passive minus market net result, USDT
ComponentContribution
Entry fee saving on matched quantity+2.00060
Entry price improvement on matched quantity+1.00000
Missed winner A−7.78980
Missed half of winner C−0.89790
Avoided loser E+12.19020
Total+6.50310

The apparent total fee reduction of 7.00310 is larger than the matched-entry saving because the passive policy trades less and pays fewer exit fees. Calling all of that reduction better execution would confuse lower activity with a cheaper execution of the same exposure. The actual fill prices already include the bid/ask difference: do not deduct a spread estimate again. Real fee assets, discounts and additional charges must be reconciled from the account; Binance’s commission documentation explains why the effective charge is not always a single advertised maker/taker rate. [4]

A favorable entry price can arrive with unfavorable information

Cases B and D show the passive buyer receiving inventory before a lower exit price. The lower entry price and fee help relative to immediate market entry, but do not make those positions profitable. This illustrates adverse-selection risk: the events that reach a resting buy order can be associated with a worse subsequent price. These five chosen episodes do not estimate that association or its causal magnitude. On real data, examine post-fill price movement alongside fill probability and retain the unfilled signals as well.

In D, a system that treats the 500-ms cancellation request as success records no entry, even though 0.020 BTC fills at 550 ms. The correct account includes the −6.99396 USDT result. Binance explains that fills can occur while cancellation is in flight, and its user-data reports identify executed quantities and order states. [5] [6] Use a durable decision record, reconcile the order and position, and suppress blind retries while status is uncertain. A client order identifier helps identify an order; it is not by itself a complete application-level duplicate-prevention design.

The queue assumption changes the result more than removing the maker fee

We reran the same five episodes with 0, 0.01, 0.03 and 0.05 BTC ahead, leaving prices, flows, policies and fees unchanged. The passive outcomes are not monotone in queue size. A shorter queue captures more of the designed winners, but some fills also belong to losing episodes. At the longest queue only 0.010 BTC fills, so the small loss partly reflects not trading. It is not evidence that joining a worse queue is advantageous.

Executed queue sensitivity on the same constructed tape; not calibrated fill probabilities
BTC aheadPassive entry BTCPassive net USDT
0.000.075−8.24535
0.010.065−12.74037
0.030.050−16.48590
0.050.010−5.49498

With the base 0.03-BTC queue and a zero maker fee, passive net P&L improves only from −16.48590 to −15.98600. Eliminating that fee saves 0.49990 and still leaves a loss. This sensitivity holds fills fixed; a real fee change or different order size could change behavior and liquidity. We report every planned queue case rather than selecting the best one as an optimized policy.

An unfinished position still belongs in account equity

At 9,000 ms in E, before its scheduled 10,000-ms exit, suppose its available bid is already 49,500. The market account holds 0.020 BTC and 8,988.00100 USDT cash. Marked inventory is 990.00000, so equity is 9,978.00100. At this instant the passive account is flat with 9,983.51410. Dropping the market account’s open position would understate equity; showing only closed-trade profit would omit its current price loss.

The scheduled market sale of that inventory produces a further 0.99000 fee, reconciling marked equity to the final 9,977.01100. The pre-exit mark is not an executed liquidation result. We supply discrete transaction and endpoint records, not a complete intra-episode valuation series, so we do not report maximum drawdown or time-weighted exposure. Total executed turnover is 9,989.00000 USDT for market and 4,985.50000 for passive. Our forward-testing guide develops the full cash-and-inventory audit.

What a real comparison would need to record

Freeze the eligible signal set, arrival convention, order price, lifetime, partial-fill treatment, fallback and exit rule before evaluating the policy. A policy that waits and then crosses the spread is a third candidate, not the passive policy tested here. Give it its own rules and cost record. Separate entry execution from urgent risk reduction: the opportunity cost of an unfilled exit can differ substantially from an unfilled optional entry.

For historical work, obtain timestamped order-book and trade events at adequate depth, check sequence gaps and justify queue assumptions, latency, cancellation effects and impact. A sampled quote or a candle alone cannot identify the counterfactual fill. For a prospective pilot, retain every eligible intent, submission, rejection, partial fill, cancellation and final position. Declare fees and fee assets, then compare net whole-account outcomes with uncertainty appropriate to their dependence. The edge-or-luck article explains why many related fills do not become many independent tests.

ChatGPT or Claude can help specify those questions; Codex or Claude Code can help audit the event logic and arithmetic. Our investigation used AI assistance and executed decimal calculations on the constructed tape. It did not compare model products or connect a funded account. Require the collaborator to preserve unresolved events rather than inventing favorable fills.

Four bounded audit instructions
SPECIFY: Freeze signal eligibility, arrival time, price, lifetime, partial-fill treatment, cancellation, fallback and exit rules. Identify missing decisions.
IMPLEMENT: Preserve the approved policy and the complete event order; do not fill a limit merely because a candle touches its price.
RECONCILE: Track cash, inventory, fees and unresolved orders. Distinguish a cancellation request from its confirmed effect.
REPORT: Keep all eligible signals and decompose matched-fill price/fee effects from missed or avoided positions. Separate observed fills from modeled counterfactuals.

Choose an execution policy, not the lowest line in a fee schedule

The passive policy loses less on this constructed tape, but only 2.00060 USDT of its 6.50310 relative improvement is the matched-entry fee saving. Missing a winner hurts; avoiding a loser helps; queue and cancellation assumptions determine which inventory exists. Lower fees do not settle any of those questions.

The defensible next step for a real bot is a versioned execution comparison on its own eligible decisions, with justified fills and account reconciliation. A useful policy must satisfy execution urgency, capital and risk constraints as well as after-cost economics. Our results establish how to account for the differences, not which order type will make a future trading system profitable.

10 / DUE DILIGENCE

Before claiming that passive orders improve a bot

  1. Use the same eligible decisions, starting capital and declared exit policy.
  2. Specify post-only behavior, arrival time, lifetime, fallback and partial-fill handling.
  3. Identify queue assumptions and retain unfilled or rejected orders.
  4. Use actual fee assets and distinguish maker/taker fills from order labels.
  5. Reconcile cash, inventory and cancellation races before calculating performance.
  6. Separate matched-quantity price and fee effects from exposure not taken.
  7. Report every planned sensitivity rather than selecting the best queue assumption.
  8. Distinguish constructed model outputs, historical reconstructions and actual prospective executions.
FAQ / DIRECT ANSWERS

Direct answers about market and limit orders

Are limit orders always charged maker fees?

No. A marketable limit can execute as a taker, and an order may contain different execution types. A post-only condition changes acceptance: an order that would take liquidity can be rejected. Verify the venue and account rules rather than assigning fees from the order name.

If a candle touches my limit price, should the backtest fill it?

Not automatically. A queue ahead can consume the eligible flow before your order receives any quantity. A candle does not provide the event sequence, queue position or cancellation history needed to infer that fill.

Why not compare the average profit of filled orders only?

That removes the opportunities the policy missed. In this example passive entries miss a profitable signal, avoid a losing one and partly fill another winner. Whole-account results on all eligible decisions preserve those differences.

Can an order fill after I send its cancellation?

Yes, before cancellation actually takes effect. The constructed race fills at 550 ms after the 500-ms request and before the 650-ms effective cancellation. Reconcile final order status and actual inventory before issuing a replacement or exit.

Would zero maker fees make the passive policy profitable?

Not on the base constructed tape. Removing the maker fee improves net P&L from −16.48590 to −15.98600 USDT with fills unchanged. That is a conditional sensitivity, not a prediction for a real fee change.

Does this article show that limit orders outperform market orders?

It shows that one explicitly modeled passive policy loses less on five designed episodes. It does not estimate the frequency of those episodes, actual venue fills, statistical superiority or future profitability. The demonstrated result is the accounting decomposition and its sensitivity to execution assumptions.

Methods and primary references

AI-assisted deterministic study of five designed BTC/USDT spot episodes, calculated with decimal arithmetic on 26 October 2026. The two entry policies, common exit, synthetic queue flows and fee assumptions are disclosed above; all four planned queue cases are reported. Internal records reconcile cash, inventory, fees, opportunity effects and a cancellation race. No historical order book, observed venue fill, calibrated fill probability or live return is represented. Official documentation and original research support the cited mechanics, not the example’s prices, fees or profitability.

  1. Binance Spot REST API: market, limit and LIMIT_MAKER orders
  2. Coinbase: order types and maker/taker treatment of limit executions
  3. Coinbase Markets Trading Rules: matching and price-display-time priority
  4. Binance Spot API: commission rates and commission assets
  5. Binance Spot API: user-data execution reports
  6. Binance: order status and fills during cancellation
  7. Cont and Kukanov: Optimal order placement in limit order markets

Educational comparison on a constructed event tape. Modeled fills depend on the stated queue, timing, liquidity and impact assumptions. Lower fees and a limit price do not establish profitable execution or a maximum account loss.