verifying credentials…

⚙️ Pressure Calibrator research · OLS fit ● admin only

Калибровка весов разложения давления против реального движения USDT.D. Собирает rolling-buffer пар (components(t), Δusdt_d(t+Δ)) прямо в браузере, считает Pearson-корреляции для каждой компоненты на 4 lookahead-окнах и решает регрессию методом наименьших квадратов для подбора оптимальных весов. Калибратор использует тот же буфер, что и regime-страница (localStorage.qls_pressure_buffer), так что чем дольше открыта любая из вкладок — тем точнее становится калибровка.

samples: oldest: newest: span: live src: snapshot age:

📡 Live decomposition

Текущие компоненты по последнему market_snapshot.json + live USDT.D от CoinGecko / CoinPaprika. Обновляется каждые 30 сек.

⚖️ Weights editor

Подвинь ползунок — net пересчитается для всего буфера и корреляция обновится мгновенно. После запуска OLS-фита (ниже) кнопка apply suggested выставит ползунки в найденные оптимальные значения.

📊 Time series · pressure (current weights) vs USDT.D

(1 sample ≈ 30 сек; 240 samples ≈ 2 часа открытой вкладки)
composite pressure (left axis, ±100) USDT.D live (right axis, %)

🧮 Correlation matrix · component vs −Δusdt_d(lookahead)

Pearson корреляция между значением компоненты в момент 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 точек

🎯 OLS · optimal weights fit

Решает регрессию −Δu(t+Δ) = β·components(t) + ε методом наименьших квадратов с ridge λ=0.01 для устойчивости. Минимум 30 точек.
R² (in-sample)

click Fit OLS to compute · буфер должен содержать ≥ 30 точек с валидным lookahead

🌐 Server-side · bootstrap & sync checking…

Сервер хранит независимый buffer в /opt/snapshot/data/pressure_buffer.jsonl и отдаёт доступ к shield_state.json (ground-truth USDT.D, ~3 мин шаг, 2 ч окно) и snapshot_archive/* (полные snapshot'ы за 7 дней, ~96 файлов/день). Используй эти источники чтобы не ждать сутки накопления — калибровка стартует сразу с боевыми данными.
Step 1 · Ground truth
Читает shield_state.json (~50 точек / ~2 ч rolling). Только u заполнено, компонент нет — это для корреляций.
Step 2 · Components history
Тянет snapshot_archive через /api/lab/snapshots/*, считает computePressure для каждого. ~96 файлов/день.
Step 3 · Server buffer
Server stores ≤50k samples in JSONL, общий для всех клиентов.

💾 Buffer · export / import / clear

Локальный буфер хранится в браузере (localStorage.qls_pressure_buffer), общий с regime-страницей. Можешь сохранить как CSV (для внешнего анализа или бэкапа) или импортировать ранее сохранённый.
формат: t,u,price,liq,cvd,oi,structure,funding,btcd,vm,src

📚 Methodology

1. Сбор данных в браузере

Каждые 30 секунд страница (вместе с regime-страницей) пишет в 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 точек (старые вытесняются).

2. Целевая переменная

Для пары (t_i, t_j) где t_j ≥ t_i + Δ (с допуском ±20%): y_i = − (u(t_j) − u(t_i)). Знак минус — потому что положительное «давление» в нашей гипотезе должно понижать USDT.D (риск-он).

3. Корреляции

Pearson r(x, y) = Σ(xi − x̄)(yi − ȳ) / √(Σ(xi − x̄)² · Σ(yi − ȳ)²). Считается независимо для каждой компоненты и для composite net на 4 окнах: 5, 15, 30, 60 минут.

4. OLS-фит

Матричное уравнение X · β = y, решение: β = (XᵀX + λI)⁻¹ Xᵀy с ridge-регуляризацией λ = 0.01. R² = 1 − SSR/SST. Это аналитический минимум суммы квадратов остатков — глобальный оптимум для линейной модели. Полученные β могут быть отрицательными или больше 1, поэтому страница показывает также «interpretable» вариант: обрезает отрицательные до 0 и нормализует сумму до 1.

5. Чего сейчас не хватает (известные ограничения)

  • Снапшот обновляется раз в 15 мин, а живой USDT.D — каждые 12 сек. Между обновлениями снапшота компоненты не меняются, поэтому корреляция на 5-минутном lookahead сильно недостаточно представлена. 15+ мин окна — настоящие.
  • Linear model. Если зависимость нелинейная (squeeze threshold, panic level) — OLS её не поймает. Дальнейший шаг — gradient boosting на тех же фичах, но это требует серверной части.
  • Volume intensifier применяется мультипликативно, в OLS он остаётся вне линейной модели. Это намеренно — он «настроен» как rvol-мультипликатор. Можно отдельно проверить корреляцию vm с волатильностью USDT.D.
  • Out-of-sample не делается. R² in-sample оптимистичен. Серьёзный продакшн-вариант — walk-forward train/test split, это след. шаг (требует серверного хранения).

6. Серверная интеграция (V21.16)

Все три серверных компонента уже подключены:
  • Ground-truth: /lab/data/shield_state.json синхронизируется cron'ом каждую минуту из /opt/snapshot/shield_state.json. Содержит rolling-окно ≈ 2 ч / ≈ 50 точек USDT.D и BTC.D с полной float-точностью. Bootstrap-кнопка тянет это в локальный буфер.
  • Snapshot archive: /api/lab/snapshots/list?days=N + /api/lab/snapshots/get?name=...&day=... — read-only доступ к /opt/snapshot/snapshot_archive/. Защищено path-traversal regex. Ingest-кнопка считает computePressure для каждого файла и наполняет буфер.
  • Server-side buffer: POST/GET/DELETE /api/lab/pressure-buffer/* + JSONL хранилище в /opt/snapshot/data/pressure_buffer.jsonl (rolling ≤ 50k строк). Sync-чекбокс автоматически отправляет каждый новый sample в общий серверный буфер, доступный для всех клиентов.
Auth: тот же QL_SESSION_TOKEN что и для /config. Router изолирован в lab/pressure_buffer_api.py — fail-silent при ошибке, основной API не страдает.