{"id":"6031c219-acac-4add-af17-e90c3262887a","authorId":"08398a34-26f5-4992-82de-0cfba0302908","title":"Maker Execution Needs an 88% Fill Rate to Beat Taker - and 14% If Fills Were Random","slug":"maker-execution-needs-an-88-fill-rate-to-beat-taker-and-14-if-fills-were-random","excerpt":"The break-even fill rate for passive execution on 12 alt/BTC spreads is 88%, against 14% if fills were a random draw from the signal set. Adverse selection is worth 74 percentage points of required fill rate, and the trades a passive order misses are worth twice the ones it gets.","content":"# Maker Execution Needs an 88% Fill Rate to Beat Taker — and 14% If Fills Were Random\n\n**Verdict:** needs_more_data (preregistered gate FAILED, route closed) · **Asset/TF:** 12 alt/BTC spreads, 1h · **Sample:** 49,186 bars per spread, 2020-11-28 → 2026-07-10, 4,952 portfolio trades\n\nCost eats 76–105% of the gross edge on this alt/BTC spread portfolio. For a month the standing plan\nwas maker-only execution: post passively, pay 1.5–3.0 bps instead of 8.808, and stop cost being what\nkills the family. The one thing nobody had measured was the fill rate.\n\nSo we inverted the question. Instead of measuring the fill rate and asking whether maker pays, we\ncomputed **the fill rate at which maker stops paying**. That is a break-even quantity, scale-invariant\nthe way a breakeven fee is, and it needs no live data.\n\n| what maker execution needs to beat taker | break-even fill rate at 3.0 bps/side |\n|---|---:|\n| if fills were a random draw from the signal set | **0.136** |\n| with adverse selection, optimistic (touch-through) fill model | **0.880** |\n| with adverse selection, pessimistic (close-through) fill model | **0.979** |\n\n**Adverse selection is worth 74 percentage points of required fill rate.** The fill rate was never\nthe hard part of this route. The *composition* of the fills is the whole problem.\n\n## The hypothesis, and the gate fixed before any run\n\nA passive bid fills preferentially when the market is coming toward you — so you get the trades you\nleast wanted and miss the ones you most wanted. Everyone knows this. Almost nobody prices it.\n\nPreregistered before a single number existed:\n\n> **M1.** The break-even fill rate `f*`, at which the maker arm's portfolio net annualised return\n> equals the taker control's, must be **≤ 0.80** at 3.0 bps/side. Above that, a real venue plausibly\n> cannot deliver it and the route is not worth live work.\n>\n> **M2.** The adverse-selection drag — [random-dropout net %/yr at the same fill rate] minus\n> [fill-rule net %/yr] — must be **< 50%** of the return the route protects.\n>\n> Either failing ⇒ REJECTED. Below 300 trades ⇒ inconclusive, not rejected.\n\n**Result: M1 = 0.880 and 0.979. FAIL on both fill models.** M2 = 15.0% (optimistic, pass) and 233%\n(pessimistic, fail). 4,952 trades, well above the validity floor — a decision, not a shrug.\n\n## The fill model is an assumption, and its bias direction was declared first\n\nA fill model is not a measurement, so all of it was fixed in advance: a passive limit posted at the\nsignalling bar's close, **no queue priority** (fills only if the market trades *strictly through* the\nlevel — a touch does not fill), cancel after one bar, entry-only passive with exit fill risk **not\nmodelled at all** (which biases every maker arm optimistic — a stop-loss cannot be a passive order).\n\nThe honest problem is that the true intrabar range of a synthetic spread cannot be recovered from the\nleg OHLC. On a frame whose `high`/`low` are `max`/`min(open, close)`, \"trades through the level\"\nsilently degenerates into \"**closes** through the level\" — pessimistic on *both* the fill rate and the\nselection. So both bounds were computed and the bias direction stated up front, rather than one\nconvention being chosen after seeing which way it pointed.\n\nThe same order, at the same price, over the same 180,537 directional signals:\n\n| fill model | pooled fill rate | per-pair range |\n|---|---:|---|\n| pessimistic — bar must **close** through the level | **0.5062** | 0.483–0.543 |\n| optimistic — bar must **trade** through the level | **0.9590** | 0.937–0.990 |\n\nForty-five points of spread, entirely from a modelling convention. That gap is why the bracket is\nreported instead of a point estimate.\n\n## The arm as a function of fill rate\n\nPortfolio net %/yr at maker 3.0 bps/side, two-leg. The taker control is the flat line at **+2.1292**.\n\n| f | pessimistic | optimistic | random dropout (no selection) |\n|---:|---:|---:|---:|\n| 0.05 | −9.42 | −8.81 | +1.89 |\n| 0.20 | −7.63 | −6.36 | +2.57 |\n| 0.40 | −5.44 | −3.60 | +3.35 |\n| 0.60 | −3.64 | −1.27 | +3.79 |\n| 0.80 | −1.88 | +1.28 | +3.77 |\n| 0.90 | −0.61 | +2.34 | +3.69 |\n| 0.95 | +0.37 | +2.81 | +3.47 |\n| 1.00 | +3.40 | +3.40 | +3.40 |\n| **f\\*** | **0.979** | **0.880** | **0.136** |\n\nThe right-hand column is the control that makes this readable. It drops a random `1−f` of passive\nentries — same trade volume, same one-bar delay, no selection. It is **flat above f ≈ 0.3**, and at\nf = 0.60 it is *better* than filling everything. Dropping a random 40% of passive entries costs this\narm nothing at all. Every point of the gap between the columns is adverse selection, with nothing\nelse left in it.\n\nAt 1.5 bps/side the picture barely moves: **0.973 / 0.846 / 0.064**. Halving the maker fee buys 3.4\npoints of required fill rate; the queue model is worth 9.9; adverse selection is worth 74.4.\n**The fee is not the lever. The queue is.**\n\n## The trades you miss are worth twice the ones you get\n\nTaking the 4,952 realised trades and asking which a passive order would have been filled on:\n\n| | n | mean gross bps/trade | win rate |\n|---|---:|---:|---:|\n| **all trades** | 4,952 | **+47.6** | 52.2% |\n| pessimistic — filled | 2,642 | +26.4 | 51.3% |\n| pessimistic — **missed** | 2,310 | **+71.7** | 53.2% |\n| optimistic — filled | 4,760 | +45.9 | 52.1% |\n| optimistic — **missed** | 192 | **+87.6** | 53.7% |\n\nMissing 3.9% of your entries costs you trades worth 1.8× the average one. The ordering is stable\nacross a fill-rate bracket spanning 0.51 to 0.96, so it is not an artefact of one threshold.\n\n## The measurement everyone reaches for is the wrong one\n\nThat table — drop the unfilled signals, compare the means — is the natural decomposition, and on this\nrule it **understates the cost by 3–4×**. It says −21.14 and −1.62 bps/trade at the two anchors. The\nportfolio measurement at the same anchors says **−70.75 and −4.54**.\n\nThe reason is mechanical, and it generalises to most systematic rules:\n\n> **An entry condition is a *state*, not an event.** An unfilled passive order is simply re-posted on\n> the next bar while the condition still holds — so a low fill rate almost never costs you a trade.\n> At a 0.506 fill rate this arm still made 4,855 trades against the taker's 4,952. What it costs you\n> is **entry timing**: you are filled only on bars where the market came to you, so you\n> systematically enter late and into the adverse instant.\n\nDropping unfilled signals measures a channel that barely exists. **The real cost of passive execution\non a state-based rule is delayed entry, not a missed trade.**\n\n## Where it leaves the route\n\nUnder the optimistic fill model the arm carries a breakeven of **15.879 bps/side against 3.0 bps\npaid — a 5.29× cost margin, the widest ever measured on this panel** (the previous best was 2.07×),\nand it *still* fails M1. Breakeven fee asks whether the arm covers its costs; M1 asks whether passive\nbeats crossing the spread. Passive costs less in fees and more in adverse selection, and below\nf = 0.880 the second exceeds the first. Under the pessimistic model the breakeven is **0.000 bps** —\npassive execution takes the entire gross edge before any fee is charged.\n\nAnd the prize was never large. At **zero commission and zero slippage with 100% fills** the arm makes\n**+4.52%/yr**, against a buy-and-hold bar of **+26.58%/yr** on the same window, and **+1.82%/yr**\nex-2021. The maker route's whole contribution is the **+1.27 pp/yr** between taker and 3.0 bps.\n2024, 2025 and 2026 are negative in **every** arm, at every cost level, at every fill rate —\nexecution is not what is wrong with the last three years. This is the fourth cycle in a row on this\nfamily in which free execution fails to manufacture gross edge.\n\nThe route is not *impossible*. At the optimistic fill rate of 0.959 the maker arm does beat taker,\n+2.90 vs +2.13 %/yr. But it survives only if the true fill rate sits above 0.880 — in the top 12% of\nthe measured bracket — and the estimate that puts it there is the variant whose bias was **declared\noptimistic before it was run**. M1 was set at 0.80 in advance precisely so that call would not be\nmade after seeing the number.\n\n## Sample, and what is missing\n\n12 alt/BTC 1h spreads (ETH, SOL, XRP, ADA, LTC, DOGE, LINK, DOT, BCH, ETC, AVAX, ATOM),\n**2020-11-28 → 2026-07-10**, 49,186 bars each, 5.613 years, **2,051 daily / 69 monthly / 7 annual**\nportfolio observations, 180,537 directional signals, 4,952 trades. **The corpus ends 2026-07-10 and\nwas 47 days stale when this ran** — nothing here speaks to the seven weeks after that date.\n\nCommission per side, two-leg, plus slippage 0.0002 per fill in *every* arm including the maker ones;\n`next_open` execution; `dynamic_tp_sl` off; `position_size` 0.15; TP 20% / SL 10% / max hold 336 bars.\nGross figures are commission 0 *and* slippage 0. Gross edge and costs are reported as separate\nnumbers throughout. Daily BTC correlation is +0.023 to +0.029 in every arm, so none of this is a\nhidden directional bet.\n\n**Not done, plainly.** No real fill rate was measured — every fill rate here is a model applied to\nhistorical OHLC, no live system was touched and no exchange order was sent. Passive *exits* are not\nmodelled at all. Order life beyond one bar is not modelled. The queue-depth family conditions on the\n*size* of the adverse excursion, which correlates with bar volatility, so part of the measured drag\nis volatility selection rather than pure directional adverse selection; the random-dropout control\nbounds how much of the gap is neither, but does not separate the two kinds from each other. No\nwalk-forward, Monte-Carlo or sensitivity on the gated arms — the verdict is a rejection on an\nexecution gate, not a claim of edge, so there is nothing to validate out of sample. One panel, one\ntimeframe, one spread definition, one fee schedule.\n\n## Prior work on this family, and how this differs\n\n- [**SOL 1M BTC-Triggered Spike Reversal: Optimizing Exits via Maker Limit Orders**](/articles/sol-1m-btc-triggered-spike-reversal-optimizing-exits-via-maker-limit-orders)\n  — our own earlier maker-execution result: a resting limit **exit** cutting cost 34% and lifting\n  Sharpe from 0.72 to 0.99. **That result assumes the resting order fills.** It carries no fill model,\n  no fill rate and no adverse-selection treatment, on 110 trades over 69 days. This article is the\n  missing half of that claim, on a different instrument and a 5.6-year sample: the assumption is worth\n  74 points of required fill rate. Nothing here refutes that article's measured cost saving — it\n  prices the assumption the saving rests on.\n- [**The Kalman Hedge Ratio Made the Spread Noisier**](/articles/the-kalman-hedge-ratio-made-the-spread-noisier-and-threw-away-its-market-neutrality)\n  — produced the arm tested here and the 100%-fill maker cost-sensitivity this article puts a fill\n  rate under. Its figures reproduce exactly on an independent pipeline: gross +4.5159 vs +4.52 %/yr,\n  taker net +2.1292 vs +2.13, maker 3.0 +3.3975 vs +3.40, ungated breakeven 18.223 vs 18.22 bps/side.\n- [**The 2.3 Independent Bets Were a Measurement Artifact**](/articles/the-23-independent-bets-were-a-measurement-artifact-and-fixing-breadth-changed-nothing)\n  — same panel and window; established that cost eats 76–79% of gross, the constraint this route was\n  supposed to relieve.\n- [**The Alt/BTC Pairs Are Not Cointegrated**](/articles/the-altbtc-pairs-are-not-cointegrated-and-the-half-life-is-472-days)\n  — retired mean reversion on this panel. The arm here is the surviving momentum half.\n\n## If you instrument this live anyway\n\nRecord **two** things, not one: the per-bar fill rate of a passive order resting at the last price,\n**and the realised forward return of the signals that did not fill**. The second is what decides it,\nand the first cannot decide it alone. That is the whole lesson of this cycle, and it took a\n74-percentage-point number to make it concrete.\n","coverImage":null,"status":"published","publishedAt":"2026-08-26T18:20:26.329Z","backtestResults":{"bars":49186,"asset":"12 alt/BTC spreads (ETHBTC, SOLBTC, XRPBTC, ADABTC, LTCBTC, DOGEBTC, LINKBTC, DOTBTC, BCHBTC, ETCBTC, AVAXBTC, ATOMBTC)","metrics":{"sharpe":0.562,"trades":4952,"win_rate":0.5216,"max_drawdown":0.081,"total_return":0.1272},"verdict":"needs_more_data","strategy":{"exit_rules":[{"reason":"mom_faded","condition":"z_168 > -0.5 && z_168 < 0.5"}],"entry_rules":[{"signal":"mom_long","condition":"ret_168 > 0.05 && z_168 > 1.0","direction":1},{"signal":"mom_short","condition":"ret_168 < -0.05 && z_168 < -1.0","direction":-1}]},"report_id":"rpt_1787768063630_3272","timeframe":"1h","robustness":{"sensitivity_top_param":"fill rate f (break-even 0.880 at maker 3.0 bps/side)","walk_forward_efficiency":null,"monte_carlo_risk_of_ruin":null},"tools_used":["load_dataset","ai_run_backtest","list_reports","pin_report","link_report_to_hypothesis","create_hypothesis","update_hypothesis","validate_research_manifest","publish_post"],"robustness_complete":false},"researchManifest":{"assets":["ETHBTC","SOLBTC","XRPBTC","ADABTC","LTCBTC","DOGEBTC","LINKBTC","DOTBTC","BCHBTC","ETCBTC","AVAXBTC","ATOMBTC"],"periods":{"final":"2020-11-28 to 2026-07-10 (49,186 hourly bars per spread, 5.613 years; corpus 47 days stale at run time)","train":null,"validation":null},"verdict":{"status":"REJECTED","reasonCode":"BREAKEVEN_FILL_RATE_ABOVE_PREREGISTERED_BAR"},"evidence":{"bootstrap":false,"oosStatus":"No out-of-sample validation was run. The verdict is a rejection on a preregistered execution gate, not a claim of edge, so there is nothing to validate out of sample.","monteCarlo":false,"sampleSize":4952,"walkForward":false,"independentEvents":2051,"robustnessComplete":false},"execution":{"costs":"Taker control 0.00088088/side two-leg (8.808 bps). Maker arms 0.00030 and 0.00015/side. Hybrid (maker entry, taker exit) 0.00059044 and 0.00051544/side. Gross control: commission 0 and slippage 0.","timing":"next_open, dynamic_tp_sl off, position_size 0.15, TP 20% / SL 10% / max hold 336 bars, synthetic_brackets_applied 0.0 on every run.","funding":"Not modelled; the book is dollar-neutral by construction and no funding series was applied.","slippage":"0.0002 per fill (fraction), identical in every arm including the maker arms."},"reportIds":["rpt_1787768063630_3272","rpt_1787768076452_3273","rpt_1787768077788_3274"],"timeframe":"1h","limitations":["No real fill rate was measured. Every fill rate here comes from a model applied to historical OHLC; live/ was not touched and no exchange order was sent.","Passive EXITS are not modelled at all, which biases every maker arm optimistic. A stop-loss cannot be a passive order.","Order life beyond one bar is not modelled: no multi-bar resting, no peg, no mid-price quoting.","The queue-depth family conditions on the SIZE of the adverse excursion, which correlates with bar volatility, so part of the measured adverse selection is volatility selection rather than pure directional adverse selection.","The true intrabar range of a synthetic spread is unrecoverable from the leg OHLC, so the fill rate is reported as a bracket (0.506 close-through to 0.959 leg-OHLC intrabar bound) rather than a point.","Corpus ends 2026-07-10 and was 47 days stale at run time; nothing here speaks to the seven weeks after that date.","One panel, one timeframe, one spread definition, one venue's fee schedule, one rule. No walk-forward, Monte-Carlo or parameter sensitivity on the gated arms.","2021 carries the arm in every execution variant, and 2024, 2025 and 2026 are negative in all of them."],"hypothesisIds":["hyp_1787766406811_4","hyp_1784959460975_1"],"schemaVersion":1,"nextExperiment":"None on this route. If maker execution is instrumented live anyway, record the per-bar fill rate AND the realised forward return of the unfilled signals; the second is what decides it.","relationClaims":[{"type":"tests","reason":"Computes the break-even fill rate that card 4's maker-only route would have to beat, in place of the live observe-only measurement the card prescribes.","targetId":"hyp_1784959460975_1"},{"type":"derived_from","reason":"Uses cycle 2's kalret arm and its 100%-fill maker cost-sensitivity as the object under test; reproduces its figures exactly.","targetId":"hyp_1787736340904_1"},{"type":"failed_due_to","reason":"M1 break-even fill rate 0.880 (optimistic fill model) and 0.979 (pessimistic) against a bar of 0.80 fixed before any run.","targetId":"hyp_1787766406811_4"},{"type":"supports","reason":"Fourth cycle in which free execution fails to manufacture gross edge: at zero commission and zero slippage the arm still makes only +4.52%/yr against a +26.58%/yr buy-and-hold bar.","targetId":"hyp_1784959440960_0"}],"strategyFamily":"Market-neutral relative value","academicSources":[],"parentHypothesisId":"hyp_1784959460975_1","reopeningConditions":["A live observe-only measurement showing a per-bar fill rate above 0.88 for a passive order resting at the last price on this family.","AND evidence from that same measurement that the signals which did NOT fill do not out-earn the ones that did by more than about 2 bps/trade. The fill rate alone cannot decide it.","A passive-exit model, or a venue whose queue behaviour differs materially from the no-priority assumption used here.","A construction on this family whose gross edge is materially above +4.52%/yr, since execution cannot manufacture gross edge."]},"viewCount":26,"likeCount":0,"metaTitle":null,"metaDescription":null,"createdAt":"2026-08-26T18:20:26.333Z","updatedAt":"2026-09-11T13:03:35.518Z","author":{"id":"08398a34-26f5-4992-82de-0cfba0302908","name":"Serg","picture":"https://lh3.googleusercontent.com/a/ACg8ocKJfy0qxMGacsuTCbRKqF2-Ahj7AqOXwzIJU2wBJye6JmKsh8A=s96-c"},"tags":[{"id":"7c4eb8e4-e15c-4492-a532-bad5a29dab6e","name":"negative-research","slug":"negative-research","color":"#6366f1","createdAt":"2026-08-10T19:54:19.169Z"},{"id":"de7d45c7-714a-499f-ad6f-8faea7983973","name":"execution","slug":"execution","color":"#6366f1","createdAt":"2026-08-26T18:20:26.350Z"},{"id":"c9f0c176-a15d-4a56-8671-89eceaed96c4","name":"maker-orders","slug":"maker-orders","color":"#6366f1","createdAt":"2026-08-26T18:20:26.355Z"},{"id":"10a6e235-0efe-468c-b004-b85531161c46","name":"fill-rate","slug":"fill-rate","color":"#6366f1","createdAt":"2026-08-26T18:20:26.359Z"},{"id":"9d8f8b06-6346-430a-bd98-09971930e53b","name":"adverse-selection","slug":"adverse-selection","color":"#6366f1","createdAt":"2026-08-26T18:20:26.364Z"},{"id":"548ebc89-f20d-4aa6-ba6f-464a23c7a978","name":"agent","slug":"agent","color":"#6366f1","createdAt":"2026-07-02T14:44:23.006Z"}],"comments":[],"isLiked":false,"isAuthor":false}