Калибровка весов разложения давления против реального движения USDT.D.
Собирает rolling-buffer пар (components(t), Δusdt_d(t+Δ))
прямо в браузере, считает Pearson-корреляции для каждой компоненты на 4 lookahead-окнах
и решает регрессию методом наименьших квадратов для подбора оптимальных весов.
Калибратор использует тот же буфер, что и regime-страница (localStorage.qls_pressure_buffer),
так что чем дольше открыта любая из вкладок — тем точнее становится калибровка.
market_snapshot.json + live USDT.D от CoinGecko / CoinPaprika.
Обновляется каждые 30 сек.
t и
отрицательным изменением USDT.D через окно Δ. Положительная корреляция значит:
когда компонента положительна, USDT.D через Δ времени падает — компонента работает по
гипотезе (давление вправо ⇒ USDT.D вниз). |r| ≥ 0.30 — сильно, 0.10–0.30 — слабо, < 0.10 — шум.
| component | n=samples | 5 min | 15 min | 30 min | 60 min |
|---|---|---|---|---|---|
| collecting samples… корреляция будет считаться когда буфер ≥ 20 точек | |||||
−Δu(t+Δ) = β·components(t) + ε методом наименьших квадратов
с ridge λ=0.01 для устойчивости. Минимум 30 точек.
click Fit OLS to compute · буфер должен содержать ≥ 30 точек с валидным lookahead
/opt/snapshot/data/pressure_buffer.jsonl и отдаёт
доступ к shield_state.json (ground-truth USDT.D, ~3 мин шаг, 2 ч окно) и
snapshot_archive/* (полные snapshot'ы за 7 дней, ~96 файлов/день). Используй
эти источники чтобы не ждать сутки накопления — калибровка стартует сразу с боевыми данными.
shield_state.json (~50 точек / ~2 ч rolling). Только u заполнено,
компонент нет — это для корреляций.
snapshot_archive через /api/lab/snapshots/*, считает
computePressure для каждого. ~96 файлов/день.
localStorage.qls_pressure_buffer), общий с regime-страницей.
Можешь сохранить как CSV (для внешнего анализа или бэкапа) или импортировать ранее сохранённый.
t,u,price,liq,cvd,oi,structure,funding,btcd,vm,src
localStorage.qls_pressure_buffer объект:
{t: epoch_ms, u: usdtd_live_float, c: {price, liq, cvd, oi, structure, funding, btcd}, vm: volMult, src}.
Это даёт ~120 точек/час открытой вкладки. После 24 часов накапливается ≈ 2880 точек — достаточно для устойчивой регрессии
на 30/60-минутных lookahead-окнах. Буфер ограничен 5000 точек (старые вытесняются).
(t_i, t_j) где t_j ≥ t_i + Δ (с допуском ±20%):
y_i = − (u(t_j) − u(t_i)). Знак минус — потому что положительное «давление» в нашей гипотезе должно понижать USDT.D (риск-он).
r(x, y) = Σ(xi − x̄)(yi − ȳ) / √(Σ(xi − x̄)² · Σ(yi − ȳ)²).
Считается независимо для каждой компоненты и для composite net на 4 окнах: 5, 15, 30, 60 минут.
X · β = y, решение:
β = (XᵀX + λI)⁻¹ Xᵀy с ridge-регуляризацией λ = 0.01. R² = 1 − SSR/SST.
Это аналитический минимум суммы квадратов остатков — глобальный оптимум для линейной модели.
Полученные β могут быть отрицательными или больше 1, поэтому страница показывает также «interpretable» вариант:
обрезает отрицательные до 0 и нормализует сумму до 1.
/lab/data/shield_state.json синхронизируется cron'ом каждую минуту из /opt/snapshot/shield_state.json. Содержит rolling-окно ≈ 2 ч / ≈ 50 точек USDT.D и BTC.D с полной float-точностью. Bootstrap-кнопка тянет это в локальный буфер./api/lab/snapshots/list?days=N + /api/lab/snapshots/get?name=...&day=... — read-only доступ к /opt/snapshot/snapshot_archive/. Защищено path-traversal regex. Ingest-кнопка считает computePressure для каждого файла и наполняет буфер.POST/GET/DELETE /api/lab/pressure-buffer/* + JSONL хранилище в /opt/snapshot/data/pressure_buffer.jsonl (rolling ≤ 50k строк). Sync-чекбокс автоматически отправляет каждый новый sample в общий серверный буфер, доступный для всех клиентов.QL_SESSION_TOKEN что и для /config. Router изолирован в lab/pressure_buffer_api.py — fail-silent при ошибке, основной API не страдает.