Headline findings
The naive theory is dead; the structure survives. Opening above yesterday's high-value zone is worse than a coin flip (45.5% up-rate, +8 bps n.s.) — but opening below yesterday's value bottom bounces (+19 bps, +53 bps out-of-sample). More importantly, the shape of yesterday — where the POC sat, and especially the London session's value area — carries more next-day signal than where today opens.
The below-VAL bounce is real
+19 mean day ret
+53 out-of-sample
Opening below yesterday's value bottom bounces back up — significant (p < 0.001) and stronger out-of-sample. The one open-location effect that survives.
"Open above value = bullish" fails
45.5% up-rate, above VAH
+8 mean, not significant
The classic market-profile theory — worse than a coin flip. Open location alone is not a crystal ball.
Structure of yesterday matters more
+13 POC near VAH → next day
+31 out-of-sample
Where the volume sat (POC high vs low) predicts next-day direction and survives out-of-sample — the absorption reading, not the naive one.
The London session carries the signal
-18 London VA spread
p = 0.006 only significant reference
The full-day value area most traders reference is not significant; London's is. London P-shape → next day +22 bps.
Executive summary — what the data says, in plain English
Written 2026-09-02 · 230 liquid Bybit perps · 90,283 trading days · ~522 days each
(Mar 2025 → Sep 2026) · 70% value area · UTC day profiles
What we did
Every day, the market builds a "volume profile": a picture of where the trading
actually happened over the previous 24 hours. From that picture we get three
reference prices:
- POC — the price where the most trading happened (the market's "memory point")
- VAH / VAL — the top and bottom of the value area, the zone where 70% of the day's business took place ("fair value" for that day)
We then asked: when the new day opens above, below, or inside yesterday's value
area — does that tell us anything about where the day is going? And we went
deeper: does it matter where the volume sat (POC near the top vs bottom)? Do the
individual trading sessions (Tokyo, London, New York) carry their own signals?
And what separates the days that went up from the days that went down, within each
scenario?
All results below come from real Bybit kline data, with statistical tests,
out-of-sample checks, and per-symbol consistency — and every edge is shown both
gross and after a realistic ~10 basis point round-trip trading cost.
The big picture
1. Where the day opens is NOT a crystal ball by itself
The classic market-profile theories — "open above yesterday's value = bullish day",
"open below = bearish day" — do not hold up in crypto perps:
| You open... | Day went UP | Average day return | Verdict |
|---|---|---|---|
| Above yesterday's VAH | 45.5% | +8 bps (not significant) | ❌ 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 (significant) | ⚠️ small bounce |
Two surprises here:
- Opening above yesterday's high-value zone gave essentially nothing — worse than a coin flip. The popular "open drive" idea (excess begets more excess) doesn't survive contact with real data.
- The one statistically real effect is the opposite of the theory: opening below yesterday's value bottom produced a mild bounce back up (+19 bps, and it got stronger out-of-sample at +53 bps). It's a small mean-reversion effect, and after costs it's marginal (+9 bps). Not a money printer — but it's real.
2. The STRUCTURE of yesterday matters more than where today opens
The interesting signal lives in how the previous day's volume was distributed:
- POC near yesterday's high (VAH) → next day slightly up (+13 bps, significant, holds out-of-sample). This supports the absorption reading — when the most trading happened at the highs, buyers were defending those prices, and that strength carried into the next day. The opposite (distribution/bearish) reading is not supported.
- POC near yesterday's low (VAL) → next day slightly down (−13 bps).
- High volatility amplified things: opening below VAL in a high-volatility environment bounced +40 bps (vs +5 bps in calm conditions); opening above VAH only worked in calm conditions (+26 bps).
So: the shape of yesterday is a real (if small) directional hint. The open
location alone is not.
3. The London session is the one that matters
This is the most practically interesting finding. We split each day into its three
trading sessions and built a separate volume profile for each — and the London
session's value area was the only reference that significantly predicted next-day
direction (spread of −17.8 bps between "open above London VA" vs "open below
London VA", p = 0.0055). The full-day value area — the one most traders use — was
not significant.
A few more session-level signals:
- A London session that closed near its highs (P-shape) → next day +22 bps (p < 0.0001) — the strongest single session effect we found, and again the opposite of the naive "distribution = bearish" story.
- Which session dominated the previous day matters: Tokyo-heavy day → next day +13 bps; London-heavy day → next day −11 bps; NY-heavy → +10 bps.
- Session "momentum" (a strong Tokyo, London, or NY move carrying into the next day) exists but is thin (+8–10 bps).
4. The "first hour predicts the day" theory mostly fails too
- Only 43–45% of the time does the first hour even continue the direction of an outside-the-value open (42.6% above VAH, 45.3% below VAL). The "opening drive" idea is falsified.
- The first hour's direction does line up with the day's direction about 60% of the time — but that's only knowable after the first hour, and the payoff difference is small. Not exploitable at the open.
5. Gaps tend to fill — but slowly
About 80% of days that open outside yesterday's value area return into it at
some point during the day. So fading an overextended open has eventual support —
but it's not a fast or clean edge.
What separates UP days from DOWN days? (factual vs counterfactual)
For each scenario we compared the days that went up vs the days that went down,
using only information known at the open:
- On days that opened above yesterday's value high, the UP days came from calmer, buyer-heavy prior days: lower prior volatility, more volume sitting in the upper half of the prior profile, and a Tokyo POC positioned higher. In other words, an above-value open after a quiet, accumulation-style day behaves differently from one after a wild, distribution-style day.
- On days that opened below yesterday's value low, the UP days had a wider prior New York value area and a thinner London presence — suggesting the bounce is more reliable after an NY session that ranged widely.
A simple decision tree using these prior-day/session features, split by
calendar date (first 60% of days train, last 40% test), does not reliably
beat the scenario base rate out of sample (above-VAH: 55.0% vs 54.5% base;
inside-VA above POC the tree is worse than guessing the majority). Real
structure, tiny and unstable — not a tradeable signal.
The honest caveats
- Effects are small. Most are 10–25 bps — the size of the bid-ask spread.
Only a few survive a 10 bps round-trip cost, and barely.
- Per-symbol agreement is weak (46–60% of symbols agree with the pooled
direction). These are tendencies across the market, not laws that hold for
every coin. Some symbols will behave opposite.
- This is 522 days of one regime. Crypto structure can change; treat these as
historical statistics, not guarantees.
- The trees' out-of-sample improvement is ~0–1 point over guessing the
majority, and can go the wrong way once the split is a real calendar cut.
What this means in practice
- Don't trade "open above/below value = direction". The naive version is dead. The below-VAL bounce is the only raw effect worth respecting, and only in high-volatility conditions (+40 bps gross / +30 bps net of 10 bps).
- Watch the London session. Its value area and shape carry more next-day signal than the full-day profile most people reference. London P-shape → positive next day is the single most robust session finding.
- Use the structure, not the level. Yesterday's POC position (high vs low) and the prior volatility regime tell you more than where today's open falls.
- The framework is now the asset. The code, data, and site let us test any refinement — session-by-session leads, per-symbol filters, cost-aware backtests — without re-building anything.
Full numbers behind every claim: see the tables on this page, or the detailed
findings report below.
Potential trading strategies
These are historically measured tendencies, not trade recommendations.
Every setup below is knowable at the 00:00 UTC open. Edges are pooled across
230 liquid Bybit USDT perps (2025-03-30 → 2026-09-02). Round-trip cost is
assumed at 10 bps. Per-symbol agreement is only 46–60%, so a universe-wide
rule will lose on a large minority of coins.
Do not deploy any of these without: a per-symbol gate, walk-forward
validation on that symbol, live-spread costs, and a kill switch if the
regime changes.
Do not trade
| Idea | Why it died |
|---|---|
| Open above prior VAH → long the day | +8 bps, not significant, win rate 45.5% |
| Open inside VA (above or below POC) → fade/follow | ±4 bps, noise |
| First-hour "opening drive" after an excess open | Continues only 42.6–45.3% of the time |
| Decision-tree overlay on open location | Calendar OOS accuracy ≤ base rate |
| Calendar-gap fill (open vs prior close) | 24/7 perps: gap ≈ 0 |
Candidates that survived the gates
A "finding" here means: in-sample p < 0.05, out-of-sample p < 0.05, and
the same sign in both halves. Session tests (S1–S4) report raw p-values only.
1. High-vol below-VAL bounce (best raw open-location edge)
| Setup | UTC open below prior-day VAL, and prior-day ATR is in the symbol's high historical tercile |
| Action | Long at the open; exit at the UTC close (or flatten if price re-enters the prior VA) |
| Horizon | Open → close (~24h) |
| Historical | +40 bps gross / +30 bps net · win rate 50.0% · OOS +97 bps |
| Evidence | H1 below_VAL (+19 bps pooled); H15 below_VAL_atr_high |
| Why it might exist | Excess below value is more often rejected than continued, and the bounce is concentrated in already-volatile names |
| Why it might fail | Win rate is a coin flip; the +19 bps pooled edge is only +9 bps after costs; 40% of symbols disagree |
2. Open below prior London value (session reference)
| Setup | UTC open below the prior London session VAL (09:00–17:00 UTC profile) |
| Action | Long at the open; exit UTC close |
| Horizon | Open → close |
| Historical | +24 bps · win rate 49.2% · p < 1e-6. Spread vs open-above-London-VAH: −17.8 bps (p = 0.0055) |
| Evidence | S1 London below_VAL / SPREAD(abv-blw) |
| Why it might exist | London is where most two-sided size trades; its value area is a tighter next-day anchor than the 24h profile |
| Why it might fail | Session tests are not OOS-gated the same way as H-tables; overlap with NY 13:00–17:00 |
3. London P-shape continuation (strongest session shape)
| Setup | Prior London session classified P (POC near session high, upper-half volume skew) |
| Action | Long next UTC day (open → close) |
| Horizon | Next full UTC day |
| Historical | +22 bps · win rate 48.2% · p = 9.1e-5 |
| Evidence | S2 London shape P |
| Why it might exist | Volume at London highs reads as absorption, not distribution — the same pattern as daily POC-near-VAH |
| Why it might fail | Naive "P = distribution = short" is the popular reading; crowding that fade is what this edge is betting against |
4. Prior-day POC location (structure, not the open)
| Setup A | Prior-day POC in the top third of the day's range (poc_pos > 0.66) → long next day |
| Setup B | Prior-day POC in the bottom third (poc_pos < 0.33) → short next day |
| Action | Hold open → close |
| Historical | Near VAH: +13 bps (OOS +31) · near VAL: −13 bps (OOS −19) |
| Evidence | H7–H9 |
| Why it might exist | POC at the high = buyers defended; POC at the low = sellers defended. Next day inherits that lean |
| Why it might fail | Net of 10 bps the long is only +3 bps; short is −23 bps if you are long-biased by default — the short is the cleaner of the two if you can actually get short |
5. Daily P / b profile shape
| Setup A | Prior day shape P → long next day |
| Setup B | Prior day shape b → short next day |
| Historical | P: +14 bps (OOS +35) · b: −13 bps (OOS −19) |
| Evidence | H11 |
| Note | Closely related to strategy 4 (POC position is an input to shape). Do not stack 4 and 5 as independent edges |
6. Wide prior value area
| Setup | Prior-day va_width_ratio above that symbol-day's sample median (wide VA) |
| Action | Long next day (the wide-VA cohort's mean return is positive; this is not a range-expansion trade) |
| Historical | Wide: +13 bps (OOS +14) · narrow: −2 bps and sign-flips OOS — do not fade narrow VAs |
| Evidence | H10 |
| Why it might fail | Directional, not a volatility-breakout rule. Narrow-VA "expansion day" folklore is not supported |
7. Session-dominance lean
| Setup A | Prior day Tokyo- or NY-dominant by turnover share → slight long lean |
| Setup B | Prior day London-dominant → slight short lean |
| Historical | Tokyo +13 bps (p = 0.016) · NY +10 bps (p = 0.004) · London −11 bps (p = 0.018) |
| Evidence | S4 |
| Why it might fail | Thin; no OOS gate; dominance is just "which session printed more notional" |
8. Below-VAL bounce in a downtrend
| Setup | UTC open below prior VAL and prior close is below daily EMA20 |
| Action | Long (fade the excess, not the trend) |
| Historical | +20 bps (OOS +53) · win rate 48.8% |
| Evidence | H16 below_VAL_trend_down |
| Note | Overlaps strategy 1. High-ATR + below-VAL is the tighter filter; this is the trend-regime view of the same bounce |
9. Calm above-VAH (continuation only when quiet)
| Setup | UTC open above prior VAH and prior ATR in the low tercile |
| Action | Long open → close |
| Historical | +26 bps (OOS +25) · win rate 48.3% |
| Evidence | H15 above_VAH_atr_low |
| Why it might fail | The unfiltered above-VAH trade is dead. This only works in the calm slice; high-ATR above-VAH is −16 bps |
10. Intraday fill-back (eventual, not timed)
| Setup | Open above prior VAH, or below prior VAL |
| Action | Fade back toward the VA intraday, not as a day-hold |
| Historical | Fill rate 79.5% (above VAH) / 77.7% (below VAL) — price touches the VA edge at some point |
| Evidence | H12 |
| Why it might fail | "Touches" ≠ profitable path. No timing, no stop study, no time-to-fill. Treat as a management hint (don't panic if it comes back) rather than an entry |
How you might combine them (not backtested as a portfolio)
The data support stacking structure filters on the below-VAL bounce, not
running ten independent systems:
- Require UTC open below prior VAL (strategy 1 / 8 core).
- Prefer high prior ATR (strategy 1) and/or prior close below EMA20 (strategy 8).
- Prefer London VAL also below the open (strategy 2) — same direction, better reference.
- Skip names where per-symbol history of this setup is the opposite sign (H17:
only 60% of symbols agree with the pooled below-VAL bounce).
- Size as if the edge is 10–30 bps, not 1%. After 10 bps costs, several of
these are already gone.
A second, separate sleeve is next-day long after London P-shape or POC-near-VAH
(strategies 3–5) — a structure long that does not need an excess open.
Operational constraints (from this study)
- Clock: all "opens" are 00:00 UTC, not an exchange bell.
- Cost: 10 bps round-trip is already enough to kill H1 unfiltered and most session-momentum effects.
- Holding period studied: open → close. Intraday scaling was not optimized.
- Universe: liquid Bybit USDT perps, listed ≥ 60 days, ≥ $1M 24h turnover.
- What was not tested: leverage, funding, stop placement, partial fills, per-symbol walk-forward, or stacking rules 1–10 as a single combined signal.
H1–H3 · Day return by open location vs prior-day profile
| Group | N | Mean (bps) | Median (bps) | Win % | t | p | OOS mean (bps) | OOS p | Verdict |
|---|---|---|---|---|---|---|---|---|---|
| above_VAH | 16,864 | +8 | -35 | 45.5% | 1.36 | 0.173 | +10 | 0.227 | n.s. |
| VA_above_POC | 25,597 | -4 | -28 | 46.3% | -0.74 | 0.459 | +7 | 0.315 | n.s. |
| VA_below_POC | 27,581 | +4 | -24 | 47.0% | 0.78 | 0.437 | -7 | 0.242 | n.s. |
| below_VAL | 20,011 | +19 | -9 | 48.9% | 4.13 | <0.001 | +53 | <0.001 | sig + OOS |
Mean open→close return in bps by where the day opened relative to the prior day's 70% value area (VAH/VAL/POC). OOS = out-of-sample split. Only below_VAL is significant and holds out-of-sample.
H4 · Excess magnitude scaling (OLS slope per VA-width, corr)
| Group | N | OLS slope (bps/VA-width) | Pearson r | Spearman ρ | ρ p | Verdict |
|---|---|---|---|---|---|---|
| dist_above_VAH | 16,864 | -28.71 | -0.017 | -0.009 | 0.247 | — |
| dist_below_VAL | 20,011 | 0.00 | 0.002 | -0.017 | 0.018 | — |
H7–H9 · Prior-day POC position zone → next-day return
| Group | N | Mean (bps) | Median (bps) | Win % | t | p | OOS mean (bps) | OOS p | Verdict |
|---|---|---|---|---|---|---|---|---|---|
| poc_near_VAL | 23,104 | -13 | -38 | 45.4% | -2.61 | 0.009 | -19 | 0.006 | sig + OOS |
| poc_central | 45,177 | +12 | -21 | 47.5% | 3.32 | <0.001 | +11 | 0.023 | sig + OOS |
| poc_near_VAH | 21,772 | +13 | -19 | 47.6% | 2.56 | 0.010 | +31 | <0.001 | sig + OOS |
Where the most trading happened (POC) in the prior day's range predicts next-day direction — all three zones are significant and hold out-of-sample.
H10 · Prior VA width band → next-day return & range
| Group | N | Mean (bps) | Median (bps) | Win % | t | p | Next-day range % | Verdict |
|---|---|---|---|---|---|---|---|---|
| va_narrow | 45,017 | -2 | -27 | 46.5% | -0.41 | 0.680 | 10.21% | n.s. |
| va_wide | 45,036 | +13 | -22 | 47.4% | 3.93 | <0.001 | 9.73% | sig + OOS |
H11 · Prior-day profile shape → next-day return & range
| Group | N | Mean (bps) | Median (bps) | Win % | t | p | Next-day range % | Verdict |
|---|---|---|---|---|---|---|---|---|
| shape_P | 19,973 | +14 | -20 | 47.5% | 2.58 | 0.010 | 9.82% | sig + OOS |
| shape_b | 22,372 | -13 | -38 | 45.2% | -2.43 | 0.015 | 11.04% | sig + OOS |
| shape_D | 47,708 | +11 | -20 | 47.5% | 3.42 | <0.001 | 9.53% | sig + OOS |
H15 · Open-location effect by ATR regime (low/high tercile)
| Group | N | Mean (bps) | Median (bps) | Win % | t | p | Verdict |
|---|---|---|---|---|---|---|---|
| above_VAH_atr_low | 6,966 | +26 | -10 | 48.3% | 4.02 | <0.001 | sig + OOS |
| above_VAH_atr_high | 4,547 | -16 | -99 | 41.7% | -1.12 | 0.263 | n.s. |
| below_VAL_atr_low | 8,273 | +5 | -18 | 47.5% | 0.83 | 0.405 | n.s. |
| below_VAL_atr_high | 5,700 | +40 | +1 | 50.0% | 3.83 | <0.001 | sig + OOS |
Opening below VAL in a high-volatility environment is where the bounce concentrates (+40 bps).
H16 · Open-location effect by trend regime (daily EMA20)
| Group | N | Mean (bps) | Median (bps) | Win % | t | p | Verdict |
|---|---|---|---|---|---|---|---|
| above_VAH_trend_up | 8,474 | +20 | -22 | 47.4% | 2.23 | 0.026 | in-sample |
| above_VAH_trend_down | 8,390 | -5 | -47 | 43.5% | -0.67 | 0.505 | n.s. |
| below_VAL_trend_up | 5,342 | +17 | -6 | 49.3% | 1.64 | 0.101 | n.s. |
| below_VAL_trend_down | 14,669 | +20 | -11 | 48.8% | 3.91 | <0.001 | sig + OOS |
H5–H6 · First-hour drive & day leadership
| Group | N | Open-drive rate | Drive p | 1h mean (bps) | Day follows 1h | Day ret | 1h up | Day ret | 1h dn | Verdict |
|---|---|---|---|---|---|---|---|---|
| drive_above_VAH | 16,864 | 42.6% | <0.001 | -7 | — | — | — | — |
| lead_above_VAH | 16,864 | — | — | — | 60.3% | +138 | -92 | — |
| drive_below_VAL | 20,011 | 45.3% | <0.001 | -1 | — | — | — | — |
| lead_below_VAL | 20,011 | — | — | — | 58.0% | +103 | -80 | — |
The "opening drive" theory mostly fails: only 43–46% of outside-value opens continue in the first hour (p ≪ 0.001, but in the wrong direction for the theory).
H12–H13 · Fill-back into prior VA
| Group | N | Fill rate | Verdict |
|---|---|---|---|
| fill_above_VAH | 16,864 | 79.5% | — |
| fill_below_VAL | 20,011 | 77.7% | — |
About 80% of days that open outside the prior value area return into it at some point — eventual support for fading overextended opens, but slow.
S1 · Open vs prior NY/London/Tokyo session VA vs full-day VA
| Reference | Bucket | N | Mean (bps) | Win % | t | p | Verdict |
|---|---|---|---|---|---|---|---|
| full_day | VA_above_POC | 25,597 | -4 | 46.3% | -0.74 | 0.459 | n.s. |
| full_day | VA_below_POC | 27,581 | +4 | 47.0% | 0.78 | 0.437 | n.s. |
| full_day | above_VAH | 16,864 | +8 | 45.5% | 1.36 | 0.173 | n.s. |
| full_day | below_VAL | 20,011 | +19 | 48.9% | 4.13 | <0.001 | sig |
| full_day | SPREAD(abv-blw) | 36,875 | -12 | — | -1.62 | 0.106 | n.s. |
| tokyo | VA_above_POC | 10,860 | +7 | 45.6% | 0.71 | 0.478 | n.s. |
| tokyo | VA_below_POC | 10,824 | -13 | 46.3% | -1.87 | 0.061 | n.s. |
| tokyo | above_VAH | 31,175 | +8 | 45.3% | 1.79 | 0.073 | n.s. |
| tokyo | below_VAL | 36,999 | +9 | 49.0% | 2.50 | 0.012 | sig |
| tokyo | SPREAD(abv-blw) | 68,174 | -1 | — | -0.15 | 0.881 | n.s. |
| london | VA_above_POC | 15,458 | -17 | 44.9% | -2.79 | 0.005 | sig |
| london | VA_below_POC | 16,030 | -9 | 46.6% | -1.50 | 0.133 | n.s. |
| london | above_VAH | 27,740 | +7 | 45.7% | 1.29 | 0.197 | n.s. |
| london | below_VAL | 30,825 | +24 | 49.2% | 6.23 | <0.001 | sig |
| london | SPREAD(abv-blw) | 58,565 | -18 | — | -2.78 | 0.006 | sig |
| ny | VA_above_POC | 22,454 | +8 | 47.3% | 1.42 | 0.157 | n.s. |
| ny | VA_below_POC | 23,047 | +1 | 46.5% | 0.18 | 0.860 | n.s. |
| ny | above_VAH | 21,410 | +6 | 46.5% | 0.97 | 0.333 | n.s. |
| ny | below_VAL | 23,142 | +9 | 47.5% | 2.03 | 0.042 | sig |
| ny | SPREAD(abv-blw) | 44,552 | -4 | — | -0.48 | 0.630 | n.s. |
London is the only session reference whose value area significantly predicts next-day direction (spread of open-above minus open-below). The full-day VA most traders use is not significant.
S2 · Prior-day session shape → next-day return
| Bucket | Group | Session | N | Mean (bps) | Median (bps) | Win % | t | p | Verdict |
|---|---|---|---|---|---|---|---|---|---|
| tokyo_shape | D | tokyo | 46,609 | +5 | -24 | 47.0% | 1.41 | 0.159 | n.s. |
| tokyo_shape | P | tokyo | 19,965 | +11 | -10 | 48.5% | 2.04 | 0.041 | sig |
| tokyo_shape | b | tokyo | 23,284 | +2 | -39 | 45.6% | 0.39 | 0.700 | n.s. |
| london_shape | D | london | 48,929 | +4 | -25 | 46.8% | 1.21 | 0.224 | n.s. |
| london_shape | P | london | 18,428 | +22 | -15 | 48.2% | 3.91 | <0.001 | sig |
| london_shape | b | london | 22,696 | -4 | -31 | 46.3% | -0.73 | 0.467 | n.s. |
| ny_shape | D | ny | 47,654 | +7 | -24 | 47.0% | 2.17 | 0.030 | sig |
| ny_shape | P | ny | 19,853 | -5 | -34 | 45.8% | -0.82 | 0.414 | n.s. |
| ny_shape | b | ny | 22,546 | +12 | -16 | 48.0% | 2.28 | 0.022 | sig |
A London session that closed near its highs (P-shape) → next day +22 bps (p < 0.0001) — the strongest single session effect.
S3 · Prior-day session return (momentum) → next-day return
| Session | Prior move | N | Mean (bps) | Win % | t | p | Verdict |
|---|---|---|---|---|---|---|---|
| tokyo | up | 43,601 | +8 | 46.8% | 2.28 | 0.022 | sig |
| tokyo | down | 45,929 | +3 | 47.1% | 0.74 | 0.462 | n.s. |
| london | up | 42,432 | +2 | 45.2% | 0.41 | 0.681 | n.s. |
| london | down | 47,307 | +10 | 48.6% | 2.80 | 0.005 | sig |
| ny | up | 43,394 | +7 | 45.8% | 2.00 | 0.046 | sig |
| ny | down | 46,309 | +4 | 48.1% | 1.29 | 0.198 | n.s. |
S4 · Prior-day dominant session (by turnover share) → next-day
| Session | N | Mean (bps) | Win % | t | p | Verdict |
|---|---|---|---|---|---|---|
| tokyo | 26,634 | +13 | 47.9% | 2.41 | 0.016 | sig |
| london | 22,777 | -11 | 46.5% | -2.36 | 0.018 | sig |
| ny | 40,447 | +10 | 46.7% | 2.87 | 0.004 | sig |
Tokyo-heavy prior day → next day +13 bps; London-heavy → −11 bps; NY-heavy → +10 bps.
S5 · Prior-day session VA width → next-day range
| Session | VA band | N | Next-day range % | Mean (bps) | t | p | Verdict |
|---|---|---|---|---|---|---|---|
| tokyo | None | — | — | — | 3.56 | <0.001 | sig |
| london | None | — | — | — | 0.64 | 0.520 | n.s. |
| ny | None | — | — | — | -3.03 | 0.002 | sig |
CF · What separates UP days from DOWN days?
Within each open-location scenario, feature means for UP days vs DOWN days — all features known at the open. |d| = Cohen's d. With a calendar-time split, the trees do not beat the majority-class base rate out of sample.
Decision trees · Joint conditions separating UP from DOWN
========================================================================
Scenario: above_VAH | n=16851 | base rate=0.545 | train acc=0.564 | OOS acc=0.550 | leaves=8
top features: {'ny_ret': 0.42243803814801856, 'prev_atr14_pct': 0.26646049336725486, 'london_ret': 0.10849773405615512, 'tokyo_ret': 0.09347070055305111, 'london_va_width_ratio': 0.07053270437142942, 'ny_va_width_ratio': 0.03860032950409106, 'poc_pos': 0.0, 'va_width_ratio': 0.0}
|--- ny_ret <= -0.00
| |--- london_ret <= -0.02
| | |--- ny_va_width_ratio <= 0.42
| | | |--- class: 1
| | |--- ny_va_width_ratio > 0.42
| | | |--- class: 0
| |--- london_ret > -0.02
| | |--- london_va_width_ratio <= 0.52
| | | |--- class: 0
| | |--- london_va_width_ratio > 0.52
| | | |--- class: 0
|--- ny_ret > -0.00
| |--- prev_atr14_pct <= 0.44
| | |--- tokyo_ret <= -0.02
| | | |--- class: 0
| | |--- tokyo_ret > -0.02
| | | |--- class: 1
| |--- prev_atr14_pct > 0.44
| | |--- ny_ret <= 0.10
| | | |--- class: 0
| | |--- ny_ret > 0.10
| | | |--- class: 0
========================================================================
Scenario: VA_above_POC | n=25540 | base rate=0.536 | train acc=0.545 | OOS acc=0.497 | leaves=8
top features: {'tokyo_turnover_share': 0.47760811907654627, 'tokyo_upper_share': 0.190851548337765, 'london_turnover_share': 0.13430932715768032, 'london_poc_pos': 0.08585220445455517, 'london_ret': 0.06295583463540175, 'tokyo_ret': 0.0484229663380515, 'poc_pos': 0.0, 'va_width_ratio': 0.0}
|--- tokyo_turnover_share <= 0.21
| |--- london_turnover_share <= 0.44
| | |--- london_ret <= -0.04
| | | |--- class: 0
| | |--- london_ret > -0.04
| | | |--- class: 0
| |--- london_turnover_share > 0.44
| | |--- tokyo_ret <= -0.00
| | | |--- class: 1
| | |--- tokyo_ret > -0.00
| | | |--- class: 0
|--- tokyo_turnover_share > 0.21
| |--- tokyo_turnover_share <= 0.56
| | |--- tokyo_upper_share <= 0.42
| | | |--- class: 0
| | |--- tokyo_upper_share > 0.42
| | | |--- class: 1
| |--- tokyo_turnover_share > 0.56
| | |--- london_poc_pos <= 0.47
| | | |--- class: 0
| | |--- london_poc_pos > 0.47
| | | |--- class: 0
========================================================================
Scenario: VA_below_POC | n=27500 | base rate=0.529 | train acc=0.555 | OOS acc=0.526 | leaves=8
top features: {'open_dist_va': 0.2892899966369089, 'tokyo_upper_share': 0.21712938915988533, 'ny_upper_share': 0.1913642445606463, 'ny_ret': 0.12223425155135473, 'tokyo_poc_pos': 0.10756088495385614, 'london_va_width_ratio': 0.07242123313734862, 'poc_pos': 0.0, 'va_width_ratio': 0.0}
|--- open_dist_va <= -0.35
| |--- ny_upper_share <= 0.61
| | |--- tokyo_upper_share <= 0.25
| | | |--- class: 0
| | |--- tokyo_upper_share > 0.25
| | | |--- class: 1
| |--- ny_upper_share > 0.61
| | |--- tokyo_upper_share <= 0.62
| | | |--- class: 0
| | |--- tokyo_upper_share > 0.62
| | | |--- class: 0
|--- open_dist_va > -0.35
| |--- tokyo_poc_pos <= 0.59
| | |--- ny_ret <= -0.06
| | | |--- class: 1
| | |--- ny_ret > -0.06
| | | |--- class: 0
| |--- tokyo_poc_pos > 0.59
| | |--- london_va_width_ratio <= 0.65
| | | |--- class: 0
| | |--- london_va_width_ratio > 0.65
| | | |--- class: 1
========================================================================
Scenario: below_VAL | n=19967 | base rate=0.511 | train acc=0.577 | OOS acc=0.496 | leaves=8
top features: {'tokyo_turnover_share': 0.22303498395007368, 'upper_share': 0.1705156002685089, 'tokyo_ret': 0.15874304152173455, 'london_turnover_share': 0.15487891038800045, 'ny_turnover_share': 0.12149812357395297, 'london_ret': 0.10285562960857356, 'ny_ret': 0.06847371068915592, 'poc_pos': 0.0}
|--- tokyo_turnover_share <= 0.36
| |--- tokyo_ret <= -0.01
| | |--- london_turnover_share <= 0.52
| | | |--- class: 1
| | |--- london_turnover_share > 0.52
| | | |--- class: 0
| |--- tokyo_ret > -0.01
| | |--- ny_turnover_share <= 0.63
| | | |--- class: 0
| | |--- ny_turnover_share > 0.63
| | | |--- class: 1
|--- tokyo_turnover_share > 0.36
| |--- upper_share <= 0.69
| | |--- london_ret <= -0.01
| | | |--- class: 1
| | |--- london_ret > -0.01
| | | |--- class: 0
| |--- upper_share > 0.69
| | |--- ny_ret <= -0.05
| | | |--- class: 1
| | |--- ny_ret > -0.05
| | | |--- class: 0
H17 · Per-symbol stability (robustness)
Per-symbol agreement with the pooled direction. These are market-wide tendencies, not laws that hold for every coin.
| Location | N symbols | Agree | Frac agree | Binom p | Pooled mean (bps) | Median sym mean (bps) | Sym + | Sym − | Verdict |
|---|---|---|---|---|---|---|---|---|---|
| above_VAH | 229 | 107 | 46.7% | 0.355 | +0 | -5 | 107 | 122 | — |
| VA_above_POC | 230 | 131 | 57.0% | 0.041 | -5 | -8 | 99 | 131 | — |
| VA_below_POC | 230 | 109 | 47.4% | 0.468 | +8 | -3 | 109 | 121 | — |
| below_VAL | 230 | 137 | 59.6% | 0.004 | +30 | +12 | 137 | 93 | — |
Findings report
Volume Profile Open-Location Findings — 2026-09-02
_Generated from real Bybit 15m klines. All returns are open→close in basis points unless stated. net = mean − 10bps round-trip cost. sig = in-sample p < 0.05, OOS p < 0.05, and same sign in both. p-values are raw (not Bonferroni-adjusted). See PLAN.md for hypothesis definitions._
Dataset: 230 symbols · 90283 symbol-days · 522 UTC days · 2025-03-30 → 2026-09-02
H4 · Excess magnitude scaling (OLS slope per VA-width, corr)
| group | n | OLS slope (bps per VA-width) | Pearson r | Spearman ρ | ρ p |
|---|---|---|---|---|---|
| dist_above_VAH | 16864 | -28.7 | -0.017 | -0.009 | 2.47e-01 |
| dist_below_VAL | 20011 | +0.0 | +0.002 | -0.017 | 1.83e-02 |
H1–H3 · Day return by open location vs prior-day profile
| group | n | mean(bps) | net(bps) | win | t | p | OOS mean | OOS p | sig |
|---|---|---|---|---|---|---|---|---|---|
| above_VAH | 16864 | +8 | -2 | 45.5% | 1.36 | 1.73e-01 | +10 | 2.27e-01 | ❌ |
| VA_above_POC | 25597 | -4 | -14 | 46.3% | -0.74 | 4.59e-01 | +7 | 3.15e-01 | ❌ |
| VA_below_POC | 27581 | +4 | -6 | 47.0% | 0.78 | 4.37e-01 | -7 | 2.42e-01 | ❌ |
| below_VAL | 20011 | +19 | +9 | 48.9% | 4.13 | 3.57e-05 | +53 | <1e-6 | ✅ |
H7–H9 · Prior-day POC position zone → next-day return
| group | n | mean(bps) | net(bps) | win | t | p | OOS mean | OOS p | sig |
|---|---|---|---|---|---|---|---|---|---|
| poc_near_VAL | 23104 | -13 | -23 | 45.4% | -2.61 | 9.04e-03 | -19 | 5.60e-03 | ✅ |
| poc_central | 45177 | +12 | +2 | 47.5% | 3.32 | 8.97e-04 | +11 | 2.29e-02 | ✅ |
| poc_near_VAH | 21772 | +13 | +3 | 47.6% | 2.56 | 1.04e-02 | +31 | 1.83e-04 | ✅ |
H10 · Prior VA width band → next-day return & range
| group | n | mean(bps) | net(bps) | win | t | p | OOS mean | OOS p | sig |
|---|---|---|---|---|---|---|---|---|---|
| va_narrow | 45017 | -2 | -12 | 46.5% | -0.41 | 6.80e-01 | +14 | 6.57e-03 | ❌ |
| va_wide | 45036 | +13 | +3 | 47.4% | 3.93 | 8.36e-05 | +14 | 5.23e-03 | ✅ |
H11 · Prior-day profile shape → next-day return & range
| group | n | mean(bps) | net(bps) | win | t | p | OOS mean | OOS p | sig |
|---|---|---|---|---|---|---|---|---|---|
| shape_P | 19973 | +14 | +4 | 47.5% | 2.58 | 9.89e-03 | +35 | 7.14e-05 | ✅ |
| shape_b | 22372 | -13 | -23 | 45.2% | -2.43 | 1.53e-02 | -19 | 6.28e-03 | ✅ |
| shape_D | 47708 | +11 | +1 | 47.5% | 3.42 | 6.35e-04 | +11 | 1.49e-02 | ✅ |
H15 · Open-location effect by ATR regime (low/high tercile)
| group | n | mean(bps) | net(bps) | win | t | p | OOS mean | OOS p | sig |
|---|---|---|---|---|---|---|---|---|---|
| above_VAH_atr_low | 6966 | +26 | +16 | 48.3% | 4.02 | 5.91e-05 | +25 | 4.08e-03 | ✅ |
| above_VAH_atr_high | 4547 | -16 | -26 | 41.7% | -1.12 | 2.63e-01 | -55 | 1.63e-02 | ❌ |
| below_VAL_atr_low | 8273 | +5 | -5 | 47.5% | 0.83 | 4.05e-01 | +44 | <1e-6 | ❌ |
| below_VAL_atr_high | 5700 | +40 | +30 | 50.0% | 3.83 | 1.28e-04 | +97 | <1e-6 | ✅ |
H16 · Open-location effect by trend regime (daily EMA20)
| group | n | mean(bps) | net(bps) | win | t | p | OOS mean | OOS p | sig |
|---|---|---|---|---|---|---|---|---|---|
| above_VAH_trend_up | 8474 | +20 | +10 | 47.4% | 2.23 | 2.60e-02 | +6 | 6.83e-01 | ❌ |
| above_VAH_trend_down | 8390 | -5 | -15 | 43.5% | -0.67 | 5.05e-01 | +2 | 8.08e-01 | ❌ |
| below_VAL_trend_up | 5342 | +17 | +7 | 49.3% | 1.64 | 1.01e-01 | +59 | 1.21e-04 | ❌ |
| below_VAL_trend_down | 14669 | +20 | +10 | 48.8% | 3.91 | 9.40e-05 | +53 | <1e-6 | ✅ |
H5–H6 · First-hour drive & day leadership
| group | n | open-drive rate | 1h mean(bps) | day-follows-1h | day ret \ | 1h up(bps) | day ret \ | 1h dn(bps) |
|---|---|---|---|---|---|---|---|---|
| drive_above_VAH | 16864 | 42.6% | -7 | — | — | — | ||
| lead_above_VAH | 16864 | — | — | 60.3% | +138 | -92 | ||
| drive_below_VAL | 20011 | 45.3% | -1 | — | — | — | ||
| lead_below_VAL | 20011 | — | — | 58.0% | +103 | -80 |
H12 · Fill-back into prior VA
| group | n | fill rate |
|---|---|---|
| fill_above_VAH | 16864 | 79.5% |
| fill_below_VAL | 20011 | 77.7% |
H17 · Per-symbol stability (robustness)
| loc | n_symbols | frac_agree | binom p | pooled mean(bps) | median sym mean(bps) | sym+ | sym− |
|---|---|---|---|---|---|---|---|
| above_VAH | 229 | 46.7% | 3.55e-01 | +0 | -5 | 107 | 122 |
| VA_above_POC | 230 | 57.0% | 4.07e-02 | -5 | -8 | 99 | 131 |
| VA_below_POC | 230 | 47.4% | 4.68e-01 | +8 | -3 | 109 | 121 |
| below_VAL | 230 | 59.6% | 4.47e-03 | +30 | +12 | 137 | 93 |
S1 · Open vs prior NY/London/Tokyo session VA vs full-day VA
| ref | bucket | n | mean(bps) | win | t | p |
|---|---|---|---|---|---|---|
| full_day | VA_above_POC | 25597 | -4 | 46.3% | -0.74 | 4.59e-01 |
| full_day | VA_below_POC | 27581 | +4 | 47.0% | 0.78 | 4.37e-01 |
| full_day | above_VAH | 16864 | +8 | 45.5% | 1.36 | 1.73e-01 |
| full_day | below_VAL | 20011 | +19 | 48.9% | 4.13 | 3.57e-05 |
| full_day | SPREAD(abv-blw) | 36875 | -12 | — | -1.62 | 1.06e-01 |
| tokyo | VA_above_POC | 10860 | +7 | 45.6% | 0.71 | 4.78e-01 |
| tokyo | VA_below_POC | 10824 | -13 | 46.3% | -1.87 | 6.09e-02 |
| tokyo | above_VAH | 31175 | +8 | 45.3% | 1.79 | 7.31e-02 |
| tokyo | below_VAL | 36999 | +9 | 49.0% | 2.50 | 1.23e-02 |
| tokyo | SPREAD(abv-blw) | 68174 | -1 | — | -0.15 | 8.81e-01 |
| london | VA_above_POC | 15458 | -17 | 44.9% | -2.79 | 5.25e-03 |
| london | VA_below_POC | 16030 | -9 | 46.6% | -1.50 | 1.33e-01 |
| london | above_VAH | 27740 | +7 | 45.7% | 1.29 | 1.97e-01 |
| london | below_VAL | 30825 | +24 | 49.2% | 6.23 | <1e-6 |
| london | SPREAD(abv-blw) | 58565 | -18 | — | -2.78 | 5.52e-03 |
| ny | VA_above_POC | 22454 | +8 | 47.3% | 1.42 | 1.57e-01 |
| ny | VA_below_POC | 23047 | +1 | 46.5% | 0.18 | 8.60e-01 |
| ny | above_VAH | 21410 | +6 | 46.5% | 0.97 | 3.33e-01 |
| ny | below_VAL | 23142 | +9 | 47.5% | 2.03 | 4.19e-02 |
| ny | SPREAD(abv-blw) | 44552 | -4 | — | -0.48 | 6.30e-01 |
S2 · Prior-day session shape → next-day return
| session | shape | n | mean(bps) | win | t | p |
|---|---|---|---|---|---|---|
| tokyo | D | 46609 | +5 | 47.0% | 1.41 | 1.59e-01 |
| tokyo | P | 19965 | +11 | 48.5% | 2.04 | 4.10e-02 |
| tokyo | b | 23284 | +2 | 45.6% | 0.39 | 7.00e-01 |
| london | D | 48929 | +4 | 46.8% | 1.21 | 2.24e-01 |
| london | P | 18428 | +22 | 48.2% | 3.91 | 9.10e-05 |
| london | b | 22696 | -4 | 46.3% | -0.73 | 4.67e-01 |
| ny | D | 47654 | +7 | 47.0% | 2.17 | 3.02e-02 |
| ny | P | 19853 | -5 | 45.8% | -0.82 | 4.14e-01 |
| ny | b | 22546 | +12 | 48.0% | 2.28 | 2.25e-02 |
S3 · Prior-day session return (momentum) → next-day return
| session | prior session | n | mean(bps) | win | t | p |
|---|---|---|---|---|---|---|
| tokyo | up | 43601 | +8 | 46.8% | 2.28 | 2.23e-02 |
| tokyo | down | 45929 | +3 | 47.1% | 0.74 | 4.62e-01 |
| london | up | 42432 | +2 | 45.2% | 0.41 | 6.81e-01 |
| london | down | 47307 | +10 | 48.6% | 2.80 | 5.15e-03 |
| ny | up | 43394 | +7 | 45.8% | 2.00 | 4.57e-02 |
| ny | down | 46309 | +4 | 48.1% | 1.29 | 1.98e-01 |
S4 · Prior-day dominant session (by turnover share) → next-day
| session | n | mean(bps) | win | t | p |
|---|---|---|---|---|---|
| tokyo | 26634 | +13 | 47.9% | 2.41 | 1.62e-02 |
| london | 22777 | -11 | 46.5% | -2.36 | 1.83e-02 |
| ny | 40447 | +10 | 46.7% | 2.87 | 4.17e-03 |
S5 · Prior-day session VA width → next-day range
_p-value is a two-sample Welch t on next-day range (wide − narrow). Range is always positive, so a one-sample test vs 0 is not informative._
| session | n narrow | n wide | range narrow | range wide | diff | t | p | ret narrow(bps) | ret wide(bps) |
|---|---|---|---|---|---|---|---|---|---|
| tokyo | 44929 | 44929 | 9.72% | 10.18% | +0.45pp | 3.56 | 3.73e-04 | +1 | +10 |
| london | 45022 | 45031 | 9.93% | 10.01% | +0.08pp | 0.64 | 5.20e-01 | +14 | -3 |
| ny | 45023 | 45030 | 10.16% | 9.78% | -0.38pp | -3.03 | 2.44e-03 | -11 | +22 |
CF · Factual vs counterfactual: what separates UP from DOWN days?
_Within each open-location scenario, feature means for UP days vs DOWN days (all features known at the open). |d| = Cohen's d._
| scenario | feature | n_up | n_dn | mean UP | mean DN | diff | t | p | d |
|---|---|---|---|---|---|---|---|---|---|
| above_VAH | poc_pos | 7666 | 9198 | 0.3811 | 0.3740 | +0.0071 | 2.70 | 6.84e-03 | +0.04 |
| above_VAH | va_width_ratio | 7666 | 9198 | 0.4843 | 0.4790 | +0.0052 | 2.98 | 2.87e-03 | +0.05 |
| above_VAH | upper_share | 7666 | 9198 | 0.4306 | 0.4199 | +0.0107 | 4.93 | <1e-6 | +0.08 |
| above_VAH | open_dist_va | 7666 | 9198 | 0.3944 | 0.4219 | -0.0275 | -4.17 | 3.13e-05 | -0.06 |
| above_VAH | tokyo_poc_pos | 7659 | 9192 | 0.4937 | 0.4803 | +0.0133 | 4.32 | 1.58e-05 | +0.07 |
| above_VAH | tokyo_va_width_ratio | 7659 | 9192 | 0.4774 | 0.4783 | -0.0009 | -0.57 | 5.69e-01 | -0.01 |
| above_VAH | tokyo_upper_share | 7659 | 9192 | 0.4884 | 0.4797 | +0.0087 | 3.65 | 2.64e-04 | +0.06 |
| above_VAH | tokyo_turnover_share | 7659 | 9192 | 0.3311 | 0.3347 | -0.0037 | -1.90 | 5.80e-02 | -0.03 |
| above_VAH | tokyo_ret | 7659 | 9192 | 0.0018 | 0.0016 | +0.0002 | 0.39 | 6.99e-01 | +0.01 |
| above_VAH | london_poc_pos | 7666 | 9198 | 0.4590 | 0.4598 | -0.0008 | -0.25 | 7.99e-01 | -0.00 |
| above_VAH | london_va_width_ratio | 7666 | 9198 | 0.4896 | 0.4881 | +0.0015 | 0.92 | 3.58e-01 | +0.01 |
| above_VAH | london_upper_share | 7666 | 9198 | 0.4783 | 0.4723 | +0.0060 | 2.73 | 6.38e-03 | +0.04 |
| above_VAH | london_turnover_share | 7666 | 9198 | 0.3805 | 0.3753 | +0.0052 | 2.99 | 2.75e-03 | +0.05 |
| above_VAH | london_ret | 7666 | 9198 | 0.0145 | 0.0155 | -0.0010 | -1.79 | 7.37e-02 | -0.03 |
| above_VAH | ny_poc_pos | 7666 | 9198 | 0.5038 | 0.5043 | -0.0005 | -0.16 | 8.75e-01 | -0.00 |
| above_VAH | ny_va_width_ratio | 7666 | 9198 | 0.5014 | 0.5022 | -0.0008 | -0.48 | 6.32e-01 | -0.01 |
| above_VAH | ny_upper_share | 7666 | 9198 | 0.4902 | 0.4909 | -0.0007 | -0.30 | 7.64e-01 | -0.00 |
| above_VAH | ny_turnover_share | 7666 | 9198 | 0.4295 | 0.4223 | +0.0072 | 3.71 | 2.06e-04 | +0.06 |
| above_VAH | ny_ret | 7666 | 9198 | 0.0302 | 0.0335 | -0.0032 | -3.40 | 6.85e-04 | -0.05 |
| above_VAH | prev_atr14_pct | 7666 | 9198 | 0.6975 | 0.7608 | -0.0633 | -7.21 | <1e-6 | -0.11 |
| VA_above_POC | poc_pos | 11859 | 13738 | 0.4410 | 0.4318 | +0.0092 | 3.62 | 2.98e-04 | +0.05 |
| VA_above_POC | va_width_ratio | 11859 | 13738 | 0.4844 | 0.4853 | -0.0010 | -0.69 | 4.87e-01 | -0.01 |
| VA_above_POC | upper_share | 11859 | 13738 | 0.4923 | 0.4850 | +0.0073 | 3.80 | 1.46e-04 | +0.05 |
| VA_above_POC | open_dist_va | 11859 | 13738 | 0.2499 | 0.2545 | -0.0046 | -1.75 | 7.95e-02 | -0.02 |
| VA_above_POC | tokyo_poc_pos | 11839 | 13701 | 0.4952 | 0.4838 | +0.0114 | 4.30 | 1.68e-05 | +0.05 |
| VA_above_POC | tokyo_va_width_ratio | 11839 | 13701 | 0.5007 | 0.5004 | +0.0003 | 0.23 | 8.21e-01 | +0.00 |
| VA_above_POC | tokyo_upper_share | 11839 | 13701 | 0.4968 | 0.4860 | +0.0109 | 5.93 | <1e-6 | +0.07 |
| VA_above_POC | tokyo_turnover_share | 11839 | 13701 | 0.3431 | 0.3420 | +0.0011 | 0.66 | 5.11e-01 | +0.01 |
| VA_above_POC | tokyo_ret | 11839 | 13701 | 0.0011 | -0.0008 | +0.0019 | 3.24 | 1.21e-03 | +0.04 |
| VA_above_POC | london_poc_pos | 11859 | 13738 | 0.4714 | 0.4659 | +0.0055 | 2.11 | 3.45e-02 | +0.03 |
| VA_above_POC | london_va_width_ratio | 11859 | 13738 | 0.4973 | 0.5022 | -0.0050 | -3.69 | 2.21e-04 | -0.05 |
| VA_above_POC | london_upper_share | 11859 | 13738 | 0.4798 | 0.4786 | +0.0011 | 0.65 | 5.19e-01 | +0.01 |
| VA_above_POC | london_turnover_share | 11859 | 13738 | 0.4050 | 0.4019 | +0.0031 | 2.01 | 4.44e-02 | +0.03 |
| VA_above_POC | london_ret | 11859 | 13738 | 0.0043 | 0.0048 | -0.0005 | -0.91 | 3.65e-01 | -0.01 |
| VA_above_POC | ny_poc_pos | 11859 | 13738 | 0.4906 | 0.4946 | -0.0041 | -1.65 | 9.93e-02 | -0.02 |
| VA_above_POC | ny_va_width_ratio | 11859 | 13738 | 0.4770 | 0.4764 | +0.0006 | 0.50 | 6.18e-01 | +0.01 |
| VA_above_POC | ny_upper_share | 11859 | 13738 | 0.4884 | 0.4948 | -0.0063 | -3.37 | 7.43e-04 | -0.04 |
| VA_above_POC | ny_turnover_share | 11859 | 13738 | 0.4321 | 0.4363 | -0.0042 | -2.34 | 1.95e-02 | -0.03 |
| VA_above_POC | ny_ret | 11859 | 13738 | 0.0081 | 0.0091 | -0.0010 | -1.79 | 7.41e-02 | -0.02 |
| VA_above_POC | prev_atr14_pct | 11859 | 13738 | 0.7049 | 0.7499 | -0.0449 | -5.65 | <1e-6 | -0.07 |
| VA_below_POC | poc_pos | 12973 | 14608 | 0.5293 | 0.5274 | +0.0019 | 0.76 | 4.46e-01 | +0.01 |
| VA_below_POC | va_width_ratio | 12973 | 14608 | 0.4878 | 0.4875 | +0.0003 | 0.20 | 8.39e-01 | +0.00 |
| VA_below_POC | upper_share | 12973 | 14608 | 0.4964 | 0.4949 | +0.0015 | 0.80 | 4.24e-01 | +0.01 |
| VA_below_POC | open_dist_va | 12973 | 14608 | -0.2712 | -0.2543 | -0.0168 | -6.57 | <1e-6 | -0.08 |
| VA_below_POC | tokyo_poc_pos | 12944 | 14556 | 0.4965 | 0.4879 | +0.0086 | 3.39 | 6.98e-04 | +0.04 |
| VA_below_POC | tokyo_va_width_ratio | 12944 | 14556 | 0.4978 | 0.4991 | -0.0013 | -1.01 | 3.14e-01 | -0.01 |
| VA_below_POC | tokyo_upper_share | 12944 | 14556 | 0.4966 | 0.4910 | +0.0056 | 3.13 | 1.73e-03 | +0.04 |
| VA_below_POC | tokyo_turnover_share | 12944 | 14556 | 0.3452 | 0.3412 | +0.0040 | 2.42 | 1.56e-02 | +0.03 |
| VA_below_POC | tokyo_ret | 12944 | 14556 | -0.0005 | -0.0010 | +0.0006 | 1.00 | 3.17e-01 | +0.01 |
| VA_below_POC | london_poc_pos | 12973 | 14608 | 0.5083 | 0.4997 | +0.0087 | 3.44 | 5.79e-04 | +0.04 |
| VA_below_POC | london_va_width_ratio | 12973 | 14608 | 0.5009 | 0.5033 | -0.0024 | -1.85 | 6.37e-02 | -0.02 |
| VA_below_POC | london_upper_share | 12973 | 14608 | 0.4973 | 0.4932 | +0.0041 | 2.44 | 1.47e-02 | +0.03 |
| VA_below_POC | london_turnover_share | 12973 | 14608 | 0.4031 | 0.4091 | -0.0060 | -4.08 | 4.44e-05 | -0.05 |
| VA_below_POC | london_ret | 12973 | 14608 | -0.0044 | -0.0032 | -0.0012 | -2.27 | 2.30e-02 | -0.03 |
| VA_below_POC | ny_poc_pos | 12973 | 14608 | 0.4921 | 0.4994 | -0.0073 | -3.06 | 2.22e-03 | -0.04 |
| VA_below_POC | ny_va_width_ratio | 12973 | 14608 | 0.4793 | 0.4754 | +0.0038 | 3.24 | 1.20e-03 | +0.04 |
| VA_below_POC | ny_upper_share | 12973 | 14608 | 0.4869 | 0.4962 | -0.0093 | -5.18 | <1e-6 | -0.06 |
| VA_below_POC | ny_turnover_share | 12973 | 14608 | 0.4301 | 0.4356 | -0.0055 | -3.23 | 1.23e-03 | -0.04 |
| VA_below_POC | ny_ret | 12973 | 14608 | -0.0080 | -0.0045 | -0.0035 | -6.74 | <1e-6 | -0.08 |
| VA_below_POC | prev_atr14_pct | 12973 | 14608 | 0.7397 | 0.7499 | -0.0102 | -1.12 | 2.61e-01 | -0.01 |
| below_VAL | poc_pos | 9788 | 10223 | 0.6042 | 0.6076 | -0.0034 | -1.45 | 1.48e-01 | -0.02 |
| below_VAL | va_width_ratio | 9788 | 10223 | 0.4837 | 0.4793 | +0.0044 | 2.77 | 5.60e-03 | +0.04 |
| below_VAL | upper_share | 9788 | 10223 | 0.5593 | 0.5649 | -0.0056 | -2.86 | 4.30e-03 | -0.04 |
| below_VAL | open_dist_va | 9788 | 10223 | -202948.7255 | -0.4010 | -202948.3245 | -1.00 | 3.17e-01 | -0.01 |
| below_VAL | tokyo_poc_pos | 9770 | 10197 | 0.4900 | 0.4900 | -0.0001 | -0.03 | 9.73e-01 | -0.00 |
| below_VAL | tokyo_va_width_ratio | 9770 | 10197 | 0.4728 | 0.4695 | +0.0033 | 2.26 | 2.37e-02 | +0.03 |
| below_VAL | tokyo_upper_share | 9770 | 10197 | 0.4941 | 0.4929 | +0.0011 | 0.50 | 6.14e-01 | +0.01 |
| below_VAL | tokyo_turnover_share | 9770 | 10197 | 0.3543 | 0.3476 | +0.0067 | 3.59 | 3.27e-04 | +0.05 |
| below_VAL | tokyo_ret | 9770 | 10197 | -0.0002 | 0.0011 | -0.0013 | -2.50 | 1.23e-02 | -0.04 |
| below_VAL | london_poc_pos | 9788 | 10223 | 0.5174 | 0.5151 | +0.0023 | 0.81 | 4.18e-01 | +0.01 |
| below_VAL | london_va_width_ratio | 9788 | 10223 | 0.4930 | 0.4917 | +0.0013 | 0.90 | 3.69e-01 | +0.01 |
| below_VAL | london_upper_share | 9788 | 10223 | 0.5008 | 0.5002 | +0.0006 | 0.28 | 7.79e-01 | +0.00 |
| below_VAL | london_turnover_share | 9788 | 10223 | 0.3784 | 0.3860 | -0.0076 | -4.64 | 3.48e-06 | -0.07 |
| below_VAL | london_ret | 9788 | 10223 | -0.0154 | -0.0139 | -0.0015 | -3.22 | 1.28e-03 | -0.05 |
| below_VAL | ny_poc_pos | 9788 | 10223 | 0.4863 | 0.4809 | +0.0054 | 1.84 | 6.55e-02 | +0.03 |
| below_VAL | ny_va_width_ratio | 9788 | 10223 | 0.5097 | 0.5007 | +0.0090 | 5.99 | <1e-6 | +0.08 |
| below_VAL | ny_upper_share | 9788 | 10223 | 0.4866 | 0.4911 | -0.0045 | -2.29 | 2.21e-02 | -0.03 |
| below_VAL | ny_turnover_share | 9788 | 10223 | 0.4092 | 0.4121 | -0.0029 | -1.53 | 1.25e-01 | -0.02 |
| below_VAL | ny_ret | 9788 | 10223 | -0.0285 | -0.0263 | -0.0022 | -4.37 | 1.26e-05 | -0.06 |
| below_VAL | prev_atr14_pct | 9788 | 10223 | 0.7759 | 0.7595 | +0.0164 | 1.54 | 1.23e-01 | +0.02 |
CF-TREES · Joint conditions separating UP from DOWN
========================================================================
Scenario: above_VAH | n=16851 | base rate=0.545 | train acc=0.564 | OOS acc=0.550 | leaves=8
top features: {'ny_ret': 0.42243803814801856, 'prev_atr14_pct': 0.26646049336725486, 'london_ret': 0.10849773405615512, 'tokyo_ret': 0.09347070055305111, 'london_va_width_ratio': 0.07053270437142942, 'ny_va_width_ratio': 0.03860032950409106, 'poc_pos': 0.0, 'va_width_ratio': 0.0}
|--- ny_ret <= -0.00
| |--- london_ret <= -0.02
| | |--- ny_va_width_ratio <= 0.42
| | | |--- class: 1
| | |--- ny_va_width_ratio > 0.42
| | | |--- class: 0
| |--- london_ret > -0.02
| | |--- london_va_width_ratio <= 0.52
| | | |--- class: 0
| | |--- london_va_width_ratio > 0.52
| | | |--- class: 0
|--- ny_ret > -0.00
| |--- prev_atr14_pct <= 0.44
| | |--- tokyo_ret <= -0.02
| | | |--- class: 0
| | |--- tokyo_ret > -0.02
| | | |--- class: 1
| |--- prev_atr14_pct > 0.44
| | |--- ny_ret <= 0.10
| | | |--- class: 0
| | |--- ny_ret > 0.10
| | | |--- class: 0
========================================================================
Scenario: VA_above_POC | n=25540 | base rate=0.536 | train acc=0.545 | OOS acc=0.497 | leaves=8
top features: {'tokyo_turnover_share': 0.47760811907654627, 'tokyo_upper_share': 0.190851548337765, 'london_turnover_share': 0.13430932715768032, 'london_poc_pos': 0.08585220445455517, 'london_ret': 0.06295583463540175, 'tokyo_ret': 0.0484229663380515, 'poc_pos': 0.0, 'va_width_ratio': 0.0}
|--- tokyo_turnover_share <= 0.21
| |--- london_turnover_share <= 0.44
| | |--- london_ret <= -0.04
| | | |--- class: 0
| | |--- london_ret > -0.04
| | | |--- class: 0
| |--- london_turnover_share > 0.44
| | |--- tokyo_ret <= -0.00
| | | |--- class: 1
| | |--- tokyo_ret > -0.00
| | | |--- class: 0
|--- tokyo_turnover_share > 0.21
| |--- tokyo_turnover_share <= 0.56
| | |--- tokyo_upper_share <= 0.42
| | | |--- class: 0
| | |--- tokyo_upper_share > 0.42
| | | |--- class: 1
| |--- tokyo_turnover_share > 0.56
| | |--- london_poc_pos <= 0.47
| | | |--- class: 0
| | |--- london_poc_pos > 0.47
| | | |--- class: 0
========================================================================
Scenario: VA_below_POC | n=27500 | base rate=0.529 | train acc=0.555 | OOS acc=0.526 | leaves=8
top features: {'open_dist_va': 0.2892899966369089, 'tokyo_upper_share': 0.21712938915988533, 'ny_upper_share': 0.1913642445606463, 'ny_ret': 0.12223425155135473, 'tokyo_poc_pos': 0.10756088495385614, 'london_va_width_ratio': 0.07242123313734862, 'poc_pos': 0.0, 'va_width_ratio': 0.0}
|--- open_dist_va <= -0.35
| |--- ny_upper_share <= 0.61
| | |--- tokyo_upper_share <= 0.25
| | | |--- class: 0
| | |--- tokyo_upper_share > 0.25
| | | |--- class: 1
| |--- ny_upper_share > 0.61
| | |--- tokyo_upper_share <= 0.62
| | | |--- class: 0
| | |--- tokyo_upper_share > 0.62
| | | |--- class: 0
|--- open_dist_va > -0.35
| |--- tokyo_poc_pos <= 0.59
| | |--- ny_ret <= -0.06
| | | |--- class: 1
| | |--- ny_ret > -0.06
| | | |--- class: 0
| |--- tokyo_poc_pos > 0.59
| | |--- london_va_width_ratio <= 0.65
| | | |--- class: 0
| | |--- london_va_width_ratio > 0.65
| | | |--- class: 1
========================================================================
Scenario: below_VAL | n=19967 | base rate=0.511 | train acc=0.577 | OOS acc=0.496 | leaves=8
top features: {'tokyo_turnover_share': 0.22303498395007368, 'upper_share': 0.1705156002685089, 'tokyo_ret': 0.15874304152173455, 'london_turnover_share': 0.15487891038800045, 'ny_turnover_share': 0.12149812357395297, 'london_ret': 0.10285562960857356, 'ny_ret': 0.06847371068915592, 'poc_pos': 0.0}
|--- tokyo_turnover_share <= 0.36
| |--- tokyo_ret <= -0.01
| | |--- london_turnover_share <= 0.52
| | | |--- class: 1
| | |--- london_turnover_share > 0.52
| | | |--- class: 0
| |--- tokyo_ret > -0.01
| | |--- ny_turnover_share <= 0.63
| | | |--- class: 0
| | |--- ny_turnover_share > 0.63
| | | |--- class: 1
|--- tokyo_turnover_share > 0.36
| |--- upper_share <= 0.69
| | |--- london_ret <= -0.01
| | | |--- class: 1
| | |--- london_ret > -0.01
| | | |--- class: 0
| |--- upper_share > 0.69
| | |--- ny_ret <= -0.05
| | | |--- class: 1
| | |--- ny_ret > -0.05
| | | |--- class: 0
_Report auto-generated by src/report.py. Re-run src/analysis.py + src/report.py after a fetch to refresh._
Method & caveats
Data
Bybit V5 public API, 15m OHLCV, all USDT-margined perpetuals (741 verified), tiered by 24h turnover & listing age. Headline tier: turnover ≥ $1M and listed ≥ 60 days (230 symbols). ~500 days of history per symbol, resumable caching.
Profiles
UTC 00:00–00:00 calendar days; notional-weighted binning (traded turnover, not contracts); 70% value area via classic POC-outward expansion. Session profiles for Tokyo / London / New York. All returns are open→close in basis points; net = mean − 10 bps round-trip cost.
Protocol
- Hypothesis tests with raw p-values (not Bonferroni-adjusted), per-symbol consistency, and out-of-sample splits. A finding requires in-sample p, OOS p, and the same sign in both halves.
- Effects are small (10–25 bps — the size of the spread); few survive costs.
- 522 days = one regime. Structure can change; treat as historical statistics.
Reproduce
All code is in the repo. End-to-end (fetch → features → all analyses → report → site → commit → push):
./run_pipeline.sh # features → analysis → report → site
PUSH_RESULTS=1 ./run_pipeline.sh # also push to origin
python src/make_site.py # regenerate site only
Full methodology: docs/methodology.md · Master plan: PLAN.md · Raw datasets: results/