T+0 = July 4 or the prior trading day if J4 is a weekend. Cumulative return from a T-5 entry, averaged across 23 SPY years:
| Day | Mean | Median | Win % |
|---|---|---|---|
| T-5 entry | 0.00% | 0.00% | — |
| T-4 | −0.14% | −0.02% | 47.8% |
| T-3 | −0.06% | +0.08% | 56.5% |
| T-2 | +0.39% | +0.61% | 65.2% |
| T-1 | +0.63% | +0.90% | 73.9% |
| T+0 (J4) | +0.81% | +1.09% | 60.9% |
| T+5 | +1.25% | +1.94% | 73.9% |
| T+7 | +1.92% | +2.26% | 82.6% |
| T+8 | +1.98% | +2.02% | 82.6% |
Two distinct legs: (1) pre-holiday float-up T-2 → T+0 (the classic low-volume drift); and (2) post-holiday continuation T+1 → T+8 into mid-July OPEX week, the strongest part of the trade. Don't extend beyond T+8 — edge dies after.
| Entry | Exit | Days | Mean | Median | Win % | Min | Max | Sharpe |
|---|---|---|---|---|---|---|---|---|
| T-4 | T+8 | 12 | +2.13% | +2.00% | 82.6% | −2.75% | +8.28% | 0.86 |
| T-4 | T+7 | 11 | +2.07% | +2.05% | 87.0% | −2.51% | +7.68% | 0.88 |
| T-3 | T+8 | 11 | +2.05% | +2.30% | 82.6% | −2.74% | +6.36% | 0.92 |
| T-3 | T+6 | 9 | +1.90% | +1.84% | 91.3% | −2.80% | +5.78% | 0.96 |
| T-6 | T+6 | 12 | +1.86% | +2.09% | 82.6% | −2.21% | +5.64% | 1.06 |
| Entry | Exit | Days | Mean | Median | Win % | Min | Max |
|---|---|---|---|---|---|---|---|
| T-3 | T+8 | 11 | +2.85% | +2.77% | 95.0% | −4.95% | +7.44% |
| T-4 | T+8 | 12 | +2.73% | +2.62% | 85.0% | −4.24% | +9.55% |
| T-6 | T+8 | 14 | +2.46% | +3.01% | 90.0% | −5.79% | +7.30% |
QQQ T-3 → T+8 = 19 of 20 years positive, median +2.77%.
| Year | J4 weekday | T+0 anchor | T-4 entry | T+8 exit | SPY return |
|---|---|---|---|---|---|
| 2022 | Mon | (closed) | Mon Jun 27 | Thu Jul 14 | −2.75% |
| 2023 | Tue | (closed) | Tue Jun 27 | Fri Jul 14 | +3.01% |
| 2024 | Thu | (closed) | Thu Jun 27 | Tue Jul 16 | +3.38% |
| 2025 | Fri | (closed) | Fri Jun 27 | Wed Jul 16 | +1.51% |
| 2026 | Sat | Fri Jul 3 | Mon Jun 29 | Wed Jul 15 | TBD |
| Year | Ret | Year | Ret | Year | Ret |
|---|---|---|---|---|---|
| 2003 | +2.31% | 2011 | +2.34% | 2019 | +2.84% |
| 2004 | −2.34% | 2012 | +1.70% | 2020 | +7.27% |
| 2005 | +3.16% | 2013 | +4.00% | 2021 | +1.70% |
| 2006 | −0.31% | 2014 | +1.09% | 2022 | −2.75% |
| 2007 | +2.95% | 2015 | +0.38% | 2023 | +3.01% |
| 2008 | −0.42% | 2016 | +8.28% | 2024 | +3.38% |
| 2009 | +1.55% | 2017 | +1.75% | 2025 | +1.51% |
| 2010 | +2.00% | 2018 | +3.71% |
Compounded $1 over 23 years: $1 → $1.615 (+61.5% total, +2.11%/yr for ~2-week annual exposure). QQQ compounded: $1 → $1.742 (+74.2% over 20 years).
The 4 SPY loss years (2004, 2006, 2008, 2022) all share one trait: the broader tape was in a bear trend going into the window. These were not random misses — macro overwhelmed seasonality. The single largest loss (2022, −2.75%) is the relevant analog when starting from weakness.
| Date | DOW | idx_front | idx_next | Label |
|---|---|---|---|---|
| 2026-06-22 | Mon | +0.04 | n/a | FLAT |
| 2026-06-23 | Tue | −2.31 | −1.98 | BEAR_HARD |
| 2026-06-24 | Wed | −1.15 | +0.70 | BEAR_HARD |
| 2026-06-25 | Thu | −1.27 | −2.22 | BEAR_HARD |
| 2026-06-26 | Fri | −0.82 | −1.72 | BEAR |
4 of last 5 sessions in BEAR/BEAR_HARD with idx_next still pricing further decay — same regime family as 2022.
Price-action proxy for the wsi BEAR signal (5d SPY ≤ −2% AND below 20-SMA AND 3+ red days in last 5 AND still selling today):
| Cohort | Days | n | Mean | Median | Win % |
|---|---|---|---|---|---|
| Baseline (all days) | 5 | 5759 | +0.20% | +0.37% | 59% |
| Baseline | 10 | 5754 | +0.40% | +0.71% | 62% |
| BEAR regime proxy | 5 | 395 | +0.82% | +0.86% | 64% |
| BEAR regime proxy | 10 | 395 | +1.20% | +1.50% | 63% |
Counter-intuitive but important: at the 5-10 day horizon, the BEAR signal is mildly bullish, not bearish. Severe oversold readings mean-revert. The danger window is days 0-3 (mean −1.17% on the wsi-only sample).
| Horizon | wsi-proxy expected | July-4 seasonal expected | Read |
|---|---|---|---|
| T+0 → T+3 | flat to −0.5% | flat to +0.1% | weak/continuation — don't fight |
| T+5 | +0.82% | +1.25% | scale long into weakness |
| T+8 → T+10 | +1.20% | +1.98% | target exit, take the lift |
idx_front
goes ≤ −1.5% on two consecutive sessions during the trade.scratchpad/july4_seasonality.py SPY (or QQQ)scratchpad/wsi_proxy_bt.pydoc/july4_seasonality.mdtastk (SPY/QQQ daily 2003+), wall_shift_idx (live 2026+)