Method and data
This page explains where the forecasts come from, which data the process uses, and which checks keep the score honest. When something fails, we show it instead of filling the gap.
Data path
The site does not run the model or touch parquet. If the process fails, you see the last snapshot with its timestamp and expiry; the client does not fill anything in by itself.
Method parts
Data
Binance spot OHLCV via CCXT. The in-progress candle is never used. Every run checks duplicates and gaps before computing; if data fails the checks, no new snapshot is published.
Features
Returns over 1-12 bars, RSI, ATR, realized volatility, distance to the 20/50/200 EMAs, volume z-score, position in the 20-bar channel, UTC calendar, and BTC returns as context for ETH and XRP. No imputation: warm-up rows are dropped.
Models
LightGBM and logistic regression are compared with five baselines: persistence, reversion, momentum, base rate and chance. A model only counts if it clears the best baseline.
Calibration
Raw probabilities are adjusted with isotonic regression on a reserved train segment. A published 60% should be read literally: across similar cases, we expect it to happen about 6 times out of 10.
Walk-forward evaluation
Train on 12+ months, predict the next month, roll forward and repeat. Each of the 547 test days was calculated using strictly prior data, with a purge between train and test. The hit rate compares the probability's implied direction with the period's actual close; we also publish accuracy on the confident subset (p ≥ 55% or ≤ 45%), which is what the pre-registered test tracks. On the home page, public conviction is low inside 45-55%, medium at 55-60% or 40-45%, and high at p ≥ 60% or ≤ 40%.
Anti-cheating controls
Three tests run inside the harness itself: shifting targets must sink accuracy to ~50%; adding new candles cannot change the past; and a synthetic series with a known pattern must be flagged viable. If any check fails, publication waits.
Statistics
Consecutive days are not independent: intervals and p-values use block bootstrap. Success criteria were written before looking at results.
Economic simulation
The simulation applies a fixed rule defined before looking at results and subtracts fees and slippage. It is used only to measure whether a forecast would have survived real frictions.
Support & resistance
2-2 fractals on two timeframes (90 days of 4h + 1 year of daily), clustered by ATR distance and weighted by touches and recency. The dashboard reclassifies them against the live price: if price moves through a zone, its reading changes.
Operations
The local process can re-run every 30 minutes: new candles, forecast, levels and verification. Publication stays an explicit step, separated from data refresh.
Change discipline
Any change that affects data, features, models, calibration, ranges, thresholds, cadence or evaluation must update this page in the same deployment. If this page does not describe the active process, the deployment is not considered closed.
How reliability can improve
- Freshness guard: block publication when the snapshot lags the expected latest closed candle or a critical parquet is missing.
- Exchange cross-check: compare Binance close against Kraken before publication and mark degradation when divergence clears the documented threshold.
- Calibrated ranges: evaluate coverage and sharpness against an ATR baseline; improve expected volatility before claiming more directional skill.
- Drift monitor: track Brier, ECE and recent feature distributions; when they move out of band, publish degraded mode.
- Change ledger: each pipeline version keeps a code hash, features version, deployment date and public summary of the change.
The scoreboard, today
Three rounds run so far (technicals; + calendar; + derivatives: funding and taker flow): overall accuracy still sits around 50% and no cell clears the pre-registered criteria. One lead is under validation: when the model is confident (p ≥ 60%), ETH/XRP accuracy has run 54–59% on small samples. It is being validated with a pre-registered 90-day test — same judge, no moving goalposts.