Alpha Not Foundopen trading research archive

Archive / Equities & volatility / E920

AI-generated research, checked but not peer-reviewed. It may contain errors.
E920  KILL  No signalTested · October 2026

The day's move does not carry into the last half hour

Trading SPY and QQQ with the day's move from 15:30 to the close earned -1.91 basis points (bp) gross, -3.91bp after a 2bp cost, over 722 days: no momentum; slightly negative.

index-etf intraday-momentum closing-auction spy qqq last-half-hour

Academic studies report that when the US stock market has risen since yesterday's close, it tends to keep rising in the last half hour of trading, and the reverse when it has fallen. The usual explanation is that option dealers and leveraged-fund issuers must trade with the day's move before the close. We tested this on the two largest index ETFs, SPY and QQQ, on 722 days. Trading in the direction of the move from 15:30 to the close earned -1.91 basis points (bp, hundredths of a percent) gross, so the rule lost money before any cost.

Gross mean per trade-1.91bp95% interval -3.53 to -0.28; the rule needed +6bp
Net of 2bp cost-3.91bpround-trip cost assumed for the ETFs
Days tested722SPY and QQQ pooled by day, Dec 2023 to Oct 2026
Single stocks-0.37bp518 tickers, 364,093 trades, gross; 6bp cost
01 · The idea being tested

If the US market is up (down) since yesterday's close at 15:30, it tends to rise (fall) further into the 16:00 close.

Why people believe it

