Does where the day opens relative to yesterday’s volume profile (POC / VAH / VAL, 70% value area) predict the day? 230 liquid Bybit perps, 90,283 trading days, every edge shown gross AND after ~10bps round-trip costs.
The classic market-profile theories — “open above yesterday’s value = bullish day, open below = bearish” — do not hold in crypto perps. Opening above prior VAH gave 45.5% up-days (+8 bps, not significant); opening below prior VAL gave a mild +19 bps bounce (significant, stronger OOS at +53 bps, marginal net at +9 bps after costs).
The real signal lives in the structure of yesterday: POC near yesterday’s high → next day +13 bps (significant, holds OOS — supports the absorption reading); POC near yesterday’s low → −13 bps. And the London session’s value area is the only session reference that significantly predicts next-day direction (spread −17.8 bps, p=0.0055); a London session closing near its highs (P-shape) → next day +22 bps (p<0.0001).
The “first hour predicts the day” theory mostly fails (43–46% continuation), and 80% of outside-value opens eventually fill — but slowly. A decision tree using prior-day/session features nudges accuracy to ~54–55% OOS. Real but small; use as context, not a standalone signal.
Open above/below/inside the prior day's 70% value area → does it predict day direction? Mostly no — the popular “open drive” idea is falsified.
POC proximity to VAH/VAL and volume distribution influence next-day direction — the absorption reading (POC at highs = buyers defending) is supported; the distribution/bearish reading is not.
Separate volume profiles for Tokyo/London/NY: London VA is the only session reference that predicts next day; London P-shape is the strongest single effect (+22 bps).
UP vs DOWN days within each scenario, using only open-time information: calmer buyer-heavy prior days distinguish up-days after above-VAH opens; wide NY VA distinguishes the bounce after below-VAL opens.
| You open… | Day went UP | Avg day return | Verdict |
|---|---|---|---|
| Above yesterday's VAH | 45.5% | +8 bps | ❌ no real edge |
| Inside value, above POC | 46.3% | −4 bps | ❌ |
| Inside value, below POC | 47.0% | +4 bps | ❌ |
| Below yesterday's VAL | 48.9% | +19 bps | ⚠️ small bounce — OOS +53 bps, net +9 bps |
| Signal | Effect | Significance |
|---|---|---|
| POC near yesterday's high (VAH) | +13 bps next day | significant, holds OOS — absorption reading supported |
| POC near yesterday's low (VAL) | −13 bps next day | distribution reading not supported |
| Open vs London session VA | −17.8 bps spread | p=0.0055 — only session VA that predicts |
| London closed near highs (P-shape) | +22 bps next day | p<0.0001 — strongest single session effect |
| Open below VAL in high-vol regime | +57 bps | vs +2 bps calm — volatility amplifies the bounce |
| Dominant prior session | +13 / −11 / +10 bps | Tokyo-heavy / London-heavy / NY-heavy |
Real Bybit klines (liquid tier), 15m history, UTC 00:00–00:00 daily profiles, 70% value area, ~522 days per symbol. No fabricated data — every number traces to a dataset file.
Hypothesis tables H1–H17 and session tests S1–S5 with significance verdicts, out-of-sample checks, per-symbol consistency, and gross-vs-net (~10 bps RT) for every edge.
UP-vs-DOWN separations within scenarios using only open-time information, plus decision trees with OOS accuracy (~54–55% vs 51–55% base rate).
site/index.html dashboard: headline finding cards, every hypothesis table, session tests with charts, decision trees, full findings report. Dataset JSON embedded — opens from file:// or any static host.
cd /home/jose/workspace/volprof
python3 src/fetch.py --tier liquid # fetch liquid-tier 15m history
python3 src/features.py # build profiles + features
python3 src/analysis.py --all # hypothesis tests + reports
python3 src/make_site.py # regenerate the dashboard
./run_pipeline.sh # end-to-end