Both ride on the volatility payload rather than taking endpoints of their
own: they read the same frame and the same 33 features, so each costs one
forward pass instead of another Binance page. A missing artifact yields
None and the row is omitted, rather than rendering dashes that look like a
failure.
Live, per asset, with each using its own horizon, sequence length and
threshold:
BTC rising 90.65% (12h) jump 65.21% (24h)
ETH rising 93.56% (12h) jump 49.95% (24h)
ADA rising 33.40% (1h) jump 42.46% (24h)
Each row prints its own baseline name and value beside its accuracy. The
first version of predict_sequence_regime took whichever baseline appeared
first and preferred the majority class, which reported jump risk at +19.37
points when its real margin over persistence is +14.76 -- a four-point
overstatement in the model's favour. It now takes the harder of the two,
which is correct for both targets automatically: volatility-rises binds on
majority (persistence is 34%, …
Serve the VAE+Transformer volatility models, and show seed disagreement
All three assets now score their next-24h volatility regime with the
VAE+Transformer artifacts trained on Colab, replacing the per-row models
including BTC's gradient-boosted one. Held-out ROC-AUC over 4,639 rows:
BTC 0.7761 (was 0.7560) seq_len 168 threshold 0.52
ETH 0.7729 (was 0.7560) seq_len 48 threshold 0.56
ADA 0.8145 (was 0.7874) seq_len 168 threshold 0.70
Each asset carries its own sequence length, feature order, scaler and
threshold, so all four come from the metadata rather than constants.
Predictions are the mean over five seeds. That mean can cross the
threshold while most seeds sit on the other side of it, so the panel now
reports how many seeds agree with the call and marks a split ensemble as
low confidence rather than letting the averaged score read as settled.
BTC's current candle is exactly this case: 2 of 5 seeds, scores spanning
38.3% to 92.0%.
The frame is deepened to MIN_HISTORY_HOURS + 192 because a 168-hour
window would otherwi…
20 days ago
Bring ETH and ADA online with their own volatility models
run_multi_asset_volatility.py showed the result holds on all three coins. This
turns that into live models, closing the gap where the thesis covers BTC, ETH
and ADA while /assets reported two of them as having nothing.
Portability decided the format. The Space pins scikit-learn 1.6.1 and this host
runs 1.9.1, so a pickled estimator cannot cross, and BTC's classifier was
pickled elsewhere at 1.6.1 and is not reproducible here. ETH and ADA are
therefore torch. Measured per asset rather than assumed, and the framing in the
training script is now wrong in the asset's favour: there is no cost.
asset boosted torch accuracy persistence margin beats
BTC 0.7875 0.7933 71.34% 65.61% +5.73pp 5/5
ETH 0.7560 0.7724 69.64% 64.93% +4.71pp 5/5
ADA 0.7874 0.7963 71.39% 67.43% +3.96pp 5/5
Torch beat the gradient-boosted incumbent on all three. BTC is deliberately left
on its original artifact regardless, because that is…
Serve a predicted volatility magnitude, and chart it against recent history
The panel said whether the next 24 hours clear the trailing median but never how
far price is expected to move, which is what position sizing needs. It also had
no chart.
The best regressor found, a boosted tree at R2 0.4285, cannot be deployed: the
Space pins scikit-learn 1.6.1 while models are trained on a host running 1.9.1,
and a pickle survives neither direction. So the candidates were restricted to
portable formats and compared honestly:
Boosted trees (cannot ship) 0.4037 -> R2 0.4285 4/5 folds best
Torch MLP (portable) R2 0.4037 1/5
Ridge + HAR (portable) R2 0.3373 0/5
HAR-RV only R2 0.1898 0/5
The torch MLP ships. Portability costs 0.0248 of R2, and it still beats HAR-RV
by +0.2139 at p = 0.015 in 5 of 5 folds, so it earns its place against the
benchmark the field actually uses.
/volatility now carries `magnitude` (predicted 24h volatility, the ratio to
normal, and the walk-forward R2 beside H…
Add the volatility-regime model and surface its measured accuracy
Hourly BTC direction is not predictable: the three deployed direction
artifacts score ROC-AUC 0.47-0.50 with negative MCC, below an always-UP
baseline, and independent work with correct methodology reproduces the
same result. Their reported F1 of ~0.60 at 6h and 24h is majority-class
behaviour, not skill.
Realised volatility does cluster, so it is predictable. This adds a model
for "will the next 24h be more volatile than the trailing 90-day median",
measured at 0.7129 accuracy +/- 0.0224 over five chronological
walk-forward folds (2022-2026, 65,563 hourly candles), ROC-AUC 0.7895,
MCC 0.4284. The target is balanced, and it beats a persistence baseline
of 0.6561 in all five folds.
The direction figures are left as they are. They describe different
models on a different task, and relabelling them with this number would
claim an accuracy those artifacts do not have.
Two findings worth recording, both caught by measurement:
* the model must receive threshold-relative features, or pl…
Add the frozen risk and direction models for 1h, 6h and 24h
Six deployment models now run against the existing Binance closed-candle pipeline: a two-sided barrier-touch risk model and a direction Transformer at each horizon.
Correctness was established against the reference inference in the integration brief rather than assumed. For the candle at 2026-09-11 17:00 UTC the app reproduces risk 0.65 / 9.52 / 48.76 percent, all TYPICAL, and direction 1h UP at 56.31 percent, with the close matching to the cent. The nine derived stationary features are the training formulas verbatim, feature order is read from the shipped CSVs rather than from DataFrame column order, and each horizon keeps its own scaler.
/predictions serves the unified object, cached per closed candle, and returns 503 rather than predicting when the timeline has gaps, duplicates or non-finite features. Each new candle is appended to a forward-test log before its outcome exists, deduplicated by candle.
The dashboard gains a direction panel and a large-movement-risk panel. Risk is l…
Let users select BTC, ETH or ADA across the thesis scope
All three coins are in the study's scope, but only Bitcoin has trained artifacts. The dashboard previously hid this: ETH and ADA were hardcoded cards reading 'Model artifact required', which were removed in the four-view restructure.
The selector is now built from a new /assets endpoint rather than from hardcoded frontend assumptions. An asset is reported as deployed only when its artifacts were actually loaded at start-up, so a planned coin cannot advertise itself as a live model.
Selecting Ethereum or Cardano withholds the forecast instead of estimating one: the horizon control is disabled, no monitoring request is issued, and the track record states plainly that no forecasts exist for that coin rather than showing Bitcoin's in its place. Each panel explains what the coin still needs - market history, a training run per horizon, and registered artifacts - and notes that the Bitcoin sentiment corpus does not transfer.
Bringing a coin online later needs no interface change: register…
Restructure dashboard into four views and remove duplicated panels
The dashboard rendered 16 sections in one scroll, repeating BTC price 3x, P(UP) 4x, direction 3x and the horizon selector 3x (two of which resynced via a simulated click). It is now four views - Forecast, AI analyst, Track record, Method & status - driven by one horizon control in a shared store (store.js).
- Surface reliability_reason, qualification.reliability_buckets and qualification.regimes, all returned by the API but never rendered.
- Replace the pipe-delimited qualification string with a table, and lead the track record with model accuracy against the always-UP baseline.
- Fall back to /forecasts and /market when the analyst router is unavailable, reporting UNKNOWN rather than promoting an unqualified direction, so the forecast view no longer goes blank when the LLM stack is down.
- Drop the ETH and ADA cards, which were hardcoded to 'Model artifact required', and state the news disclaimer once instead of four times.
- Fetch /context once per cycle instead of twice, and move b…
Add light three-asset forecast overview and right-side analyst