Opening-candle strategy · execution study

One assumption decides whether this is a business or a bleed.

Same signal, same instrument, same ten years, same 2,510 sessions. The only thing that changes is what price the stop is assumed to fill at.

Sample 2,510 sessions Window 2016-08 → 2026-08 Config QQQ, 2.0× stop Grid 25 configs × 12 fill assumptions Status paper only
Stop fills at the stop price $13.53 +29.9%/yr · Sharpe +1.53 · max drawdown 15.2%
the fill
Stop fills 35% past it $0.59 −5.1%/yr · Sharpe −0.16 · max drawdown 62.8%

What slippage actually is

A stop is not a price. It is a trigger for a market order.

When you place a stop at $500, you are not telling the broker “sell me out at $500.” You are telling it “the moment this trades at $500, send a market order.” The market order then fills at whatever is actually bid at that instant — and the reason price reached your stop is that sellers were leaning on it. So you get $499.80, or $499.40, not $500.

Slippage is that gap: the difference between the price you asked for and the price you got. Here it is measured as a fraction of the stop distance. If your entry is $500 and the stop sits $2 below at $498, then a fill at $497.30 is 0.70 / 2.00 = 0.35 — 35% slippage. You keep the loss you planned for, plus another third of it.

Why it dominates this particular strategy

Two multipliers make a small per-trade cost into the whole result. The stop is hit on 40.8% of sessions — four days in ten, not a rare event. And the strategy runs at up to 2× leverage, sized so 1% of the account is risked to the stop. A haircut on a frequent, levered, small-edge trade compounds against you 1,024 times over ten years.

Why I built the slippage study at all

Because the backtest was filling stops at a price that cannot be traded.

The original backtest code did something standard and quietly wrong. It checked whether the bar's low touched the stop, and if it did, it booked the loss at the stop price. That is the convention almost every retail backtest uses, and it is free money that does not exist.

This mattered here more than usual because of what the CPCV work had just found. The strategy had passed the overfitting test convincingly — selection bias of only +0.03 Sharpe, with 96% of 455 independent training splits picking the same configuration on their own. That is a real, stable pattern, not a curve fit. So the honest next question was no longer “is the pattern real?” but “what does it cost to actually harvest it?”

The answer turned out to be: roughly all of it. A separate study measured real slippage on this instrument at 28–41% of the stop distance. Breakeven is ~0.29. The measured range starts at breakeven and goes past it.

The same strategy, five fill assumptions

Growth of $1, QQQ 2.0× stop, 2016–2026 fills at stop (0%) fills 35% past 20%, 28%, 41%
Log scale — equal vertical distance is equal multiplication. Every curve trades the identical signal on the identical days. The shaded wedge is the entire disagreement, and it is caused by nothing except the assumed fill price. Hover for any date.

The whole surface

Every configuration against every fill assumption.

The single-column sweep above cannot show where the profitable region actually ends, so here is the full grid: five instruments × five stop widths, each scored across twelve slippage assumptions. Colour is annualised Sharpe. The outlined cells mark the sign flip — the breakeven frontier.

Sharpe ratio by configuration and stop-fill slippage −2.5+1.6
Grey column = share of sessions the stop is hit. Hover any cell for return, drawdown and $1 growth.
Read it left to right and the picture is unambiguous: every one of the 25 configurations dies somewhere, and only QQQ survives past the measured band at all. GLD, IWM and TLT never had an edge to lose — they start near zero and go straight down. The vertical band at 0.28–0.41 is where the measured evidence says we actually live.

The tuned parameter stops being the best one

Notice the ordering change across the QQQ rows. At a perfect fill, the 2.0× stop wins (+1.53) and 4.0× is worst (+1.15). At 35% slippage that reverses: 4.0× is best (+0.03) and 2.0× is worst (−0.16). Wider stops get hit less often, so they pay the haircut less often. The parameter we tuned was optimal only under the fill model that doesn't hold — though at that point every option is roughly zero, so this is a less-bad ranking, not a rescue.

Rank inversion: QQQ stop widths at 0% vs 35% slippage
The same five configurations, connected. Tighter stops fall furthest because they are triggered most.

Year by year

QQQ 2.0× annual return, perfect fill vs 35% slippage profit loss
At a perfect fill the strategy has no losing year in ten. At 35% slippage it has eight. This is the same data twice; only the fill assumption differs. 2026 is a partial year (157 sessions).

Everything we have tested

Where each idea actually landed.

Nine strategies have now been through a real out-of-sample test in this project. Eight are dead. One is undecided, and it is undecided on execution rather than on signal.

