Markets › Futures · NQ futures (1-minute bars, US session)
Intraday Momentum Backtest: First Half-Hour to Last Half-Hour on NQ Futures
Does the first half-hour of the US session predict the last one? We tested the rule on E-mini Nasdaq-100 futures (NQ), 2020 to 2026, with costs and a matched control.
Buried · No proven edgeThe first half-hour said nothing about the last.
Variants tried: 4 · Passed every gate: 0 · Holdout opened: yes (already used)
Short answer: not on NQ futures from 2020 to 2026. We tested whether the first half-hour of the US session predicts the last half-hour, measured from the previous close and from the 09:30 open, long and short and long only. None of the four variants passed; each lost money before costs, and the signal did worse than the same signals moved to other days.How much costs took here, compared across all 54 of our tests →Did the same rules work on other markets? The cross-market scoreboard →
00The verdict in three lines
- "Intraday momentum" is a published result (Gao, Han, Li and Zhou, 2018): on the S&P 500, the return of the first half-hour of the US session, from the previous close to 10:00 New York, predicted the return of the last half-hour. We turned it into a rule (long or short for the last half-hour in the direction of the first) and tested it on NQ futures from 2020 to 2026, measuring the first half-hour from the previous close and from the 09:30 open, long and short and long only, with the rules, costs, gates and a control fixed in a dated specification.
- None passed, and each variant lost money before costs (from -$14.31 to -$1.66 a trade), then more after $15.76 of costs a trade.
- The signal did not beat the same signals moved to other days (percentiles 28.8 to 43.4). On these years the first half-hour said nothing useful about the last. The same test on ES: read the ES post.
01What we tested
Signal at 10:00 New York: the price at 10:00 against a reference, either the close of the previous US session (OV, as in the paper, so the night is included) or the 09:30 open (RTH, the session only). Up: long; down: short (no trade in the long-only versions); unchanged: no trade. Trade: in at the open of the minute starting 15:30, out at the close of the minute ending 16:00; on early-close days the same half-hour before the exchange's earlier close. One contract, one trade a day at most. Days missing a needed minute have no trade.
Four variants: IM-NQ-OV-LS, IM-NQ-OV-L, IM-NQ-RTH-LS, IM-NQ-RTH-L. With the same four on ES, eight variants of the idea were tried, so the protocol requires a development t-statistic of 2.5.
02Data and costs
E-mini Nasdaq-100 futures (NQ), NinjaTrader's back-adjusted 1-minute history, January 2020 to 25 September 2026 (back-adjustment shifts prices by constants at rolls, which changes no move inside a day). Periods: development 2020 to 2023, validation January 2024 to March 2025, holdout April 2025 to September 2026. These periods are not new: the same file and years were used by our earlier NQ tests, so the holdout is reported as already used. Costs: $15.76 a trade ($5.76 commission plus one tick of slippage on each fill), $20 a point. Engine check: ih_selftest.js checked hand-built days (both signals, long, short, an unchanged price, an early close, a missing minute), the exchange calendar against the data, and all eight variants trade by trade against an independent re-implementation (ih_selftest_result.txt).
03Results
Dollars per contract. The 95% range is the Wilson interval for the win rate. The drawdown is on closed trades; a position lasts 30 minutes.
| Variant | First half-hour measured | Trades | Net after costs | Net per trade | Gross per trade | Winners (95% range) | Profit factor | Drawdown on closed trades | Verdict |
|---|---|---|---|---|---|---|---|---|---|
| IM-NQ-OV-LS | from the previous close, long and short | 1,726 | -$34,827 | -$20.18 | -$4.42 | 49.0% (47% to 51%) | 0.94 | -$108,219 | Buried |
| IM-NQ-OV-L | from the previous close, long only | 960 | -$16,725 | -$17.42 | -$1.66 | 48.9% (46% to 52%) | 0.95 | -$64,925 | Buried |
| IM-NQ-RTH-LS | from the 09:30 open, long and short | 1,726 | -$51,897 | -$30.07 | -$14.31 | 47.1% (45% to 49%) | 0.92 | -$76,160 | Buried |
| IM-NQ-RTH-L | from the 09:30 open, long only | 928 | -$23,075 | -$24.87 | -$9.11 | 47.1% (44% to 50%) | 0.93 | -$46,391 | Buried |
Cumulative net dollars per contract by month. * Holdout already used before this test.
By period
| Variant | Development 2020 to 2023 (trades) | Validation 2024 to Mar 2025 (trades) | Holdout* Apr 2025 to Sep 2026 (trades) | Development t | Validation PF |
|---|---|---|---|---|---|
| IM-NQ-OV-LS | -$44,864 (1,025) | -$4,342 (319) | +$14,380 (382) | -1.44 | 0.96 |
| IM-NQ-OV-L | -$29,990 (579) | -$4,361 (173) | +$17,627 (208) | -1.38 | 0.92 |
| IM-NQ-RTH-LS | -$25,639 (1,025) | -$3,897 (319) | -$22,360 (382) | -0.82 | 0.97 |
| IM-NQ-RTH-L | -$19,004 (564) | -$3,297 (154) | -$775 (210) | -0.87 | 0.94 |
The two versions measured from the previous close made money in the holdout (+$14,380 and +$17,627), after losing in development and validation. One period in the black, after two in the red, is what noise looks like.
04The last half-hour on its own
Over the 1,733 days that could trade, the last half-hour of NQ went up on 50.1% of them, with an average move of 0.21 points. Buying it every day would have ended at -$20,052 after costs. There was no steady drift for a signal to ride.
| Variant | Longs: trades / gross / net | Shorts: trades / gross / net |
|---|---|---|
| IM-NQ-OV-LS | 960 / -$1,595 / -$16,725 | 766 / -$6,030 / -$18,102 |
| IM-NQ-OV-L | 960 / -$1,595 / -$16,725 | – |
| IM-NQ-RTH-LS | 928 / -$8,450 / -$23,075 | 798 / -$16,245 / -$28,821 |
| IM-NQ-RTH-L | 928 / -$8,450 / -$23,075 | – |
05Is it the signal or the market?
The benchmark is a shifted-signal control: the series of daily signals (long, short or none) is moved by a random offset of at least 5% of the days, so the same mix of longs and shorts lands on other days, and applied to the real last half-hours with the same costs. 500 runs with fixed seeds; the bar is the 95th percentile of the average net result per trade.
| Variant | Trades | Real average per trade | Control median | Control 5th to 95th | Percentile (95 needed) |
|---|---|---|---|---|---|
| IM-NQ-OV-LS | 1,726 | -$20.18 | -$15.10 | -$59.25 to +$25.58 | 43.4 |
| IM-NQ-OV-L | 960 | -$17.42 | -$10.95 | -$51.47 to +$26.26 | 39.4 |
| IM-NQ-RTH-LS | 1,726 | -$30.07 | -$15.61 | -$57.14 to +$26.11 | 28.8 |
| IM-NQ-RTH-L | 928 | -$24.87 | -$11.91 | -$49.32 to +$26.15 | 28.8 |
Every variant sits in the lower half of the control: placed on its own days, the signal did slightly worse than on random days.
06The gates
| Variant | Trades | 1. PF ≥ 1.2 in validation | 2. ≥ 50 trades in each period | 3. t ≥ 2.5 on development | 4. Above the 95th percentile of the shifted-signal control | 5. Positive without the 10 best trades | 6. Holdout net positive (already used) |
|---|---|---|---|---|---|---|---|
| IM-NQ-OV-LS | 1,726 | fail | pass | fail | fail | fail | pass |
| IM-NQ-OV-L | 960 | fail | pass | fail | fail | fail | pass |
| IM-NQ-RTH-LS | 1,726 | fail | pass | fail | fail | fail | fail |
| IM-NQ-RTH-L | 928 | fail | pass | fail | fail | fail | fail |
07Verdict by variant
| Variant | Cause | Gates failed | Verdict |
|---|---|---|---|
| IM-NQ-OV-LS | No proven edge | 1, 3, 4, 5 | Buried |
| IM-NQ-OV-L | No proven edge | 1, 3, 4, 5 | Buried |
| IM-NQ-RTH-LS | No proven edge | 1, 3, 4, 5, 6 | Buried |
| IM-NQ-RTH-L | No proven edge | 1, 3, 4, 5, 6 | Buried |
No proven edge: negative before costs and below the control. Not tested: other years, volatility or news filters, other entry times, other sessions.
TWhat this shows, and what to take into your own tests
What the results show
- None of the four variants passed, and each lost money before costs as well as after: the first half-hour did not predict the last half-hour on NQ from 2020 to 2026.
- The rule did worse than the same signals moved to other days (percentiles 28.8 to 43.4; 95 needed).
- The last half-hour itself was a coin toss: up on 50.1% of 1,733 days, with an average move of 0.21 points.
- The two versions measured from the previous close made money in the holdout, after losing in development and validation; one good period is not support.
What remains unknown
- Earlier years: the published result used S&P 500 ETF data from 1993 to 2013, which we do not have.
- Filters the paper and later work discuss, such as trading only on volatile days or around news.
- Other entry times, such as the half-hour before the last one.
Why it failed
A signal has to say something about what comes next before costs can matter. Here the sign of the first half-hour carried no information about the last half-hour: the gross result per trade was negative in all four variants, and the same signals placed on other days did slightly better.
What you can apply to your own tests
- Look at the result before costs first. If it is not positive, no cost assumption will rescue the idea.
- Test a published effect on the years after the paper. Effects found in one period often fade once they are known.
- Compare with the same signals moved to other days: it shows whether the signal or the market made the result.
A note on the numbers: drawdown figures are measured on closed trades unless a table says it includes open losses. Open losses inside a trade are not counted in a closed-trade drawdown, so real account risk is higher, especially for systems with no stop. Backtests are not live trading.
FAQCommon questions
Does the first half-hour predict the last half-hour on NQ?
Not in our test. Trading the last half-hour in the direction of the first made -$34,827 (measured from the previous close) and -$51,897 (from the 09:30 open) per contract over 2020 to 2026, long and short, after costs, and both were negative before costs too.
What is intraday momentum?
A result published by Gao, Han, Li and Zhou (2018): on the S&P 500 ETF from 1993 to 2013, the return from the previous close to 10:00 New York predicted the return of the last half-hour of the session. We tested it as a trading rule on recent futures data.
How was intraday momentum tested?
On NQ futures 1-minute data from 2020 to 2026, entering at 15:30 and exiting at the close, with rules written and dated before the data was run, costs included on every trade, results split into development, validation and holdout periods, a random-entry control as the benchmark, and every variant reported. Read the protocol.
08Check our arithmetic
ih_spec.md
ih_lib.js · ih_ref.js · ih_selftest.js · ih_run.js
control_audit_lib.js · em_lib.js · gh_lib.js · hourly_lib.js · ma_lib.js · rb_lib.js · rsi2_protocol.js
ih_selftest_result.txt · ih_NQ_results.txt · ih_NQ_summary.json
IM-NQ-OV-LS · IM-NQ-OV-L · IM-NQ-RTH-LS · IM-NQ-RTH-L
Code provenance: our own code, written from the rule described in the published paper. No third-party source code is used or published.
09Data notes
The NQ file has known holes (data_holes.json). Days missing a minute the rule needs have no trade; removing the trades whose signal window or trade touches a known hole changes no verdict:
| Variant | Trades | Removed | Net per trade | Verdict |
|---|---|---|---|---|
| IM-NQ-OV-LS | 1,726 | 17 | -$20.18 → -$25.37 | Buried → Buried |
| IM-NQ-OV-L | 960 | 7 | -$17.42 → -$20.94 | Buried → Buried |
| IM-NQ-RTH-LS | 1,726 | 1 | -$30.07 → -$30.53 | Buried → Buried |
| IM-NQ-RTH-L | 928 | 1 | -$24.87 → -$25.72 | Buried → Buried |
10Corrections
None yet. 22 Oct 2026, navigation: added a link to the new guide comparing trading costs across all our tests. No result changed. 22 Oct 2026, navigation: added a link to the new cross-market scoreboard, which includes this test. No result changed. 22 Oct 2026, navigation: added a link to the new guide comparing trend following and mean reversion across all our tests. No result changed.
+More tests and guides
- Intraday momentum strategy es
- Ema ribbon strategy backtest
- Ema 9 21 crossover backtest
- Macd crossover strategy backtest
- Trend following vs mean reversion: this test next to the others of its style
- Free prop firm challenge calculator
- What all the backtests found so far
- The backtesting protocol
- How to backtest a trading strategy without fooling yourself
- Backtesting glossary