Killed at G5 · Discovery

Intraday momentum into the close

The effect from the papers is there before costs: about 1.4 basis points a day. The spread is 0.6.

Markets
Nasdaq-100, S&P 500
Timeframe
Last 30 minutes of the US session
Period
2005-01 to 2026-08
Tested
10 October 2026
Before costs, US100 2005-2026
+0.018R / trade
t 1.84 on 5,547 trades
After costs
−0.008R / trade
t −0.78
Since publication, 2019-2026
−0.007R / trade
t −0.44

Why it failed: Positive before costs, negative after them, on two data sources. See the scorecard

Cumulative result

R per trade (net of cost). One trade per day: 15:30 to 16:00 ET in the direction of the move since yesterday's close.

−50R−25R0R+25R+50R2008201120142017202020232026−43.0R
Show the data as a table
YearTradesSum RMean R
2005255−2.9−0.011
2006252−12.3−0.049
2007257+42.7+0.166
2008259+22.5+0.087
2009258−19.0−0.074
2010259−1.7−0.007
2011258+8.7+0.034
2012257−7.1−0.027
2013251−13.7−0.055
2014256−5.4−0.021
2015259−18.4−0.071
2016256−10.3−0.040
2017256−18.8−0.073
2018258+7.2+0.028
2019258−5.5−0.021
2020257+21.2+0.083
2021257+4.6+0.018
2022258+21.5+0.084
2023257−13.5−0.053
2024258−15.0−0.058
2025252−25.2−0.100
2026159−2.8−0.017

The claim

The direction of the market from yesterday's close into the afternoon predicts the last half hour, because option dealers and leveraged ETFs hedge into the close.

Source: Gao, Han, Li and Zhou (2018), Market intraday momentum, Journal of Financial Economics; Baltussen, Da, Lammers and Martens (2021), Hedging demand and market intraday momentum, Journal of Financial Economics

What we tested

  • Signal: the sign of the move from yesterday's close to 15:30 New York time.
  • Entry at 15:30 in that direction, exit at 16:00.
  • Stop 1.5 x ATR; one trade a day, every day.
  • Paper-spec check (separately): the same signal held 15:30-16:00, and the published 10:00 variant, measured in basis points at the real spread.

Costs and fills

  • US100 CFD: the real spread from the file (median 0.0198R a trade, about 0.57 bp). Futures: exchange cost of 0.725 index points per round trip, scaled to price.

Data

  • US100 CFD minute bid/ask, true clock 2005-2026
  • LSE NQ futures 2016-2026
  • NSX / SPX minute data 2010-2025 (paper-spec check)

The effect is real, and tiny

Without a stop, trading in the direction of the day earns +1.41 basis points a day over 21 years (t 2.87). The papers are right that the pattern exists.

A retail CFD spread costs about 0.57 basis points per round trip, and the stop and recent years take the rest. Net of cost the rule makes −0.008R a trade (t −0.78); at twice the cost, t −3.38. 2023, 2024 and 2025 are all negative.

Two data sources, one answer

Nasdaq futures from a second vendor, 2016 to 2026, at futures cost: −0.006R (t −0.42). The daily results of the CFD and the futures agree with a correlation of 0.975.

We also tested the papers' exact specifications in basis points at the real FTMO spread, 2010 to 2025. The Baltussen version (close to 15:30, hold the last 30 minutes) nets 0.00 bp on Nasdaq and +0.02 bp on the S&P. The Gao version (signal at 10:00) is negative on both.

A variant that looked better

One of our research agents tested a different window: the move from 10:00 to 15:00 predicting 15:00 to 16:00. On Nasdaq it nets +1.17 bp (t 1.78). At a stop of one standard deviation that is +0.030R a trade, below our +0.05R floor for adverse fills, and all of it came after 2018 (2010-2017 t −0.73). A period chosen after looking at the data is not a holdout.

The 12-gate scorecard

1 passed · 6 failed · 5 not run or not reached. A gate is "not reached" when the strategy had already failed a veto: there is nothing left for it to test.

Is the backtest real?

Absolute veto. These gates look for bugs and physical limits, not for statistical evidence, so one failure ends the test.

  • True clock; bar phase −3 to +3 minutes all flat or negative after cost; signal lagged 1 and 2 days checked.

  • Best variant (10:00-15:00 signal) is +0.030R a trade at a one-standard-deviation stop, below the +0.05R floor.

  • G7Engine parityNot reached

Is the edge more than luck?

G12, one pre-registered holdout, is the only statistical veto. G1 to G5 and the regime test G6 are always reported; G6 vetoes only a regime that is significantly negative. A strategy with no edge after costs never reaches G12, because there is nothing to confirm.

Can it survive a prop-firm account?

Absolute veto, for strategies meant for funded accounts. The account rules are simulated event by event, not at the end of the day.

Lesson

A published effect is not a tradeable edge

Academic results are measured before costs, on futures or ETFs, often on close prices. A 1.4 bp effect against a 0.6 bp spread leaves a Sharpe ratio too small to survive a stop, a few bad years or a retail account.

Receipts

Every number on this page comes from one of these files: the test script, its saved output, the trade list and, where the test was pre-registered, the registration and its hash lock. Download them and check our work. Numbers that also appear in the chart are recomputed from the trade list when this page is built, and the build fails if they disagree.

FileKindSizeStatussha256
IDMOM02_PREREG.md
pillar2_hunt/IDMOM02_PREREG.md
Pre-registration4 KB4 lines withheld (private strategy)add5fe58f493
_idmom02.py
pillar2_hunt/_idmom02.py
Script13 KB3 lines withheld (private strategy)11a56a5d0d94
_idmom02.out
pillar2_hunt/_idmom02.out
Saved output4 KB1 line withheld (private strategy); 7 lines withheld (data licence)ef0bd88b412d
_baltussen_recheck_20261018.py
experiments/_baltussen_recheck_20261018.py
Script5 KB1 line withheld (private strategy)11dc9e8ab509
_baltussen_recheck_20261018.out
experiments/_baltussen_recheck_20261018.out
Saved output2 KBCompleteb984e4949d13
ANTIGRAVITY_ZENOM_RUUJ_AUDIT_2026-10-18.md
reports/2026-10/ANTIGRAVITY_ZENOM_RUUJ_AUDIT_2026-10-18.md
ReportWithheld: sections 2-3 are about the owner's prop-firm plan and live bot; the test's own output is published
_idmom02_trades_cfd.csv
pillar2_hunt/_idmom02_trades_cfd.csv
Trade list864 KBPrices removed (data licence)afad587ca03c
_bar_boundary_audit_20261009.py
_bar_boundary_audit_20261009.py
Lab moduleWithheld: loads the code of the lab's private live strategy

Price data is not included: the vendors' licences do not allow it, so the scripts run only with your own copy of the data, and the trade lists show dates, direction, R and costs, not prices. Lines that refer to the lab's private live strategy are replaced by a marker; the receipts page explains the rules and lists the sha256 of every original file.

Related tests