Архитектура v42

v42 - это текущая базовая архитектура Китобоя. Она разделяет рынок, нейроморфный сенсор и торговое решение на разные уровни. В этой архитектуре Decima-8 не выступает самостоятельным трейдером. Ее роль - быстрый резонансный сенсор, который слышит редкую структуру в потоке.

Интерактивная карта production-контура

Открыть карту live-контура, чтобы пошагово пройти путь от Binance Spot feed до Decima, директора, multi-account executor и независимого Bybit profit guard.

Главный принцип

Китобой торгует не движение, а асимметрию.

Рынок каждый день дает много движений. Большая часть этих движений не имеет полезного edge после комиссий, шума, funding и проскальзывания. Поэтому v42 не пытается быть постоянным market taker. Она делает обратное:

ждать
  -> услышать редкий s300-сигнал
  -> проверить фазу s1800
  -> войти только если директор видит допустимый контекст
  -> не дергаться в боковике

В рабочем языке проекта:

ЖДАТЬ       = редкий s300 сигнал от Decima
ДИСКОНТ     = правильная фаза s1800 и контекст для long
ПРЕМИЯ      = правильная фаза s1800 и контекст для short
НЕ ЛЕЗТЬ    = neutral/skip
НЕ ДЕРГАТЬ  = same-side keep
ЗАБРАТЬ     = same-side close-if-profit

Полный поток данных

Биржа
  -> поток сделок
  -> секундный level-v3 press
  -> frames.level-v3.jsonl / tape.level-v3.raw8.vsb
  -> MTF stage
       -> s300 frames/tape/html
       -> s1800 frames/tape/html
  -> Decima-8 v42 на s300
  -> short/long/neutral сигналы
  -> catalog / Shannon lineage для отбора сенсоров
  -> директор фазы на s1800
  -> inventory/paper/live order intent
  -> director.json / director.tsv / director.html

В live это делает whaler_s300_stage_live.py.

В offline walk-forward это делает whaler_live_replay_walkforward.py.

Уровень 1: биржевой поток

Источник live-потока сейчас - Bybit WebSocket. Для истории используются сохраненные дневные данные в store/market/runs/SYMBOL-YYYY-MM-DD.

Сырой поток сделок не подается в Decima напрямую. Это принципиально: сырые сделки слишком шумные, имеют переменную частоту, зависят от режима биржи и приводят к тому, что личность слышит кашу.

Нужен пресс.

Уровень 2: level-v3 press

level-v3 - это секундный causal press. Его смысл - сделать время настоящей частью входа.

Инвариант:

1 календарный UTC-день = 86400 frames.level-v3.jsonl строк

Это не просто удобство. Это часть модели:

  • тишина становится входным состоянием;
  • пустые секунды не исчезают;
  • ожидание и охлаждение не теряются;
  • replay и live можно свести к одному таймлайну.

level-v3 описывает рынок через 8 lanes:

lane0: signed price impulse
lane1: local state / stasis
lane2: time-aware flow phase
lane3: buy pressure share
lane4: sell pressure share
lane5: flow-weighted mass
lane6: causal level context
lane7: level reaction / imbalance

На этом уровне Decima не работает как v42-сенсор. Это акустический слой.

Уровень 3: MTF s300 и s1800

v42 использует не секундный поток напрямую, а MTF-сжатие.

Основные масштабы:

s300  = 300 секунд = 5 минут
s1800 = 1800 секунд = 30 минут

s300 - рабочий слух Decima. На нем рождаются редкие события.

s1800 - фазовый контекст директора. Он медленнее, грубее, но лучше отделяет направление режима от случайной микрошумовой вспышки.

В калиброванном исследовательском контуре s1800 получил вторую, более узкую роль: причинно выбирать полку чувствительности s300-пресса. Закрытое движение за 48 s1800-кадров переключает gain между 1.00 и 1.25 с гистерезисом. Это юстировка входа под масштаб рынка, а не второй торговый сигнал: сторона позиции по-прежнему определяется директором и position manager.

Канонический VSB-контракт v42:

