finding · findings/evolution/shared_data/README.md
This is the front door to a folder that defines a single, frozen set of real market-data slices. Instead of each experiment grabbing its own data its own way, they all read from this one agreed-upon definition — so the answers stay comparable and reproducible.
The folder is the hub-and-spoke entry point for the shared data layer: a short overview page (this one) that links out to deeper "spoke" documents. It holds a central, version-locked definition of real data slices that every orthogonality-related audit reads from. A "slice" here is one rectangle of data: a specific trading symbol, at a specific sensitivity setting, over a specific two-month calendar window.
Two different families of audits both feed off this same grid of slices:
What lives in the folder:
The whole point of an orthogonality study is to trust the comparison. If every experiment pulled data in a slightly different way, you could never tell whether two results disagreed because of the idea being tested or because of mismatched inputs. By locking the data definition once and having every audit read from it, the folder removes that ambiguity. It is deliberately a "non-audit" folder: it holds the raw material and its provenance, but it issues no verdicts of its own — the judgments happen in the sibling audit folders that build on top of it.
Originally the plan was fetch-to-file-then-read: pull each slice down into a local Parquet file (a compact columnar data file) and read from that. That fetcher (fetch_multi_slice.py) was never actually run — its index file manifest.json is empty — and it was removed. The replacement, orthogonality_probe.py, queries each slice live and directly from ClickHouse (the fast analytics database where the bar data is stored, running on the "bigblack" server). There is no intermediate file step anymore.
SELECT queries and never writes to the database. The locked pre-spec.md stays the single source of truth for what's in scope, and the probe simply mirrors it.For each slice it computes Axis-1 orthogonality using two fast statistics:
It runs across all slices and reports, per candidate feature, how robust that "newness" looks from one slice to the next — i.e. is the feature consistently novel, or only in a lucky window?
python findings/evolution/shared_data/orthogonality_probe.py --smoke # one-cell sanity check python findings/evolution/shared_data/orthogonality_probe.py # full 2021+ grid
The --smoke run is a quick one-cell sanity check; the full run sweeps the whole grid. Per-candidate results land in a results/ folder that is deliberately kept out of version control.
Reading the grid: 21 symbol/sensitivity combinations × 21 time windows = 441 cells. 3 cells are empty, leaving 438 with real data; of those, 24 cells (mostly at the most-sensitive 750 setting) hold too few bars to be trusted, so they're flagged and left out of the averages rather than silently included.
| dimension | what's in it | plain meaning |
|---|---|---|
| Substrate | Crypto only — table opendeviationbar_cache.open_deviation_bars | One source: the crypto bar database. Forex was removed in v2. |
| Symbols | BTCUSDT · ETHUSDT · BNBUSDT · LTCUSDT · ADAUSDT · XRPUSDT | Six major crypto pairs (Bitcoin, Ethereum, etc.). |
| Thresholds | 100, 250, 500, 750 dbps per symbol; ETH only 100 & 250; LTC@100 dropped (broken) | The sensitivity dial for forming a bar. 1 dbps = 0.001%, so 250 dbps = a 0.25% price move. Smaller number = more sensitive = more bars. |
| Combos | 21 (symbol, threshold) pairs | Not every symbol uses every setting, so it's 21 valid pairs, not 24. |
| Time slices | 21 windows, slice01…slice21, 2021-01 → 2026-02 | Each slice is a 2-month calendar window. |
slice22/23/24) are excluded because Bitcoin and Ethereum bars in this dataset only start on 2021-01-01 — there's no usable 2020 data to slice.ETHUSDT@100 for slices 01/02/03 are empty because that data series ends 2025-06-17.EURUSD currency pair, from fxview_cache.forex_bars) can be reinstated later via the scope-expansion options; its availability findings are archived separately.Each spoke is a focused document you click into from the hub:
| spoke | what it's for | when to read |
|---|---|---|
purpose.md | Why this folder exists; how it relates to the two sibling audits | Read second |
slicing-methodology.md | The reasoning behind 24 × 2-month slices, alignment with Terry's design, bar-density math, symbol choices | To understand why the slicing looks this way |
pre-spec.md LOCKED | The frozen scope (v2, crypto-only): active windows, symbols, threshold tiers | To know what's IN the dataset |
scope-expansion-options.md | The broader scopes (Options B and C) considered — a restore reference if scope ever widens | To add symbols / forex / thresholds |
orthogonality_probe.py PROBE | The canonical program: reads each slice live, measures Axis-1 orthogonality, reports cross-slice robustness | To measure orthogonality across slices |
orthogonality_probe.md | Plain-English guide to the probe (read-only contract, floors, candidate registry) | Read before running the probe |
data-quality-notes.md | Per-cell quirks: LTC@100 empty, BTC/ETH start 2021-01-01, ETH@100 ends 2025-06-17 | Read before trusting any cell |
slicing-robustness-findings.md | Robustness map of all 441 cells plus the slicing decisions and smoke-test validation | To gauge the slicing's robustness |
manifest.json / manifest.md | The old index schema from the Parquet design | Historical reference only |
pre-spec.md for the locked scope and data-quality-notes.md for which cells are actually populated.orthogonality_probe.md, then run the probe on the bigblack server (read-only).2026-05-16-orthogonality-measurement-instruments) and the candidate-feature audit (2026-05-08-orthogonal-features-btcusd) — consume the same slice grid. Run the probe live rather than reading pre-fetched files, and check purpose.md for the boundary rules.