Research / Trading experiment
26/06/2026

Overnight Drift In SPY

A long line of research (Cooper, Cliff & Cooper; Lou, Polk & Skouras) finds equity index gains accrue disproportionately overnight, possibly from…

Method

Rule / pseudocode

DATA adjusted observations for the stated instrument and horizon
RULE On SPY, holding only overnight (buy at close, sell at next open) earns a positive risk-adjusted return that survives transaction costs, while the complementary intraday segment does not.
METHOD Instrument: SPY
FIT estimate or select parameters on each training window only
TEST apply the frozen rule to the next unseen window after stated costs
REPORT return, Sharpe, drawdown, trade count, significance and fold stability
VERDICT prefer robustness and sufficient observations over the headline return

_A long line of research (Cooper, Cliff & Cooper; Lou, Polk & Skouras) finds equity index gains accrue disproportionately overnight, possibly from overnight risk premium / order imbalance at the open._

Out-of-sample equity curve

Growth of $1 over the held-out test data the strategy never saw while it was being built, after 10 bps round-trip costs.

Out-of-sample performance

OOS Sharpe
-1.16
Ann. return
-16%
Max drawdown
-67%
Win rate
48%
p-value
1
not significant
WF folds +
0/5
Measured on held-out data. A high Sharpe with a non-significant p-value means the result could still be luck — read them together.

Hypothesis

On SPY, holding only overnight (buy at close, sell at next open) earns a positive risk-adjusted return that survives transaction costs, while the complementary intraday segment does not.

Method

Instrument: SPY

Results

Out-of-sample Sharpe was -1.16, versus -1.56 in-sample. A bootstrap test returned p = 1.000 (not significant). Walk-forward Sharpe stayed positive in 0 of 5 folds. Worst out-of-sample drawdown was -67.15%.

Analysis

SPY daily data (5,384 trading days, 2005-01-04 to 2026-05-29) was downloaded via yfinance with auto_adjust=False; raw Open and Close prices were adjusted for splits and dividends by applying each day's Adj Close / Close ratio uniformly to the Open. Overnight return is adj_open[t] / adj_close[t-1] − 1: one non-overlapping observation per trading session, continuously invested. The 70/30 chronological split gives an in-sample period from 2005-01-04 to 2019-12-20 (3,768 days) and an out-of-sample period from 2019-12-23 to 2026-05-29 (1,616 days). Round-trip costs of ten basis points are applied per night via apply_costs(), which at 252 trading nights per year implies roughly 25% per annum in friction alone.

The pre-cost overnight premium replicates cleanly across both halves. In-sample: pre-cost Sharpe 0.75, annualised return +7.8%. Out-of-sample: pre-cost Sharpe 0.64, annualised return +8.6%. There is no IS/OOS degradation in the raw signal — if anything the OOS annual return is marginally higher — consistent with the well-documented overnight-drift anomaly persisting through to 2026. The cost layer inverts the picture entirely: IS net Sharpe −1.56 (annualised −16.2%), OOS net Sharpe −1.16 (annualised −15.6%). The OOS equity curve falls from .00 at inception to approximately /bin/zsh.34 by May 2026, a capital loss of 66% over six-and-a-half years.

Five-fold walk-forward validation over the full dataset yields fold net Sharpes of −1.49, −1.64, −3.44, −0.59, and −1.51. Zero of five folds are positive (OOS consistency 0%). The spread across folds is explained by volatility regimes — fold 3 likely spans the 2020 COVID episode where intraday dislocations amplified losses — but no fold approaches breakeven net of costs. The combined walk-forward net Sharpe of −1.35 is nearly identical to the main OOS figure, confirming the result is not an artefact of the particular split date.

The corrected block-bootstrap p-value (1,000 simulations, block size 5, demeaned null — H0: zero edge) on the 1,616 OOS net returns is p = 1.00. The observed net Sharpe of −1.20 lies entirely to the left of the null distribution's 5th–95th percentile range (−0.55 to +0.72): virtually every simulated zero-edge series outperforms this strategy on Sharpe. This is the expected outcome when costs have reversed the sign of the returns. The prior run's p ≈ 0.49 was produced by a buggy bootstrap that resampled the raw positive-mean series without demeaning, causing the null distribution to be centred on the observed Sharpe rather than zero — a mechanically broken test that always returned p ≈ 0.5 regardless of whether any real edge was present.

REJECTED. The overnight-drift anomaly is empirically robust across the full 2005–2026 sample — a pre-cost OOS Sharpe of 0.64 and +8.6%/yr places this squarely in the established literature. The problem is structural: entering at the close and exiting at the following open constitutes one full round trip every trading night, and at ten basis points that amounts to roughly 25% per annum in friction, more than three times the gross premium. The strategy is unviable in this form. A credible path to harvesting the overnight premium would require eliminating the daily round trip — for example by holding a continuous long position in which the overnight period is cost-free passage of time, with the intraday bearish complement expressed separately via a funded overlay or a short-duration instrument.

Provenance

Synthesized from 1tngv2a, 1u8xcnt. Combines the 'is OHLC alone enough' question with the well-documented overnight (close-to-open) drift anomaly: a strategy that uses only open/close prices and is genuinely testable on free data.

Evidence

Walk-forward Sharpe by fold

Each fold retrains on past data then tests on the next unseen window. Staying positive across folds is the real test of an edge.

---

_Generated by labs-algo-trading. Automated research — not financial advice. Backtests overfit; treat verdicts as hypotheses._