level-v3 frame anchor: utc-day-first-trade
MTF bucket anchor: utc-day-row
MTF bootstrap buckets: 16
MTF lane session reset: utc-day
MTF lane gain mode: slow-phase-shelf
MTF lane gain: 1.00 / 1.25

utc-day-row начинает MTF-нарезку с первой сохранённой секундной строки каждого UTC-дня. Первые 16 закрытых MTF-бакетов наполняют causal-базы до допуска lane в Decima. Этот контракт одинаков для bake-compatible history, replay и production live.

Важно: s1800 выбран не как произвольный удобный масштаб. В диагностическом Memory 432 отчете:

store/market/runs/v42_reset_frame432_BTCUSDT_all_history_2026-01-01_2026-06-13/tf_signal_compare_432.html

он был лучшим найденным фазовым слоем среди сравниваемых s300/s900/s1800/s3600 на моментах s300-сигналов. В этом смысле s1800 реально коррелировал с полезной интерпретацией сигналов. Но в текущем live-контуре это именно фазовый слой директора, а не второй Decima swarm.

MTF-слой строит закрытые окна. Это важно: незакрытый bucket не дает полноценный сигнал в replay, иначе offline начнет видеть не тот мир, который видел live.

Смысл MTF lanes в текущем live/replay:

lane0: signed return относительно базового движения
lane1: range относительно базового движения
lane2: relative trades per second
lane3: buy share
lane4: sell share
lane5: relative quantity / mass
lane6: absorption
lane7: signed imbalance

Это уже ближе к гидравлике:

  • где поток ускорился;
  • где масса пришла без движения;
  • где buy/sell pressure перекосился;
  • где движение сменилось выпуском давления;
  • где рынок не просто идет, а начинает терять равновесие.

История как рабочая память

Для v42 история - не архив "для графиков". Это эксплуатационная память системы.

Она нужна сразу в трех местах:

  • строить честный offline replay тем же путем, что live;
  • проверять переносимость правил на другие пары;
  • прогревать фазовый контекст s1800 после рестарта live.

Базовый формат дневной истории:

store/market/runs/SYMBOL-YYYY-MM-DD/frames.level-v3.jsonl
store/market/runs/SYMBOL-YYYY-MM-DD/frames.mtf.s300.jsonl
store/market/runs/SYMBOL-YYYY-MM-DD/frames.mtf.s1800.jsonl

Инварианты полного закрытого дня:

level-v3 = 86400 секундных кадров
s300     = 288 закрытых 5-минутных кадров
s1800    = 48 закрытых 30-минутных кадров

Если эти числа не сходятся, день нельзя использовать как надежную основу для walk-forward и phase warmup.

Фазовый warmup использует историю только как контекст директора. Он не создает live-сделки, не добавляет точки в live equity curve и не подмешивает исторические s300-сигналы в текущий run. Его задача уже: чтобы s1800 phase после перезапуска не была пустой 224 получасовых кадра.

То есть после рестарта:

live s300 событие -> только из текущего live
s1800 phase       -> история + текущие закрытые live s1800
equity/trades     -> только текущий live

Уровень 4: Decima-8 v42

Текущая v42-личность - закрытый .d8p-артефакт. Она слушает s300 tape и выдает pattern events. Это не торговые приказы.

Отдельное описание роли Decima-8 в Китобое вынесено на страницу Decima-8.

Публично важно не то, как именно запечена личность, а ее роль в контуре:

s300 tape
  -> Decima v42 personality
  -> rare pattern event
  -> phase director
  -> risk / position manager

Внутренние specs, labels, candidate families, mining parameters и bake-команды являются ИС проекта. Клиентский tenant получает готовый сенсор и полный аудит решений директора, но не производственный рецепт личности.

Уровень 5: директор

Директор превращает нервный сигнал в торговую интерпретацию.

Его задачи:

  • читать s300 signal;
  • читать s1800 phase;
  • решить long, short, neutral;
  • открыть позицию только при допустимом контексте;
  • не переворачиваться хаотично;
  • уметь закрыть same-side сигналом, если уже есть прибыль;
  • сопровождать открытую позицию через position manager;
  • писать понятный HTML/JSON/TSV мониторинг.

