Bybit perpetuals · multi-anchor backtest · 35 days · 1,359 pass events

Does the time of day your screener runs change what it flags — and how those symbols perform?

Crypto trades 24/7, but liquidity and volatility concentrate around Asia, London, and New York business hours. The production screener runs at 07:30 Sydney (21:30 UTC, late New York) and 16:30 Sydney (06:30 UTC, mid-Asia). We re-ran the exact same screener logic at six times of day over the last 35 days to isolate whether screening time itself carries predictive information for the day's trading outcome.

52,228anchor evaluations
1,359pass events
6screening anchors (UTC)
~1.25ppmean 8h edge, NY open vs current

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:00290−0.03%+0.24%−0.37%−4.05%47%+0.63%
am_screener 21:30242+0.09%−0.32%−1.44%−4.10%43%−0.30%
user_9am 23:00205+0.26%−0.59%−1.75%−4.34%39%−0.39%
asia_open 00:00199−0.33%−0.60%−1.88%−4.17%42%−0.79%
pm_screener 06:30207+0.13%−1.18%−1.99%−4.15%37%−1.00%
london_open 07:00204−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.

HorizonMeanMedianWin%
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).

0–5%
−1.99%
5–15%
−1.44%
15–25%
−1.97%
>25%
−1.64%

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

HypothesisVerdictEvidence (first pass)
H0.1 "24h" volume change is actually 12h-vs-12hCONFIRMEDScreener compares last 48 vs previous 48 × 15m bars; anchor time decides which half-window is "recent".
H1.2 Session base rates differSUPPORTED−3.28% .. +0.63% mean 8h spread across 6 anchors.
H1.1 "US leftover" provenanceSUPPORTEDVolume peaking 20–24 UTC worst (−2.25%); 08–12 UTC best (−0.67%).
H2.1 Volume recency → continuationREJECTED (reversed)High last-4h share worst: −2.59% vs −1.50% low tercile.
H4.1 Directional asymmetryPARTIALAt NY open: up ≈ flat (50% win), down −2.04%.
H4.2 Magnitude sweet spotNOT FOUNDNo monotone/continuation pattern across buckets.
H3.1 ATR expanding vs contractingREJECTEDExpanding −1.94% vs contracting −1.59% (8h med).
H6.1 Anchor overlapLOWAdjacent anchors 0.74–0.86 Jaccard; all others 0.11–0.31.
H6.2 Weekday vs weekendMILDWeekday −1.58% (42% win) vs weekend −2.29% (39%).
H2.4 Threshold sensitivityANCHOR-DEPENDENTNY open invariant to 0/10/30% vol-chg; London open worsens.

Trading-plan implications

  1. One screen → 13:00 UTC (23:00 Sydney). Treat flags as 4h scalps; the 24h median of −4% says day holds fight reversion.
  2. Fade late-NY-peak-volume flags (peak 4h block 20–24 UTC); prefer London-morning (08–12 UTC) peaks.
  3. Long-only at NY open is the best directional cell; shorts are structurally worse.
  4. 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/