StrategyBest honest resultWhat killed itVerdict
Opening candle — QQQ 2.0× Sharpe +1.53 · +29.9%/yr Stop-fill slippage; breakeven 0.29, measured 0.28–0.41 Undecided
Overnight basket — QQQ+IWM+GLD Sharpe +1.36 gross · +14.5%/yr Untested for selection bias; only +0.16 Sharpe over simply holding New, unproven
Long straddle — 13 names, IV rank 208 trades · compounded −100% Volatility risk premium; 3 of 4 walk-forward windows lose No edge
Selectivity-gated straddle 3 of 4 windows −90% or worse Single-window gain was regime luck, not durable edge No edge
Iron condor — single name 69% win · −5.4%/trade Big moves blow through even 10%-OTM strikes No edge
Index premium selling — SPY/QQQ 73% win · −0.8 to −3.7%/trade Tail losses cluster in selloffs; 3 of 4 windows lose Too thin
0DTE directional lottery Needs 75–78% direction accuracy 24–30% bid/ask on the cheap tickets it buys No edge
Gamma exposure — intraday <1bp/day · Sharpe +0.35 / +0.05 Mechanism is real but an order of magnitude below cost Below cost
VIX-gated condors Best gate −1.42%/trade Regime effect is strong but every gated variant still loses No edge

The one new idea worth a look

The capital is idle overnight, and overnight is where the return is.

The candle strategy is flat by 15:30 every day. That means the account sits in cash for seventeen and a half hours out of every twenty-four. Splitting ten years of returns into the part earned while the market is open and the part earned between the close and the next open gives a lopsided answer.

Where the ten-year return actually accrued overnight (close → open) intraday (open → close)
Annualised return of each leg, 2016–2026, gross of costs. For IWM and GLD the intraday leg is negative — holding those through the day destroyed value while the overnight leg carried everything.

The two numbers that make this interesting

An equal-weight overnight basket of QQQ + IWM + GLD returns +14.5%/yr at Sharpe +1.36 with a 20.7% max drawdown, gross. More importantly, its correlation with the candle strategy's daily returns is +0.03 — effectively zero, which makes sense because they hold at literally different hours. Stacking them compounds to Sharpe +1.99 at +49%/yr, which is the range you asked about.

And the control that takes most of it back

Overnight-only runs at lower volatility than holding, so the fair comparison levers it up to match. Do that and charge a realistic 1bp/day of round-trip cost, and the QQQ+IWM+GLD basket gives Sharpe +1.12 versus +0.96 for simply holding the same three ETFs. For QQQ alone it is +0.81 against +0.94 — worse than holding. Most of the headline 1.36 is gold diversification, not a night effect. It also lost 13% in 2022, and it carries unhedgeable gap risk: the worst single night in the sample was −10.2% on 2020-03-16.

So: a real but modest incremental edge, worth perhaps +0.16 Sharpe over a diversified hold, whose genuine attraction is that it is free capital efficiency on top of an intraday strategy rather than a standalone business. It has had none of the CPCV or bootstrap treatment the candle strategy got, and the choice of gold in that basket was made by looking at the results — which is exactly the selection bias we spent last session measuring. Treat it as a hypothesis.

About the target

You asked for 1.5–2.0 Sharpe, at 30–40%/yr, sustained over ten years.
Candle, perfect fill +1.53 Hits it exactly — on an assumption we know to be false.
Candle, measured fill −0.16 The same strategy, once the stop fills where stops fill.
Gap to close 0.09 Slippage must land under ~0.20 for this to clear a 0.5 Sharpe.

Worth saying plainly: a sustained Sharpe of 1.5–2.0 net of real fills over a decade is not a normal retail outcome — it is roughly what good institutional quant books target, and most of them do not get it. That is not a reason to stop. It is the reason the fill number is the whole ballgame: at these Sharpe levels the edge per trade is small enough that execution quality is not a detail, it is the strategy.

What actually resolves this

  1. Log every stop fill against its stop price.

    The 28–41% estimate came from minute closes beyond the stop, which the study itself calls conservative. Real fills are the only thing that settles it. The paper account has placed one order and its stop never triggered, so there is currently zero live fill data.

  2. Recompute after roughly 30 stop-outs.

    At a 40.8% stop rate that is about 75 trading sessions — call it four months. Under 0.20 the strategy is viable; at 0.28 and above no amount of parameter work saves it.

  3. Attack execution, not parameters.

    The levers that change the fill are structural: a wider stop (4.0× is the flattest row in the grid), a marketable limit instead of a market stop, checking the stop on 1-minute rather than 5-minute bars, or dropping the stop entirely for a pure time exit — which removes 100% of the slippage exposure by construction, since only stopped sessions pay it. Each is a testable change. Re-tuning the multiplier is not.

  4. Test the overnight sleeve properly before believing it.

    Run it through the same CPCV and block bootstrap the candle strategy got, with the basket composition re-selected inside each training split rather than chosen by hindsight, and with auction costs measured rather than assumed.

Unchanged

Paper only. No capital, and emphatically no borrowed capital, on any of this until a real fill distribution exists.

Generated from backtest/candle_slip_grid.py over cached 5-minute bars. 2,400–2,512 sessions per instrument, 2016-08 to 2026-08. Sizing: 1% risked to the stop, capped at 2× leverage, 0.5bp cost per trade. Equity curves compound. Prior work: docs/CANDLE_CPCV.md (selection bias, block bootstrap, tail concentration) and docs/GEX_0DTE_FINDINGS.md.