Архитектура 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 мониторинг
Если менять только один слой, надо явно фиксировать, какой контракт остается прежним.