finding · findings/evolution/shared_data/slicing-methodology.md
A guided tour of how the shared crypto market-data pool is cut into ~441 testable pieces — across time, across coins, and across "how big a price move counts as a bar" — and the plain-English reasoning behind every cut.
The shared data pool is the central data layer that every research "probe" reads from. Rather than test a hypothesis on one blob of data, we slice the available history into a clean grid of cells. Each cell is one self-contained sample. Slicing along three independent ("orthogonal" — meaning they don't interfere with each other) directions lets us ask three separate reliability questions at once.
As of 2026-05-30 the pool is crypto-only (forex was removed — see below). The data lives in ClickHouse (a fast analytical database) on the bigblack server, and is read read-only, on demand — there is no intermediate file-export step.
full or spearman_only.The cross-product is 21 (symbol, threshold) combinations × 21 time slices = 441 cells, of which 438 actually contain data.
Each axis answers a different "would this verdict hold up?" question:
Varying the verdict across this much real, varied data is our complete substitute for synthetic-data calibration — the project's policy is to never use made-up data, so instead we lean on the diversity of real data.
The schedule originally defined 24 windows, but the three 2020 windows (slice22/23/24) were dropped because BTC/ETH bars don't exist before 2021 — those cells would be empty or ragged. So the active count is K = 21.
The 24-fold number is inherited from Terry's walk-forward optimization (WFO — a backtesting method that repeatedly trains on a past window and tests on the next), which uses 24 folds as its working standard. His own note records:
"Doubled folds from 12 to 24 ... TAMRS-lite wins 5/6 metrics ... its win is robust across 10, 12, 24 folds on three different data sources."
Matching that K keeps this audit aligned with his cross-audit convention.
When you average many per-slice numbers into one summary, the uncertainty (standard error) shrinks roughly as 1/√K — i.e. more slices = a steadier average, with diminishing returns. The table shows that K=24 sits right at the "sweet spot" where adding more slices barely helps:
| K (number of slices) | Standard-error multiplier (vs K=10) | Reliability of the lower quartile |
|---|---|---|
| 10 | 1.00 (baseline) | crude — position 3 of 10 |
| 20 | 0.71 | better — position 5-6 of 20 |
| 24 | 0.65 | robust — position 6-7 of 24 |
| 30 | 0.58 | strong — position 8 of 30 |
| 50 | 0.45 | diminishing returns from here |
At the active K=21 the multiplier is ~0.69 vs K=24's 0.65 — a negligible precision loss. Going to K=30 buys only a marginal gain; K=50 buys almost nothing.
24 windows × 2 months = 48 months of data needed. The available history is ~78 months (2020-04 → 2026-02 ≈ 6.5 years), so the schedule uses 62% of the calendar.
| Constraint | Status |
|---|---|
| Calendar coverage | 48 / 78 months = 62% of available calendar in use |
| Adjacent-slice gap | Exactly 1 calendar month. Every 3rd month of each quarter (Mar / Jun / Sep / Dec) is skipped by design. Example: one slice ends Nov 30 and the next starts Jan 1, skipping December. |
| Regime-overlap risk | Moderate — a 1-month gap is shorter than many crypto regimes, so adjacent same-quarter slices often share a macro regime. No-overlap is guaranteed; regime-independence is NOT. Verdicts that need independence should treat the slices as ~12-16 effective regime samples. |
| Earliest slice fits all symbols | The earliest scheduled slice (slice24, starting 2020-04-01) falls after all 6 default symbols were listed. |
K=24 is the upper bound before you'd have to sacrifice something:
This is a bar-density trade-off: each window must contain enough bars for the statistics to converge, even at the sparsest threshold and in the quietest months. Here's roughly how many bars a window yields for BTC at each threshold:
| Threshold | Approx bars/day (BTC) | 1 month | 2 months | 3 months |
|---|---|---|---|---|
| 100 dbps | 500–3,000 | 15k–90k | 30k–180k | 45k–270k |
| 250 dbps | 150–800 | 4.5k–24k | 9k–48k | 13.5k–72k |
| 500 dbps | 50–200 | 1.5k–6k | 3k–12k | 4.5k–18k |
| 750 dbps | 20–100 | 0.6k–3k | 1.2k–6k | 1.8k–9k |
Now compare against the minimum sample size (N) each measurement tool needs to give a stable answer. These tools measure how strongly two things relate — from simple linear correlation up to multi-variable information measures:
| Metric | What it measures (plain words) | N needed |
|---|---|---|
| Pearson r, Spearman ρs | straight-line / rank correlation between two variables | ≥ 100 |
| Chatterjee ξn | a modern correlation that catches non-linear dependence | ≥ 1,000 |
| HSIC / HSICAgg | kernel-based "any kind of dependence" test | ≥ 1,000 |
| dCor | distance correlation (non-linear) | ≥ 500 |
| MIC | maximal information coefficient | ≥ 1,000 |
| CODEC / FOCI | conditional-dependence / feature selection | ≥ 1,000 |
| O-information (triples) | shared information among three variables | ≥ 2,000 |
Putting the two together at the sparsest threshold (750 dbps), the window choice falls out cleanly:
| Window | 750 dbps worst case | Verdict |
|---|---|---|
| 1 month | ~600 bars | ❌ below the Chatterjee floor in quiet months |
| 2 months | ~1,200 bars | ✅ clears Chatterjee; marginal for O-information |
| 3 months | ~1,800 bars | ✅ comfortable — but uses 50% more calendar |
The six coins were chosen to span market "caps" (sizes) and categories, while staying inside the symbols that have full data coverage:
| Symbol | Trade-layer effective_start | Included? | Reason |
|---|---|---|---|
| BTCUSDT | 2018-01-16 | ✅ | enabled, live-stream, full 4-threshold (large-cap) |
| ETHUSDT | 2018-01-16 | ✅ | enabled, live-stream; thresholds [100, 250] only |
| BNBUSDT | 2018-01-16 | ✅ | full 4-threshold, mid-cap diversity |
| LTCUSDT | 2018-01-16 | ✅ | full 4-threshold, alt-cap diversity |
| ADAUSDT | listing 2018-04-17 | ✅ | full 4-threshold; already in prior robustness work |
| XRPUSDT | listing 2018-05-04 | ✅ | full 4-threshold, payment-token category |
Going from 6 → 16 crypto symbols would add ~900 more database fetches (~15 min), ~3–7 GB more disk on bigblack, and stronger cross-symbol evidence (16 coins agreeing is more credible than 6). That's catalogued as Option C in the expansion options doc. The default is deliberately the minimal scope; expanding is a single pre-spec amendment away.
Version 1 of the pool included EURUSD at 5 dbps as a cross-asset-class anchor. Version 2 removed forex entirely (operator directive, 2026-05-30) — the layer is crypto-only "for now." The forex availability probe and the reintroduction catalogue are preserved in the archived forex-availability-probe.md and scope-expansion-options.md for a later comeback.
Because bar density falls as the threshold rises, the sparsest threshold (750 dbps) routinely drops below the 1,000-bar floor the demanding metrics need. So thresholds are tiered by which metrics they can support:
| Threshold | Tier | 2-month bars (worst → median) | Conditional metrics (h_norm / Chatterjee / CODEC) |
|---|---|---|---|
| 100 | full | 14k → 130k | reliable |
| 250 | full | 2.6k → 20k | reliable |
| 500 | full | 0.7k → 5k | reliable (rare sub-floor cell flagged) |
| 750 | spearman_only | 0.24k → 2.5k | unreliable — BTC/BNB@750 miss the floor in ~half the slices |
So at 750 dbps, the simple Spearman rank correlation (which only needs ~100 points) stays valid, but the heavier conditional metrics (needing ≥1,000) are excluded wherever a cell misses the floor. The alternative — a special 3-month window just for 750 dbps — was rejected because it would break the clean, uniform 2-month / non-overlapping grid. Tiering keeps the grid tidy and is honest about which metrics each cell supports.
Each of the 24 scheduled windows was chosen to land in a distinct market-regime context. The governing principles:
slice_start_iso, slice_end_iso).no_overlap_proof assertion in the fetcher.manifest.json record per cell).close_time_us is the key; ingestion time is observability-only).| Decision | Value | Justification |
|---|---|---|
| K (active slices) | 21 (24 scheduled − 3 for 2020) | Precision sweet spot; 2020 dropped (no BTC/ETH bars). ~7 effective regime epochs. |
| Window size | 2 calendar months | Smallest window bar-density-safe to 500 dbps; 750 tiered spearman_only. |
| Calendar span | 2021-01 → 2026-02 | Span where all 6 crypto symbols have bar-layer coverage. |
| Crypto symbols | 6: BTC, ETH, BNB, LTC, ADA, XRP (USDT) | Cross-cap variety. |
| Crypto thresholds | [100, 250, 500, 750] per symbol | ETH [100, 250]; LTC drops 100 (broken). |
| Threshold tiers | 100/250/500 = full; 750 = spearman_only | 750 below the 1,000-bar conditional-metric floor. |
| Forex | removed (v2) | crypto-only for now; see Changelog. |
Total cells = 441 (438 populated). There is no Parquet export step — the probe reads each cell read-only from ClickHouse on demand. Expansion paths (including forex reintroduction) stay parked in scope-expansion-options.md; escalating scope is a pre-spec version bump plus a probe-constant update.