Директор и риск

Decima-8 v42 не торгует. Она дает событие. Директор решает, можно ли событие превратить в позицию.

Это разделение защищает систему от главной ошибки: считать любой pattern fire торговым приказом.

Задача директора

Директор отвечает за смысл:

s300 signal
  + s1800 phase
  + catalog / sensor status
  + позиция
  + комиссия
  + текущая прибыль/убыток
  + ограничения риска
  -> action

Возможные действия:

open long
open short
close
keep
skip
close-if-profit
open_probe
scale_in
phase_carry_open
arm_short
armed_signal_open

Текущий базовый режим

Текущий основной режим v42 после июльского разбора:

mode=phase
phase-lookback-frames=224
phase-threshold-bps=0.0
phase-carry-entry=long
phase-carry-entry-lookback-frames=72
phase-carry-entry-confirm-lookback-frames=48
phase-carry-entry-require-base-phase=true
phase-carry-flip-exit=false
phase-carry-entry-exposure=5.25
signal-long-exposure=0
signal-short-exposure=5.25
signal-short-probe-ratio=0.75
confirm-exposure=5.25
confirm-bps=20
scale-in-position-kind=normal
short-signal-arm-confirm-bps=50
short-signal-arm-min-push-bps=65
short-signal-arm-expire-frames=33
short-signal-arm-confirm-mode=drop-or-push
opposite-signal=close-and-open
short-edge-expiry-frames=24
edge-expiry-min-open-bps=-200
long-trail-activate-bps=75
long-trail-giveback-bps=50
trail-reentry-block=same-side-reclaim
trail-reclaim-cooldown-frames=12
trail-reclaim-buffer-bps=0
trail-reclaim-max-entries=1
trail-reclaim-failure-bps=150
same-side-short-signal=close-if-profit
fee-bps=4.0
capital=100

phase-lookback-frames=224 дает длинный контекст, phase-carry-entry-lookback-frames=72 отвечает за рабочую carry-фазу, а phase-carry-entry-confirm-lookback-frames=48 проверяет быстрый импульс. Long разрешен только когда все три s1800-горизонта направлены вверх. Decima v42 при этом не превращается в long-сенсор: ее событие трактуется как прерывание шорта/опасности.

Почему появился carry-long

Июль показал слабое место старого директора: если ждать только s300-fire, можно пропустить длинный монотонный рост. Поэтому директор получил отдельный carry-слой:

если позиция flat
и Decima молчит
и s1800/48 фаза поддерживает long
и s1800/72 фаза поддерживает long
и s1800/224 фаза поддерживает long
и нет pending short-arm
-> открыть long-carry

Это не "лонговый сигнал Decima". Это позиция по фазовому контексту в период тишины Decima.

Decima interrupt

Сигнал Decima v42 в текущей архитектуре читается как событие опасности:

если открыт long-carry -> закрыть long
если фаза уже bearish -> открыть short
если фаза bullish, но Decima стреляет шорт/опасность -> поставить short-arm

Short-arm защищает от слишком раннего шорта на сильном росте:

arm_confirm_bps=50
arm_min_push_bps=65
arm_expire_frames=33
arm_confirm_mode=drop-or-push

То есть директор видит событие Decima, но требует подтверждения: либо рынок реально откатывает вниз, либо делает финальный push, после которого short разрешается по trigger-цене.

Confirmation level

После разрешения short директор не обязан сразу отдавать позиции весь целевой риск. Сигнал открывает 75% целевой экспозиции. Если на следующем или более позднем закрытом s300-кадре short показывает не менее +20 bps, position manager добавляет оставшиеся 25%.

Decima short разрешен
  -> open short @ 0.75 target
  -> open profit >= 20 bps
  -> scale_in до 1.00 target

Это не фильтр сигнала и не ожидание идеальной точки. Ранний вход сохраняется, а неподтвержденное событие несет меньший риск. Scale-in применяется только к обычным short-позициям источников signal и signal_arm; carry-long и reentry не затрагиваются.

Position manager

Редкий сенсор не обязан давать отдельный сигнал выхода в момент, когда открытая сделка уже набрала хороший ход и начинает отдавать прибыль. Сопровождение вынесено из Decima в stateful position manager.

Его задача:

не искать новый вход
не заменять Decima signal
не менять phase decision
сопровождать уже открытую позицию

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

Текущие параметры сопровождения:

long_trail_activate_bps=75
long_trail_giveback_bps=50
long_trail_source=phase-or-phase_flip
trail_reentry_block=same-side-reclaim
trail_reclaim_cooldown_frames=12
trail_reclaim_buffer_bps=0
trail_reclaim_max_entries=1
trail_reclaim_failure_bps=150
short_edge_expiry_frames=24
edge_expiry_min_open_bps=-200
short_signal_arm_edge_expiry_frames=6
short_signal_arm_edge_expiry_min_best_bps=10
short_signal_proof_min_best_bps=300
short_signal_proof_trail_giveback_bps=100
short_signal_proof_mature_age_frames=0
short_signal_proof_mature_min_best_bps=0
short_signal_proof_mature_trail_giveback_bps=0
short_signal_proof_graded_age_start_frames=72
short_signal_proof_graded_age_full_frames=126
short_signal_proof_graded_mfe_start_bps=75
short_signal_proof_graded_mfe_full_bps=125
short_signal_proof_graded_giveback_start_bps=150
short_signal_proof_graded_giveback_full_bps=50
short_signal_stagnation_frames=48
short_signal_stagnation_min_best_bps=25
short_signal_stagnation_progress_step_bps=25
short_signal_stagnation_giveback_bps=60
short_signal_stagnation_lock_bps=4
short_signal_proof_max_rearms=2
short_signal_proof_rearm_confirm_bps=50
short_signal_proof_rearm_expire_frames=144
short_signal_proof_rebound_confirm_bps=75
short_signal_proof_rebound_exposure=0

Long-carry получает защиту после +75 bps MFE. Если цена отдает 50 bps от лучшей точки, директор закрывает позицию с reason=position_trail. После такого выхода он ждет 12 s300-кадров и разрешает не более одного повторного входа в текущей фазе, только когда цена причинно возвращает прежний high-water. Ложный reclaim закрывается после движения 150 bps против нового long. Это позволяет продолжить доказанный тренд без немедленного возврата в шум.

Short-сопровождение разделено по источнику позиции:

если short был открыт после signal_arm confirmation и за 6 s300-кадров
не набрал 10 bps MFE, директор закрывает его по signal_arm_edge_expiry;
если short за 24 s300-кадра не подтвердился и ушел хуже допустимой зоны,
директор закрывает позицию по edge_expiry;
если direct short набрал 300 bps MFE,
position manager защищает ход с giveback 100 bps;
между 72 и 126 s300-кадрами защита direct short усиливается плавно:
порог MFE растет с 75 до 125 bps, допустимая отдача уменьшается со 150 до 50 bps;
если direct short набрал хотя бы 25 bps MFE, но 48 кадров не обновляет
полезный экстремум шагом 25 bps, директор закрывает стагнацию после
отдачи 60 bps и сохраняет не меньше 4 bps положительного хода;
после защитного выхода новый short требует падения еще на 50 bps;
автоматический защитный rebound-long в выбранном профиле отключен.

Это не биржевой stop-loss, фиксированный take-profit или жесткий max-hold. Новый полезный экстремум сбрасывает таймер стагнации, поэтому тренд может продолжаться столько, сколько он реально движется в пользу позиции. Между закрытиями пятиминутных фреймов эта логика не является tick-by-tick защитой биржевого счета.

Почему это важно:

  • Decima слышит редкое событие входа, а не обязана идеально ловить выход;
  • сильное движение может пройти без нового s300-сигнала;
  • same-side policy не видит откат от MFE, если нет нового сигнала;
  • директор забирает прибыль по состоянию открытой позиции, а не только по новым событиям сенсора.

Текущий публичный benchmark после добавления причинной slow-phase юстировки пресса, фазового consensus 48/72/224, ступенчатого short и causal lifecycle position manager:

VSB: utc-day-first-trade / utc-day-row / bootstrap 16
press gain: s1800 move w48 -> shelf 1.00/1.25
UTC daily Memory 288 + phase-carry consensus + interrupt шорта/опасности
2026-01-01..2026-07-29 -> return=+4116.05%, mark=+4196.31%, peak-to-trough DD=38.27%, trades=254

Это не делает режим безопасным. Slow-phase selector калибрует чувствительность, но не выбирает long/short. Carry-слой закрывает пропуск монотонного роста, consensus блокирует противоречивые long-входы, а lifecycle-контур ограничивает отдачу доказанного short-движения, закрывает бесполезное зависание и разрешает повторный вход только после нового подтверждения. Funding, slippage и liquidation в replay не учтены.

Neutral

neutral-action=skip означает:

если фаза мутная или сигнал не проходит контекст,
директор ничего не делает

Это не потеря возможностей. Это главный способ не превращать редкий сенсор в скальпер шума.

Запас прочности

Название отдельного модуля здесь вторично. Важен сам принцип: вход проходит только тогда, когда у события есть достаточный запас по фазе, цене, комиссии, шуму, позиции и риску.

Минимальные условия:

  • сигнал Decima есть;
  • pattern id не токсичен по catalog/Shannon-памяти, если такой catalog применен;
  • s1800 фаза не против;
  • цена не late относительно ожидаемого движения;
  • ожидаемый ход больше комиссии и шума;
  • нет перегретого режима после серии входов;
  • позиция и дневной риск допускают новый вход;
  • нет аварийного стоп-состояния.

Для long важна дисконтная зона. Для short важна премиальная зона.

В текущей v42 это зона развития директора: не больше сделок, а более строгий фильтр входа.

Почему не flip по каждому сигналу

Flip кажется простым:

long signal -> long
short signal -> short

Но для v42 это неверно.