Текущий директор использует:

s300 Decima signal -> событие
s1800 phase        -> контекст направления

s1800 в этом контуре не выдает pattern ids. Он дает фазу через price/trend на HTF-фреймах.

Текущий основной режим:

mode=phase
phase lookback=224
phase threshold=0.0
same-side-signal=close-if-profit
neutral-action=skip
entry exposure=5.25
fee=4 bps
long-trail-activate=75 bps
long-trail-giveback=50 bps
trail-reentry-block=same-side-reclaim
trail-reclaim-cooldown=12 s300 frames
trail-reclaim-buffer=0 bps
trail-reclaim-max-entries=1 per phase
trail-reclaim-failure=150 bps
short-trail-activate=300 bps
short-trail-giveback=350 bps

close-if-profit сейчас зафиксирован как важная база: он уменьшает токсичное дерганье и делает same-side сигнал предохранителем, а не источником шума.

Position manager - отдельная часть директора. Он не ищет новый вход и не заменяет Decima-сигнал. Его задача уже после входа: сверять открытую позицию с рынком на каждом закрытом s300-фрейме, помнить лучший открытый ход сделки и закрывать позицию, если прибыль дала достаточный откат от MFE.

Long-carry защищается после +75 bps MFE с допустимой отдачей 50 bps. После trail-выхода директор ждет 12 s300-фреймов и разрешает не более одного повторного long в фазе, только если цена причинно вернула high-water закрытой сделки. Ложный reclaim закрывается после движения на 150 bps против позиции. Short, открытый после отложенного signal_arm confirmation, сохраняет правило 6/10: если за 6 s300-фреймов позиция не набрала 10 bps MFE, ее edge считается исчерпанным.

Прямой short Decima сопровождается отдельным causal lifecycle-контуром. Быстрый ход защищается после 300 bps MFE с отдачей 100 bps; после 288 s300-фреймов зрелая позиция получает уровень 150/50. Если short набрал хотя бы 25 bps MFE, но 48 кадров не обновляет полезный экстремум шагом 25 bps, position manager закрывает стагнацию после отдачи 60 bps и сохраняет не меньше 4 bps положительного хода. Новый экстремум сбрасывает таймер, поэтому это не жесткий max-hold. После защитного выхода разрешены не более двух повторных short-входов по новому снижению на 50 bps. Rebound-long появляется только после подтвержденного подъема на 75 bps, работает половиной базовой экспозиции и закрывается по trail 75/50 или adverse stop 100 bps.

Это появилось из конкретной ошибки all-history: в феврале 2026 short-позиция набрала примерно +2330 bps MFE, но без нового s300-сигнала на выход закрылась заметно позже и отдала большую часть движения. С short-trail-activate=300 и short-trail-giveback=350 тот класс выхода становится обязанностью position manager, а не задачей редкого сенсора Decima.

Отдельная линия: Shannon/catalog

До текущего live-директора в проекте была важная линия отбора сенсоров:

Shannon tree mining
  -> specs
  -> sensor catalog
  -> catalog director
  -> trade inventory

Эта линия не исчезла. Ее роль - не заменить s1800-фазу, а хранить доказательную память о том, какие pattern ids вообще имеют OOS-информацию.

Главные инструменты:

store/market/tools/whaler_shannon_tree_specs.py
store/market/tools/whaler_sensor_catalog.py
store/market/tools/whaler_catalog_director.py
store/market/tools/whaler_trade_inventory.py

В all-history v42 есть артефакт:

store/market/runs/v42_mtf_s300_short_wide_all_history_2026-01-01_2026-05-30/internal_catalog_short_all_history.json

Он содержит 26 trade-сенсоров. Catalog-директор на этих сенсорах дал:

events=154
catalog_sensors=26
trades=106
return=-0.29%
win=59.43%
profit_factor=0.988