People argue that option dealers who are short gamma (their hedging makes them trade with the market's move), and the issuers of leveraged and inverse ETFs, must buy after a rise and sell after a fall to rebalance before the close, and that the size of their trade is set by the day's move, which is known at 15:30. Other traders are paid for taking the other side of that flow.

Why it would persist The argument, as stated before testing

The payment is described as compensation for holding inventory into the close, and the window is only 30 minutes of a very liquid ETF, so there is little room for a large trade to close the gap.

02 · How it was tested

Each day we took the return of SPY and QQQ from the previous close to the 15:30 price. If it was positive we bought at the start of the 15:30 hour bar and sold at its end, which stands in for the closing auction (the single trade that sets the official 16:00 closing price); if negative we sold short and bought back. We averaged the two ETFs for each day, subtracted a 2bp round-trip cost and compared the result with a +6bp bar fixed in advance. Four controls checked whether any effect was specific to this signal, this half hour and this size of move.

Pass required

Gross mean at least +6bp (3 times the cost), day-clustered t at least 2.5, median above 0, both sample halves above 0, placebo smaller than half the primary, and the earlier-hour control below the primary.

Killed if

Gross mean at or below 2bp, the round-trip cost.

Costs

2bp round trip for the ETFs (commission, about 0.3bp half-spread at entry, closing-auction exit) and 6bp for single stocks. The auction price, order fills and imbalances were not measured.

Controls

Placebo: the previous day's signal sign applied to today's 15:30 bar, plus a 2,000-draw shuffle of signal signs across days. Hour specificity: the signal up to 14:30 applied to the 14:30-15:30 bar. Size: terciles of the absolute signal. Single stocks as a separate universe.

03 · What happened
Why it was rejected

The pre-set kill line was a gross mean at or below the 2bp cost; the gross mean was -1.91bp, so there was no momentum at all.

  • Over 722 days, trading with the sign of the day's move earned -1.91bp gross per day (95% interval -3.53 to -0.28; day-clustered, meaning each day counts as one unit, t -2.30), or -3.91bp after the 2bp cost. A positive sign means the ETF moved with the signal.
  • SPY earned -1.85bp gross (t -2.30) and QQQ -1.92bp (t -1.93). The median day was -0.11bp, the worst single day -141.8bp, and 49.3% of days were positive.
  • Both sample halves were negative: -2.76bp (t -1.99, 361 days) and -1.05bp (t -1.15). Of seven half-years, six were negative; the only positive one, +3.17bp, has 19 days and an interval from -2.90 to +9.24.
  • Shuffling the signal signs across days gave a spread of 0.82bp around zero; the observed -1.86bp (on the 720 days with both ETFs present, hence not -1.91) lay outside it (two-sided p 0.026).
  • Larger moves did not carry further: gross -0.98bp in the smallest third of absolute signals, -3.66bp (t -2.63) in the middle third and -3.04bp (t -1.85) in the largest. Up-signal days earned -1.17bp and down-signal days -2.09bp.
  • The previous day's sign gave +1.60bp (t +1.93) on today's bar, and the same signal up to 14:30 applied to the 14:30-15:30 bar gave +1.29bp (t +1.46); both are gross, both are below the 2bp cost, both intervals include zero, and they are checks rather than tested rules.
  • Across 518 single stocks and 364,093 trades, gross was -0.37bp (t -0.88), or -6.37bp after a 6bp cost; the largest third of moves in each day's cross-section gave -1.17bp (t -1.79).

The signal pays below zero, not above the bar

-2.502.55pass: +6SPY + QQQ pooled-1.91 [-3.53, -0.28]SPY-1.85 [-3.42, -0.27]QQQ-1.92 [-3.87, +0.03]Control: previous day's sign+1.6 [-0.02, +3.22]Control: earlier hour+1.29 [-0.44, +3.02]

Mean gross result per day with day-clustered 95% intervals. The pass bar was +6bp; the primary interval sits entirely below zero. The two controls are positive but both intervals include zero and neither is a result of the tested rule.

Chart data (bp per trade, gross)
Mean95% low95% high
SPY + QQQ pooled-1.91-3.53-0.28
SPY-1.85-3.42-0.27
QQQ-1.92-3.870.03
Control: previous day's sign1.6-0.023.22
Control: earlier hour1.29-0.443.02

Six of seven half-years are negative

-10-505102023 H2 (19 days)+3.17 [-2.9, +9.24]2024 H1 (124)-3.78 [-7.92, +0.37]2024 H2 (125)-0.96 [-5.2, +3.28]2025 H1 (122)-4.45 [-9.92, +1.01]2025 H2 (125)-0.93 [-3.71, +1.84]2026 H1 (123)-0.83 [-4.13, +2.47]2026 H2 (84)-1.02 [-4.7, +2.66]

Gross mean by half-year with day-clustered 95% intervals. Only the first period is positive, with 19 days and an interval from -2.90 to +9.24. 2026H2 covers July to October.

Chart data (bp per trade, gross)
Mean95% low95% high
2023 H2 (19 days)3.17-2.99.24
2024 H1 (124)-3.78-7.920.37
2024 H2 (125)-0.96-5.23.28
2025 H1 (122)-4.45-9.921.01
2025 H2 (125)-0.93-3.711.84
2026 H1 (123)-0.83-4.132.47
2026 H2 (84)-1.02-4.72.66

Bigger moves did not carry further

-3-2-10Smallest third-0.98Middle third-3.66Largest third-3.04

Gross mean by size of the day's move at 15:30 (thirds of the absolute signal, thresholds from the full sample for each ETF). Momentum would show a rise from left to right; the middle third is the most negative.

Chart data (bp per trade, gross)
Gross mean
Smallest third-0.98
Middle third-3.66
Largest third-3.04
04 · What it means

Why it failed Interpretation · not established

The published effect comes mostly from earlier decades, and the slope of the 15:30 bar's return on the day's move was -0.0095 for SPY and -0.0052 for QQQ here, against about +0.06 to +0.10 in the literature. A fade in this sample does not mean the flow story is wrong: the data are hourly bars rather than closing-auction prices, and the 15:30 bar is noisier than assumed (standard deviation 21.7bp and 26.8bp against an assumed 8 to 12bp, with a worst single-day result of -141.8bp), so a fade here is an observation we cannot explain.

Lesson

A published effect can be absent before any cost is charged, so the cost model never decides the verdict. A negative result in one 35-month test is also not an effect to rely on: the permutation check shows it differs from luck for this one rule, not that a reversal exists.

Scope of this result

Covers SPY and QQQ from December 2023 to October 2026 with hourly bars as a proxy for the closing auction and a 2bp round-trip cost, plus 518 single stocks at 6bp. It does not cover the period of the original studies, official closing-auction prices or order fills.

A rejected experiment applies to the tested conditions and does not prove an idea can never work. bp = basis point, 0.01%.

1. Test design

Pre-registered
Yes: rule and criteria fixed before the test data was examined
Data
Hourly open and close prices for SPY, QQQ and 518 US single stocks (the stocks are a secondary test) — a public consolidated price history service, one bar per hour starting at :30 in the cash session; hourly bars; 2023-12..2026-10 (730 cash-session dates, 722 usable); public download, no login
Universe
SPY and QQQ (primary, pooled by day). Other US index ETFs were not available in the data. Secondary: all 518 single-stock tickers in the hourly set, with a filter dropping events with a signal beyond 20% or a bar beyond 10% (to remove splits).
Signal
r = close of the 14:30-15:30 bar divided by the previous session's last cash bar close, minus 1. Direction = sign of r (r = 0 dropped). Half-days without a 15:30 bar and gaps of more than 5 calendar days are dropped.
Execution
Enter at the open of the 15:30 bar in the direction of r, exit at the close of that bar (a proxy for the closing auction price). Return is a simple return on notional; the two ETFs get equal weight each day.
Costs
2bp round trip for the ETFs (commission, about 0.3bp half-spread at entry, closing-auction exit) and 6bp for single stocks. The auction price, order fills and imbalances were not measured.
Controls
Placebo: the previous day's signal sign applied to today's 15:30 bar, plus a 2,000-draw shuffle of signal signs across days. Hour specificity: the signal up to 14:30 applied to the 14:30-15:30 bar. Size: terciles of the absolute signal. Single stocks as a separate universe.
Sample split
No tuning and no validation split: one pre-set test on the full sample. Reported by half-year and by two halves of the sample split by day count.
Pass criterion
Gross mean at least +6bp (3 times the cost), day-clustered t at least 2.5, median above 0, both sample halves above 0, placebo smaller than half the primary, and the earlier-hour control below the primary.
Kill criterion
Gross mean at or below 2bp, the round-trip cost.
Power
Pooled sd of the 15:30 bar was assumed at about 10bp, giving a minimum detectable mean near 1bp. The observed sd was 21.7bp (SPY) and 26.8bp (QQQ), so the actual minimum detectable mean was about 2.2bp gross (80% power, one-sided 5%), below the 6bp bar.

2. Result

Observations
722
Instruments
2
Net mean
-3.91
95% interval
-5.53 to -2.28
Median
—
Worst
—
Finding 1
Over 722 days, trading with the sign of the day's move earned -1.91bp gross per day (95% interval -3.53 to -0.28; day-clustered, meaning each day counts as one unit, t -2.30), or -3.91bp after the 2bp cost. A positive sign means the ETF moved with the signal.
Finding 2
SPY earned -1.85bp gross (t -2.30) and QQQ -1.92bp (t -1.93). The median day was -0.11bp, the worst single day -141.8bp, and 49.3% of days were positive.
Finding 3
Both sample halves were negative: -2.76bp (t -1.99, 361 days) and -1.05bp (t -1.15). Of seven half-years, six were negative; the only positive one, +3.17bp, has 19 days and an interval from -2.90 to +9.24.
Finding 4
Shuffling the signal signs across days gave a spread of 0.82bp around zero; the observed -1.86bp (on the 720 days with both ETFs present, hence not -1.91) lay outside it (two-sided p 0.026).
Finding 5
Larger moves did not carry further: gross -0.98bp in the smallest third of absolute signals, -3.66bp (t -2.63) in the middle third and -3.04bp (t -1.85) in the largest. Up-signal days earned -1.17bp and down-signal days -2.09bp.
Finding 6
The previous day's sign gave +1.60bp (t +1.93) on today's bar, and the same signal up to 14:30 applied to the 14:30-15:30 bar gave +1.29bp (t +1.46); both are gross, both are below the 2bp cost, both intervals include zero, and they are checks rather than tested rules.
Finding 7
Across 518 single stocks and 364,093 trades, gross was -0.37bp (t -0.88), or -6.37bp after a 6bp cost; the largest third of moves in each day's cross-section gave -1.17bp (t -1.79).

3. Interpretation

Why it failed
The published effect comes mostly from earlier decades, and the slope of the 15:30 bar's return on the day's move was -0.0095 for SPY and -0.0052 for QQQ here, against about +0.06 to +0.10 in the literature. A fade in this sample does not mean the flow story is wrong: the data are hourly bars rather than closing-auction prices, and the 15:30 bar is noisier than assumed (standard deviation 21.7bp and 26.8bp against an assumed 8 to 12bp, with a worst single-day result of -141.8bp), so a fade here is an observation we cannot explain.
Lesson
A published effect can be absent before any cost is charged, so the cost model never decides the verdict. A negative result in one 35-month test is also not an effect to rely on: the permutation check shows it differs from luck for this one rule, not that a reversal exists.
Scope
Covers SPY and QQQ from December 2023 to October 2026 with hourly bars as a proxy for the closing auction and a 2bp round-trip cost, plus 518 single stocks at 6bp. It does not cover the period of the original studies, official closing-auction prices or order fills.

4. Reproducibility

Steps
1) Download hourly bars for SPY and QQQ (bars start at :30 in the cash session, America/New_York) for December 2023 to October 2026. 2) For each day, take the previous session's last cash bar close as P0 and compute r = close of the 14:30 bar / P0 - 1. 3) Direction s = sign(r); gross return = s x (close of the 15:30 bar / open of the 15:30 bar - 1). 4) Average the two ETFs per day, subtract 2bp, compute the day-clustered t and 95% interval. 5) Run the previous-day-sign placebo, a 2,000-draw shuffle of signs (seed fixed), the 14:30-15:30 control and absolute-signal terciles. 6) Repeat on single stocks with the split filter and a 6bp cost (the largest-third cut only on days with at least 30 stocks).
Grade
INCOMPLETE (missing: official closing-auction prices)
Feedback
Feedbacksite

Feedback on the archive

Type
Type

Text only. No name or e-mail is asked; please do not include personal data. Nothing identifying you is stored.

0/2000

Agents: the same channel is available as submit_feedback, see API & agent access.