Причины:

  • short-wide personality может слышать один и тот же down-дисбаланс несколько раз;
  • сигнал может прийти late;
  • сигнал может быть против s1800;
  • сигнал может быть полезен как exit, а не entry;
  • повторный same-side fire не обязан означать "увеличить риск".

Поэтому текущий директор работает как stateful-слой: он учитывает позицию, прошлые решения и контекст повторного сигнала.

Комиссия и шум

Текущая честная комиссия в тестах:

fee-bps=4.0

Это значит, что сигнал с маленьким edge может быть статистически красивым, но торгово бесполезным. Директор отсекает микроскопическое преимущество, если ожидаемый ход не перекрывает:

  • комиссию;
  • spread;
  • slippage;
  • funding;
  • задержку исполнения;
  • риск late entry.

Position sizing

В документах Whaler важно различать три величины:

deposit_exposure
execution_leverage
effective_exposure

Текущий aggressive pilot считается так:

deposit_exposure=0.5
execution_leverage=5.25
effective_exposure=2.625

То есть в модели задействуется половина депозита, но за счет плеча торговый notional становится 2.625 от equity. При сравнении отчетов смотреть нужно именно effective_exposure.

effective_exposure = entry_exposure * leverage

Это резко увеличивает темп, но так же резко увеличивает drawdown. Поэтому live-пилот стартует малым капиталом, а подключение клиента ограничивается risk profile, max notional, дневным лимитом и kill switch.

Режимы агрессии

Whaler работает не как один жесткий режим, а как несколько профилей риска одного директора.

Рабочая схема профилей:

conservative:
  phase-carry long
  low effective_exposure
  leverage ограничен или выключен
  цель: live/replay parity и спокойный старт

balanced:
  phase-carry exp 1.0
  Decima interrupt шорта/опасности
  цель: полный размер без агрессивного плеча

aggressive:
  deposit_exposure=0.5
  leverage=5.25
  effective_exposure=2.625
  цель: высокий темп на малом боевом капитале

max_aggression:
  individual account effective_exposure=5.25
  текущий профиль pilot executor
  обязателен жесткий kill switch

Эти профили не являются обещанием доходности. Это способ явно выбрать риск, вместо того чтобы незаметно менять несколько параметров в CLI.

Старый probe re-entry

close-and-reopen-probe добавлен как отдельная логика для повторного same-side сигнала.

Смысл:

если same-side сигнал пришел в прибыльной позиции:
  закрыть прибыль
  не открывать сразу полный размер
  открыть probe
  докинуть только если цена подтвердила движение

Ключевые параметры:

reentry_exposure
confirm_exposure
confirm_bps
max_reentry_phase_abs_bps

Смысл probe: первый same-side re-entry может быть правильным продолжением импульса, но поздний re-entry после уже большого движения может стать токсичным. Probe дает возможность проверить продолжение тренда маленьким размером.

Текущий вывод по тестам: probe полезен как исследовательский слой, но не является текущим live-default. Июльский разбор показал более прямой путь: не пытаться выжимать повторные same-side входы, а держать фазовый carry-long и использовать Decima как interrupt.

В боевом слое явно фиксируются:

  • капитал;
  • плечо;
  • max notional;
  • max daily loss;
  • max weekly loss;
  • max position age;
  • max trades per day;
  • cooldown.

Daily / weekly risk

Перед боевыми ордерами вводятся жесткие ограничения:

max_daily_loss
max_weekly_loss
max_trades_per_day
max_consecutive_losses
cooldown_after_loss
cooldown_after_profit_take
kill_switch

Это не оптимизация стратегии. Это защита от системной ошибки, плохого рынка, биржевого сбоя и неправильной версии кода.

Журнал решений

В live-контуре журнал решений хранит не только результат, но и причину.

Минимальный decision log:

timestamp
frame
symbol
pattern_id
label
s300 price
s1800 phase
position before
decision
reason
entry price
exit price
fee
realized pnl
mark pnl
equity

Пример причин:

entry_short: signal down, phase allows short
phase_carry_open: Decima silent, s1800 48/72/224 allow long
arm_short: Decima signal шорта/опасности, phase still bullish
armed_signal_open: short-arm confirmed by drop-or-push
close: next_signal closes carry-long
skip: neutral phase
skip: already in position, not profitable
close: same-side close-if-profit
close: position_trail
close: edge_expiry
skip: cooldown
skip: max trades per day
skip: запас прочности не прошел

Без такого журнала live на VPS будет трудно обслуживать.

Границы ответственности

Директор:

  • не пересчитывает Decima-сигнал;
  • не меняет labels;
  • не знает внутреннюю tile topology;
  • не подгоняет сигналы post-fact;
  • не открывает ордер без записи причины;
  • не смешивает paper inventory и real exchange state;
  • не скрывает аварийные состояния.

Итоговая роль

Decima говорит:

я слышу событие

Директор отвечает:

это событие сейчас имеет торговый смысл или его надо пропустить

Именно эта связка делает v42 базой, а не просто хорошим bake-файлом.