Вывод: catalog/Shannon-слой важен как фильтр и инвентаризация сенсоров, но сам по себе в этом прогоне не стал финальным edge. Текущая сильная база v42 появилась, когда rare s300 event был интерпретирован через s1800 phase и same-side policy.

Уровень 6: inventory

Inventory - это не стратегия. Это учет состояния:

equity
position
entry price
trades
realized pnl
mark pnl

В текущем live inventory пока работает как dry-run / paper слой. Следующий шаг - добавить боевые ордера так, чтобы order executor был отдельным слоем и не смешивался с директором.

Почему это не HFT

v42 не HFT по нескольким причинам:

  • базовый сигнал s300, то есть 5-минутная структура;
  • фазовый контекст s1800, то есть 30-минутный режим;
  • сигналов мало;
  • боковик в основном не торгуется;
  • входы проходят через директора;
  • цель - редкая асимметрия, а не постоянное снятие спреда.

Даже если live получает сотни тысяч WebSocket-сообщений, торговое решение возникает редко. Большой поток нужен для слуха, а не для высокой частоты ордеров.

Важные наблюдения по результатам

На BTCUSDT текущий v42-кандидат дал устойчивую базу на историческом проходе: мало сделок, месяцы подряд в плюс, win rate около психологически нормального диапазона, меньший drawdown относительно более простых keep-режимов.

После продления истории до 2026-06-13 отдельно проверена политика памяти s300 swarm. Календарный utc-day оказался сильным, но слишком похожим на внешний хак. Следующий контроль показал, что старт-зависимый Memory 432 тоже нельзя считать устойчивой архитектурной базой: границы памяти меняются от точки запуска replay/live.

Текущая база - utc-day=288. Она задает дневной UTC-сброс s300 swarm и ограничивает активную память Decima 288 закрытыми s300-фреймами. Ранее проверенный utc-month-frame-count=288 дал завышенный результат из-за ошибки: session bucket считался через фактический frame_seconds последнего укороченного bucket дня. После фикса этот режим совпал с utc-day.

288 здесь описывает не "закон Decima", а профиль рынка BTCUSDT: 24/7 торговля, s300 bucket, 288 закрытых 5-минутных окон за UTC-день. Для рынков с ночным закрытием, биржевыми аукционами или выраженным premarket/afterhours нужен отдельный market session profile. Там память s300 должна считаться от активной торговой сессии: например, 12 часов дают около 144 s300-фреймов, 8 часов - около 96.

Свежий BTCUSDT replay:

period: 2026-01-01..2026-06-15
mtf source: deterministic rebuild from level-v3
swarm_session_reset: utc-day
swarm_session_frames: 288
swarm_session_anchor: utc
signals: 167
trades: 75
return: +37.31%
mark return: +37.31%
win: 69.3%
max dd: 8.04%
entry exposure: 0.5

Тот же контур с entry_exposure=1.0 дал +85.79% при max dd=20.05%. Это не новая база, а отдельный профиль размера. Архитектура Whaler поддерживает явный выбор режима риска, без скрытого прятания риска в одном числе exposure.

На ETHUSDT transfer-проверка после исправления level-v3 дала положительный результат, но слабее BTCUSDT:

период: 2026-01-01..2026-05-30
raw frames: 12960000
s300 frames: 43200
s1800 frames: 7200
short signals: 138
trades: 68
pnl: +13.6846
return: +13.68%
win: 64.7%
max dd: 19.22%

Это важно трактовать трезво: v42 переносится на ETHUSDT не идеально, но не разваливается. Значит, личность слышит не только подгонку под один участок BTC, но директор и риск требуют проверки по парам.

Что считается базой

Базой считается не один файл .d8p, а связка:

level-v3 invariant
MTF s300/s1800
whaler_v42_mtf_s300_short_wide_may01_20.d8p
v42 labels TSV
phase director
same-side close-if-profit
swarm memory policy
risk profile / exposure
live/replay parity
HTML/JSON/TSV мониторинг

Если менять только один слой, надо явно фиксировать, какой контракт остается прежним.