Does Stocks-in-Play Relative-Volume ORB survive validation?
Zarattini / SFI: trade only abnormal opening-range volume, first-bar bias, ATR-fraction stop, flat by the close.
It is the day-trading sentence that keeps coming back with academic packaging: wait for stocks that are in play, measure how loud the opening range is versus its own recent history, take the break in the direction of the first bar, use a tight ATR-scaled stop, and be flat by the cash close. Zarattini and co-authors framed that idea for the Swiss Finance Institute; an MQL5 essay later walked retail readers through an Expert Advisor version. We rebuilt the idea clean-room in Python — no MQL copied — on Alpaca SIP, with the same cost and Deflated Sharpe Ratio gauntlet as every other teardown here.
It does not clear the bar we use for a tradeable edge on this tape. That is not the same as “relative volume at the open is empty.” Our run is a proxy: RelVol ranked inside a fixed list of twenty liquid names, not a daily scan across thousands of US stocks the way the SFI paper describes. On that proxy, after site costs, both the article-like default and the Optuna “least bad” trial lose. The useful residue is where the Stocks-in-Play story still asks a real question, and which next experiment is actually worth the trial budget.
Credit. Underlying research: Zarattini, Carlo, et al., A Profitable Day Trading Strategy for The U.S. Equity Market (Swiss Finance Institute Research Paper Series No. 24-98, 16 Feb 2024). Public implementation essay we used as the rule lock: Jocimar Lopes, Low-Frequency Quantitative Strategies in MetaTrader 5 (Part 4) (MQL5 article 23226). The rule we locked is the public Stocks-in-Play RelVol ORB: eligibility on price / 14-day ADV / 14-day ATR, RelVol of the first five minutes versus the prior fourteen opening-range volumes, first-bar open/close bias, stop as a fraction of D1 ATR, flatten by 16:00 ET, optionally rank top-N by RelVol. Distinct from the published NY 15-minute Opening Range Breakout teardown (single-symbol time-window breakout) and from Session VWAP Bias (session VWAP imbalance, not opening-range RelVol). No vendor script was copied.
1 / The pitch: only trade the loud open
The pitch fits under a 5-minute chart and a morning scanner:
- Cash open 09:30 America/New_York. The first 5 minutes set the opening range (high, low, volume, and open/close bias).
- Pre-screen (14-day): price ≥ $5, average daily volume ≥ 1,000,000 shares, ATR ≥ $0.50.
- RelVol% = 100 × (today’s OR volume) / (mean of the prior 14 sessions’ OR volume). Keep names at or above 100% (1.0×); rank and optionally trade only the top N.
- Bias: first OR bar close > open → long only; close < open → short only; doji → skip.
- Entry: buy stop at OR high / sell stop at OR low (market if already through). Stop = 0.10 × ATR14 from entry in the article default. Flatten at 16:00 ET.
- Risk framing in the essay: about 1% of equity split across max symbols, leverage cap 4×. Our backtest attributes a daily risk budget of 1% of equity split across that day’s filled trades (documented in
config.yaml/strategy.py).
Sold as a catalyst / imbalance edge: overnight news hits a subset of names; abnormal opening-range volume flags institutional re-pricing; the first bar’s direction is the bias; a small ATR stop cuts noise; end-of-day exit harvests the session trend when it exists. If that sentence is true as a standalone system once you pay to trade the top RelVol names, a clean-room with 1.5 bps of friction should not need a miracle sample to show it — provided the universe matches the paper’s scan.
Paper / SFI claims (authors — not our run). The MQL5 essay summarizes the SFI study as analysing ORB across more than 7,000 US stocks (2016–2023), with a selected portfolio of 20 stocks achieving over 1,600% net performance, Sharpe 2.81, and ~36% annualized alpha versus ~198% total for passive S&P 500 over the same framing. It also states that applying a relative-volume filter (at least 100% RelVol, top 20) moved total returns from ~29% to ~1,637% in their study narrative. Treat those as paper claims. They are not numbers from our pipeline.
Our costs (site default, documented). Fees 0. Slippage 1.5e-4 (1.0 bps spread + 0.5 bps slip) — same framing as the NY ORB and Session VWAP teardowns. Event fills: stop at OR extreme (gap-through uses bar open); stop-loss at entry ± atr_stop_frac × ATR14; EOD at last RTH close. Optuna: 24 trials on relvol_threshold ∈ {1.0, 1.5, 2.0, 3.0}, atr_stop_frac ∈ {0.05, 0.10, 0.15}, top_n ∈ {3, 5, 8}, long_only on/off. Chronological 70 / 30 IS / OOS by calendar day. DSR via pipeline.metrics.
Proxy caveat (read this before the tables). True SFI-style Stocks-in-Play needs a daily RelVol scan across a wide US equity universe. We did not run that. We downloaded Alpaca SIP 5-minute bars for a fixed liquid set of twenty names and ranked RelVol inside that list. That is labeled proxy: true / universe_kind: fixed_liquid_stocks in summary.json. It is closer to “does RelVol-ORB work on mega-liquid names when you only compare them to themselves?” than to “does the full SFI scanner work?”
Universe (20): AAPL, MSFT, NVDA, AMZN, META, GOOGL, TSLA, AMD, NFLX, PLTR, AVGO, CRM, ORCL, INTC, BA, JPM, XOM, COST, SHOP, COIN. Tape span for features: 2016-01-04 → 2026-09-18 America/New_York (2,693 session days; PLTR and COIN enter later when listed). Portfolio RTH index: 210,044 bars.
2 / TEST: fixed liquid RelVol ORB, 24 Optuna trials, site costs
IS calendar days: 2016-01-04 → 2023-06-29 (1,885 days). OOS: 2023-06-30 → 2026-09-18 (808 days).
Best trial (least-negative in-sample Sharpe): relvol_threshold=2.0, atr_stop_frac=0.15, top_n=3, long_only=true.
| Fixed liquid RelVol ORB · Alpaca SIP 5m · 24 trials | |
|---|---|
| Best params | RelVol ≥ 2.0×, stop 0.15×ATR, top 3, long only |
| In-sample Sharpe (per bar) | −0.002541 |
| Out-of-sample Sharpe (per bar) | −0.014797 |
| Deflated Sharpe (DSR) | 0.000000 |
| OOS return | −72.95% |
| OOS max drawdown | −76.45% |
| OOS trades / win rate | 388 / 12.11% |
| OOS stopped (of trades) | 330 |
The search did not find a winner hiding in RelVol or stop width. It found the least-bad way to lose on this proxy: require louder opens (2×), widen the stop slightly (0.15×ATR), take only three names, drop the short side — still negative in-sample, still negative out-of-sample. DSR is 0.0000 against a bar we treat as about 0.95. verdict_draft.survives is false.
Default full sample (article-like: RelVol ≥ 1.0×, stop 0.10×ATR, top 5, long/short) on the same tape: 9,065 trades, win rate 9.62%, 8,137 stopped, return −100.0%, max drawdown −100.0%, per-bar Sharpe −0.030777. That is not a mysterious alpha hole — it is a tight-stop, low-hit-rate ORB on mega-caps after friction, without the paper’s full cross-sectional scanner.
3 / The illusions this proxy is good at producing
Paper Sharpe vs our DSR. The SFI brochure numbers (Sharpe 2.81, four-digit cumulative returns) are not a license to skip costs, trial deflation, or universe honesty. Our DSR is zero on a 24-trial search whose best in-sample Sharpe was already negative. Deflation cannot rescue a peak that never got aloft.
Win rate. OOS best trial: 12.11% on 388 trades. Default full: 9.62% on 9,065. The essay notes that ORB can be profitable with a win rate below 30% when the payoff ratio is large. On this proxy, after 1.5 bps of slip and a risk budget that pays the stop often (330 of 388 OOS trades stopped on the best trial), the payoff side did not show up as a shippable equity curve.
“We traded RelVol ORB.” We traded RelVol ORB among twenty liquid names. We did not replicate a 7,000-name morning scan that surfaces the day’s true Stocks in Play. Mega-caps are often liquid without being the idiosyncratic news name the economic story wants. Calling this a full SFI replication would be the content-mill move. We are not going to.
Long-only as a hidden regime bet. Optuna dropped shorts. That is the same pattern we saw on SPY ORB cousins: the search prefers not to fight the equity premium. It still failed to get paid for the long breakouts on this window.
4 / What this does not kill (untested on purpose)
A failed DSR on a proxy universe is not a ban on Stocks-in-Play as a question. These are the next attempts we would actually run. None of the lines below have numbers attached, because this pipeline did not produce them.
- A real daily SIP / vendor scan. Eligibility + RelVol across a broad US equity tape (thousands of names), then top-N — the SFI framing. Until that exists here, the proxy cannot clear or kill the paper’s headline claim.
- News / catalyst tags. The economic rationale is overnight corporate news. RelVol alone on mega-caps is a weak stand-in. Earnings calendar, FDA, M&A flags as a second filter — untested.
- OR width vs ATR. Skip tiny ranges (noise) and enormous ranges (move already happened). We took every eligible RelVol day. Retail ORB variants often don’t.
- Fill semantics. We used stop-at-OR-extreme with gap-through at bar open, same-bar stop check, EOD at close. Limit vs stop, next-bar-only, and broker stop simulation are different clocks. Untested.
- Cost / size realism. Site 1.5 bps is a flat slip assumption. Name-level spread, borrow for shorts, and the essay’s 1%-risk / 4× leverage sizing vs our equal daily risk split are different P&L engines. Untested as a sensitivity grid on this slug.
- ORB as a feature, not a system. RelVol rank, OR bias, and ATR stop distance are features you can feed a different edge (portfolio overlay, fade of failed breaks, vol-target on loud opens). This run tests standalone “rank, break, hope until 16:00” on a fixed liquid list.
If you take one research prompt from this piece, take (1): the same clean-room rules on a true multi-name RelVol scan, with trial count and costs in the headline. That is the smallest change that still resembles the SFI story, and the one this fixed-twenty proxy structurally cannot claim.
5 / What you'd need to believe anyway
To treat Stocks-in-Play RelVol ORB as a standalone, shippable system from this run, you would need to believe some combination of:
- that RelVol among twenty mega-liquid names is the same experiment as scanning 7,000 stocks for Stocks in Play;
- that an in-sample Sharpe of −0.002541, out-of-sample Sharpe of −0.014797, and DSR of 0.0000 after 24 trials is “close enough”;
- that a 12.11% OOS win rate with −72.95% OOS return is the edge rather than the screenshot of a tight-stop system on the wrong universe.
We don’t. We also don’t believe “DSR failed, delete relative volume from your brain.” Abnormal opening activity is still where overnight information can show up in volume space. That is a reason to keep measuring — on the right cross-section. It is not a reason to ship this proxy.
6 / Verdict
Not a tradeable standalone edge on this proxy tape. Still a question worth running on a real Stocks-in-Play scan.
Stocks-in-Play Relative-Volume ORB, as locked from the public SFI / MQL5 rule set, was implemented clean-room and tested on Alpaca SIP 5-minute bars for a fixed liquid universe of twenty US names (2016-01-04 → 2026-09-18, 2,693 sessions). That is a proxy, not a full multi-thousand-name SIP RelVol scan. Twenty-four Optuna trials; best trial RelVol ≥ 2.0×, stop 0.15×ATR, top 3, long only. In-sample Sharpe −0.002541. Out-of-sample Sharpe −0.014797. Deflated Sharpe 0.0000. Out-of-sample return −72.95%, max drawdown −76.45%, 388 trades, 12.11% wins. Article-like defaults on the full sample printed 9,065 trades, 9.62% wins, and −100% return after site costs. It does not survive.
What we would run next, and have not: a true broad-tape RelVol scanner, catalyst tags, OR-width filters, and a cost/sizing sensitivity that matches the essay’s risk model. Opening-range relative volume is still allowed to be a feature. It is not, on this proxy evidence, a product.
Check the next claim the same way
ToolDeflated Sharpe Ratio — 24 trials, OOS Sharpe −0.014797, DSR 0.0000 Tool
Net-vs-Gross Costs — this run’s headline used 1.5 bps slip (fees 0) Related · Teardown
NY 15-minute ORB — same authors’ family, different object (time-window breakout vs RelVol Stocks-in-Play) Related · Teardown
Session VWAP Bias — imbalance line, not opening-range RelVol Learn · Module 5
The validation gauntlet — overfitting, OOS, DSR, and costs