A REST + WebSocket API that reports the current volatility state — low, normal, high — for twenty USDT-quoted pairs on Binance.
Plus the return distribution that typically follows each transition, and the cross-symbol lead-lag between them.
Calibrated on real data. The math is documented. No predictions.
We pull 1-minute OHLCV from Binance spot and use it as-is. The higher timeframes you query (5m, 15m, 1h, 4h, 1d) are computed from those 1m bars the same way your exchange computes them — no synthetic bars, no proprietary resampling.
30-minute rolling realized volatility, annualized. z-score against a 4-hour baseline. The short window measures now; the baseline measures recent normal.
low / normal / high, with
hysteresis. To transition we require several consecutive observations
past the boundary; single spikes don't move the state.
Each symbol is calibrated independently against 180 days of its own 1-minute klines — 2,304 threshold combinations, Pareto-front selection on the (F1, alerts/day) plane. Numbers below are for the balanced preset; full per-symbol F1 breakdown is in the docs.
Median detection lag: ~20 minutes. That is the honest number; we publish it rather than hide it. Regime detection against a smoothed percentile ground truth is genuinely noisy — anyone claiming F1 > 0.9 is labeling with future information.
Twenty minutes of lag means you aren't the first to know, which
sounds useless for directional trading. The reason the service
still pays is that the first twenty minutes of a
high-vol regime are a small fraction of the move — the rest of
the distribution plays out over hours. /impact (next
section) returns exactly that distribution, so the label is the
trigger and the per-horizon return stats are what your system
actually decides on.
The regime itself is the raw signal. What you probably want next is how price tends to move after a transition. That endpoint is live:
$ curl "https://api.amaneki.com/v1/regime/btcusdt/impact?to=high&lookback_days=365&timeframe=1m" { "symbol": "btcusdt", "to_regime": "high", "lookback_days": 365, "sample_size": 136, "horizons": { "1h": { "samples": 136, "median": 0.00068, "p25": -0.0049, "p75": 0.0033 }, "4h": { "samples": 136, "median": -0.00062, "p25": -0.0077, "p75": 0.0065 }, "24h": { "samples": 135, "median": 0.00003, "p25": -0.0194, "p75": 0.0209 } } }
Numbers above are the current live response from our Postgres
archive for BTC 1m over the last 365 days (re-query any time
with different lookback_days / timeframe
and you will get today's distribution). Returns are natural-log.
Sample size is the count of past HIGH transitions inside the
window — p25/p75 become meaningful at N ≥ 20, p05/p95 at N ≥ 100.
The distribution is the value your bot acts on; the label
itself is just the trigger.
/v1/regime/lead-lag?leader=btcusdt&follower=ethusdt&to=high —
how often BTC's transitions precede ETH's, and by how long.
$ curl https://api.amaneki.com/v1/regime/btcusdt { "symbol": "btcusdt", "regime": "normal", "z_vol": -1.39, "realized_vol": 0.1788, "baseline_vol": 0.2374, "close": 73923.87, "last_update_ms": 1776236100000, "calculation_version": "2026-04-16-v1", "computed_at_ms": 1776236103112 }
calculation_version names the calibrated threshold
set that produced the label. Quant risk teams use it to pin
results to a reproducible calibration.
/v1/regime/{symbol}/v1/regime/{symbol}/history/v1/streamAnnual billing: 2 months free on Hobby, Pro, and Pro Plus. All paid plans include a 14-day trial.