Headline finding
Screening time materially changes both the symbol set and the forward base rate. A screen run at 13:00 UTC (NY open) produced the best 8-hour forward results — mean +0.63%, median −0.37%, 47% win rate — while the current AM+PM setup pooled to mean −0.62% (40% win). The six anchors flag mostly different symbols (Jaccard 0.11–0.31 between non-adjacent anchors), so timing is not a rounding error — it changes what you're looking at.
Best anchor: NY open (13:00 UTC)
+0.63% mean 8h
47% 8h win rate
Best cells: up-movers at NY open ≈ flat (50% win); down-movers −2.04%.
Current setup: AM + PM pooled
−0.62% mean 8h
40% 8h win rate
AM 21:30 UTC: −0.30% · PM 06:30 UTC: −1.00% mean 8h.
The edge lives at 4h, not 24h
+0.24% median 4h at NY open
−4.05% median 24h (reversion)
Flags behave like 4h scalps; day holds fight the reversion.
Base rate per screening anchor
Same screener logic, six different times of day. Forward returns measured from the anchor timestamp.
| Anchor (UTC) | N | 1h med | 4h med | 8h med | 24h med | 8h win% | 8h mean |
|---|---|---|---|---|---|---|---|
| ny_open 13:00 | 290 | −0.03% | +0.24% | −0.37% | −4.05% | 47% | +0.63% |
| am_screener 21:30 | 242 | +0.09% | −0.32% | −1.44% | −4.10% | 43% | −0.30% |
| user_9am 23:00 | 205 | +0.26% | −0.59% | −1.75% | −4.34% | 39% | −0.39% |
| asia_open 00:00 | 199 | −0.33% | −0.60% | −1.88% | −4.17% | 42% | −0.79% |
| pm_screener 06:30 | 207 | +0.13% | −1.18% | −1.99% | −4.15% | 37% | −1.00% |
| london_open 07:00 | 204 | −0.13% | −2.50% | −3.28% | −4.64% | 37% | −1.69% |
Welch t-test (8h, ny_open vs london_open) ≈ 1.8 — directionally strong but not formally significant at n≈200/arm. The ranking is consistent across means, medians, and win rates.
Horizon structure — where the edge lives
At the best anchor (NY open), the signal is positive at 1–8h but strongly negative by 24h. This determines the trading plan: 4h scalps, not day holds.
| Horizon | Mean | Median | Win% |
|---|---|---|---|
| 1h | −0.15% | −0.03% | 49% |
| 4h | −0.11% | +0.24% | 51% |
| 8h | +0.63% | −0.37% | 47% |
| 24h | −0.88% | −4.05% | 39% |
Gross returns — no fees/spread. Prior ORB research shows costs eat ~50% of marginal edges.
Factor analysis — what adds information, what doesn't
Volume recency (H2.1) reversed
High last-4h volume share is the worst tercile — the screener catches the tail of volume events, not the start.
Session of origin (H1.1) supported
Symbols whose volume peaked 20–24 UTC (late NY) are worst 8h forward; London-morning peaks (08–12 UTC) are best.
Direction at NY open (H4.1) partial
Up-movers ≈ flat (50% win); down-movers −2.04%. Long-only at NY open is the best directional cell.
Magnitude (H4.2) no effect
No sweet spot: 0–5% −1.99% · 5–15% −1.44% · 15–25% −1.97% · >25% −1.64% (8h med).
ATR expanding (H3.1) rejected
Expanding ATR at flag is slightly worse than contracting (−1.94% vs −1.59% 8h med). Do not add as an entry filter.
Range position (H4.3) weak
High-third (near 24h high) mildly best (45% win) vs mid-third (38%). Not a strong factor.
Hypothesis verdicts
| Hypothesis | Verdict | Evidence (first pass) |
|---|---|---|
| H0.1 "24h" volume change is actually 12h-vs-12h | CONFIRMED | Screener compares last 48 vs previous 48 × 15m bars; anchor time decides which half-window is "recent". |
| H1.2 Session base rates differ | SUPPORTED | −3.28% .. +0.63% mean 8h spread across 6 anchors. |
| H1.1 "US leftover" provenance | SUPPORTED | Volume peaking 20–24 UTC worst (−2.25%); 08–12 UTC best (−0.67%). |
| H2.1 Volume recency → continuation | REJECTED (reversed) | High last-4h share worst: −2.59% vs −1.50% low tercile. |
| H4.1 Directional asymmetry | PARTIAL | At NY open: up ≈ flat (50% win), down −2.04%. |
| H4.2 Magnitude sweet spot | NOT FOUND | No monotone/continuation pattern across buckets. |
| H3.1 ATR expanding vs contracting | REJECTED | Expanding −1.94% vs contracting −1.59% (8h med). |
| H6.1 Anchor overlap | LOW | Adjacent anchors 0.74–0.86 Jaccard; all others 0.11–0.31. |
| H6.2 Weekday vs weekend | MILD | Weekday −1.58% (42% win) vs weekend −2.29% (39%). |
| H2.4 Threshold sensitivity | ANCHOR-DEPENDENT | NY open invariant to 0/10/30% vol-chg; London open worsens. |
Trading-plan implications
- One screen → 13:00 UTC (23:00 Sydney). Treat flags as 4h scalps; the 24h median of −4% says day holds fight reversion.
- Fade late-NY-peak-volume flags (peak 4h block 20–24 UTC); prefer London-morning (08–12 UTC) peaks.
- Long-only at NY open is the best directional cell; shorts are structurally worse.
- Do not add volume-recency or ATR-expansion entry filters — the data says the opposite of the original hypotheses.
Method & caveats
What was tested
The exact live screener logic (24h turnover ≥ $10M, 12h-vs-12h volume change > 0%, ATR(14,15m) > 2%, TV daily volatility > 3%) evaluated at six anchor timestamps over 35 completed days, with per-event features (volume recency, ATR expansion, peak 4h volume block, direction, magnitude, range position) and forward returns 1h/4h/8h/24h + MAE/MFE.
Caveats
- 35 days = one regime; weekly win rates bounce (ny_open 20–58%).
- Gross returns — no taker fees/spread (costs eat ~50% of marginal edges).
- Volatility gate uses the last completed daily candle (H0.2 partial-candle contamination still pending).
- First-pass signal — validate out-of-sample before changing production.
Reproduce
All code is in the repo scripts/. The main harness:
cd scripts
python3 session_timing_backtest.py # multi-anchor backtest (cached ~1 min re-runs)
python3 session_split_performance.py # 1m OHLCV cross-check (needs local session CSVs)
Full framework: docs/session_timing_hypotheses.md · Raw reports: results/