We Value Your Privacy

    We use cookies to enhance your experience, provide essential functionality, and analyze site usage. You can customize your preferences or accept all cookies. Learn more

    Research log
    Research finding

    Sweep #2, with the SPY/QQQ parallel from sweep #5 · August 2026

    The opening-range breakout is real — and smaller than the cost of trading it

    The opening-range breakout is one of the most widely taught intraday setups: mark the high and low of the first stretch of the session, buy the break of the high, trail a stop, flatten at the close. It has a plausible mechanism behind it — overnight information gets priced in a burst when the main session opens, and the first range is a decent proxy for where that burst settles.

    We pre-registered it, tested it properly, and killed it. The interesting part is how it died: not because the pattern isn't there, but because it is smaller than the cost of trading it. This is the clearest example in the research log of a strategy that is simultaneously real and untradable.

    The test

    Fixed before any run, as part of a sweep that added session structure to the strategy language (hour_utc, day_of_week, session open/high/low/VWAP, opening ranges — all fixed UTC windows):

    S1 — US-open ORB long. During the first hour of the US session (13:30–20:00 UTC), enter long when the close crosses above the session's opening range high. No entries after 18:00. Exit on a 2×ATR trailing stop or at session end.

    Run on BTC, ETH and BNB perpetuals at 15m, with a 1h probe. Two independent windows (Aug 2018 → Aug 2022 and Aug 2022 → Aug 2026). Costs: 0.1% per side plus funding on every held bar. Gates: net positive in both windows, survives deleting the best trade, max drawdown ≤ 20%, at least two of three majors. A short mirror and two neighbouring session hypotheses ran alongside it.

    The net result

    All 42 net-of-cost cells across the four session hypotheses were negative, with profit factors between 0.38 and 0.98. Nothing reached the neighbour or stress phases, because the pre-registration rule only runs neighbours for families whose primary shows genuine signal.

    By the usual standard that is the end of the story. It isn't, because of what the diagnostic showed.

    The gross diagnostic

    To find out why a family died, the same runs were repeated with fees switched off and funding left on. This is not a tradable configuration — no one trades for free — but it separates "the pattern isn't there" from "the pattern is there and costs ate it".

    Setup (gross) W1 W2 Reading
    ORB · BTC 15m +28.8% · PF 1.09 · survives strip-best +36.3% · PF 1.17 · survives strip-best Real, window-stable tendency
    ORB · ETH 15m +31.5% · PF 1.08 · survives strip-best +43.0% · PF 1.16 · survives strip-best Same
    Session-VWAP reversion (best cells) mixed positive mostly negative Unstable even gross
    London breakout of the Asia range large positive negative everywhere Regime artifact even gross

    The opening-range breakout on BTC and ETH is the only one of the four that behaves like a genuine effect: positive in both independent windows, surviving strip-best-trade, on roughly 870 trades per window. That is a lot of evidence for a small, consistent tendency.

    The arithmetic that kills it

    Across about 870 trades per window, the gross result works out to roughly +0.04% per trade. Break-even for an edge that size is 0.02% per side.

    This sweep charged 0.1% per side — the library's conservative spot-taker default at the time. Sweep #4 later corrected that assumption: these are USDT-M perpetuals, whose standard schedule is 0.05% taker and 0.02% maker. Both rates belong in the answer, so both are stated here.

    Cost model Round trip The edge against it
    Spot taker, as this sweep charged it 0.2% 5× smaller
    Perpetual taker — the honest retail rate 0.1% 2.5× smaller
    Perpetual maker 0.04% break-even

    At the rate a retail account actually pays to cross the spread on a perpetual, the edge is about two and a half times smaller than the cost line. The original sweep said five times, on a fee schedule that belongs to a different instrument. The correction moves the multiple and leaves the verdict where it was.

    Break-even lands exactly on the maker rate, and that is not a loophole for this strategy. An opening-range breakout enters by crossing a level, which is a taker action by construction: you cannot rest a passive limit order at a price you are waiting to break through and still be trading the breakout. The one execution model that would pay for this edge is the one this strategy cannot use.

    It is worth being precise about what this does and does not mean:

    • It is not "the opening-range breakout doesn't work." It works, in the sense that the price tendency exists and repeats across regimes.
    • It is "you cannot collect it at retail execution costs." Every dollar of the effect and then some goes to the exchange.
    • Resting a limit order is not the way out, for the reason above: the entry is a level break, so the fill has to be aggressive. What would change the conclusion is being paid to take liquidity — a taker-rebate tier, an internalised fill, a venue that pays for order flow. Those exist, and the honest version of that statement is that you would be running a different business than the one this library measures.

    The same result on the world's most liquid instruments

    A reasonable objection: crypto perpetual fees are high, so try it somewhere cheap.

    That was tested. A later sweep ran intraday session-VWAP reversion on SPY and QQQ using real regular-hours SIP bars, extended hours filtered out, DST-aware, at 2 basis points per side — about the friendliest honest cost model a retail trader can claim anywhere.

    All four cells failed. SPY nets to roughly zero (PF 0.98 and 1.00, −3.1% and +0.3%) and fails strip-best in both windows. QQQ is outright negative (PF 0.94 and 0.97) with 24–42 point drawdowns and Monte-Carlo p95 tails of 34–55. With 500–1,000 trades per window paying about 0.04% round-trip, the implied gross edge is +0.02–0.04% per trade — once again the size of the cost line, on the most liquid instruments in existence at nearly zero fees.

    Two asset classes, two cost structures, same answer. The sub-daily structure exists faintly almost everywhere and clears trading costs almost nowhere.

    What we kept

    The session atoms stayed in the strategy language. No standalone intraday entry cleared the bar, but session structure is genuinely useful as a filter or an exit on higher-timeframe strategies — a session-end flatten, a day-of-week gate, a "don't enter in the last hour" rule. The Sensei coach can compile all of them.

    What we did not keep is the idea that an intraday breakout is a strategy on its own.

    A note on reproducing this

    The sweeps on this page ran in August 2026, before the research harness was committed to the repository. Their numbers are recorded here and in the research log but they cannot be re-derived from the codebase: the scripts were not checked in, and no result files were either. Sweeps #9 onward are committed — pre-registered in one commit, results in the next — and can be re-run.

    That is a real gap and it is stated rather than papered over. It does not make these numbers wrong; it makes them asserted. Treat the committed sweeps as the ones you can audit.

    Other findings