Software companion
Where Is the Signal? A Scale Scan of BTCUSDT Perpetual Futures for Distributional Forecasting
Overview
The scan asks where learnable signal exists at all across timeframes, horizons and target definitions, and its credibility depends on being small enough to audit and fixed before it runs. The whole scanner is eight modules; the probes are intentionally modest networks rather than tuned models, because the question is whether a cell contains signal, not how much a large model could extract from it.
Pre-registration is in the configuration file. Verdict thresholds are written down with the grid, and a cell counts as carrying signal only when validation and test both clear them — a rule added specifically because earlier internal studies produced cells that looked strong on validation and vanished on test. The horizon grids are chosen so they overlap in physical time across timeframes, which is what lets representation scale be compared at a fixed real-world horizon rather than at a fixed number of bars.
Its outputs are consumed directly by the comparative study that follows: the results table it writes is the same file the downstream manuscript ingests, and its verdicts set that study’s targets, scales and horizons.
Implementation
- Grid
- Six timeframes from one minute to one day, each with its own horizon set, overlapping in physical time
- Targets
- Return quantiles, direction, log realized volatility, and maximum favourable and adverse path excursions from highs and lows
- Probes
- Small GPU probes — monotone quantile, regression and direction — at 40 epochs, batch 2048, hidden width 128, patience 6
- Thresholds
- Pre-registered: quantile skill above 0.02, volatility R² above 0.05, directional AUC above 0.52, cleared on validation and test
- Split
- 70% train, 10% validation, 20% test, chronological
- Multiscale check
- A 15-minute base augmented with leak-safe 1-hour and 4-hour features, scored as a delta
Components
sss/data.py- The canonical-store loader, including the tolerant as-of funding join
sss/features.py- Causal per-timeframe features and the leak-safe coarser-timeframe alignment, where auxiliary features become available only at the auxiliary bar’s close
sss/targets.py- The five target families, with path extremes built from highs and lows rather than closes
sss/probes.py- The small GPU probes and the skill scores against the train-marginal baseline
sss/scan.py- Grid orchestration, verdict application and artifact writing
configs/scan.yaml- The full grid and the pre-registered thresholds, in one file
Scan
loadRead the canonical bar and funding store for each timeframe.featurizeBuild causal features, and leak-safe coarser-timeframe features for the fusion check.targetConstruct the five target families at each horizon.probeFit a small probe per cell and score it against the train marginal.verdictApply the pre-registered thresholds, requiring validation and test to agree.emitWrite the results table the downstream study and its manuscript consume.
Reproducibility and validation
- A synthetic generator with persistent volatility and coin-flip direction is part of the test suite: the scanner must report volatility and quantile signal and no directional signal, or it is considered broken.
- The leak-safe coarser-timeframe alignment is tested directly, asserting that auxiliary features are unavailable before the auxiliary bar closes.
- Target definitions are verified against brute-force loops, so a vectorized path-extreme calculation cannot drift from its definition.
- Thresholds are in the configuration alongside the grid, so the verdict rule is visible in the same diff as the experiment.
- Horizons overlap in physical time across timeframes, so a comparison between scales is not confounded by comparing different real durations.
Availability
Not publicly released. The scanner itself is small and has few dependencies, but it reads a multi-year canonical perpetual-futures store built elsewhere in the same workspace, which is too large to publish alongside it.