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

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-decima-exit-policy=immediate
phase-carry-entry-exposure=5.25
signal-long-exposure=0
signal-short-exposure=5.25
signal-short-probe-ratio=0.675
confirm-exposure=5.25
confirm-bps=30
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
short-signal-arm-timeout-long-policy=none
long-exit-short=next-signal
long-exit-short-exposure=5.25
opposite-signal=close-and-open
short-edge-expiry-frames=24
edge-expiry-min-open-bps=-200
long-trail-activate-bps=70
long-trail-giveback-bps=50
trail-reentry-block=same-side-reclaim
trail-reclaim-cooldown-frames=8
trail-reclaim-buffer-bps=0
trail-reclaim-max-entries=2
trail-reclaim-failure-bps=150
failed-short-reclaim-release=one
failed-short-reclaim-release-cooldown-frames=4
failed-short-reclaim-release-reference=short-exit
failed-short-reclaim-release-buffer-bps=0
stale-long-reclaim-rebase-frames=168
stale-long-reclaim-rebase-buffer-bps=10
same-side-short-signal=close-if-profit
fee-bps=10.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
если сигнал закрывает long -> сразу открыть short на 5.25
если фаза уже bearish и позиции не было -> открыть обычный short
если фаза bullish, но Decima стреляет шорт/опасность -> поставить short-arm

Открытый phase_carry long закрывается по fire немедленно и в том же кадре разворачивается в short на полную экспозицию 5.25. Если fire пришел из flat, применяется обычный short/short-arm путь. Истекший short-arm не возвращает long-carry автоматически.

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 директор не обязан сразу отдавать позиции весь целевой риск. Сигнал открывает 67.5% целевой экспозиции. Если на следующем или более позднем закрытом s300-кадре short показывает не менее +30 bps, position manager добавляет остаток до 5.25.

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

Это не фильтр сигнала и не ожидание идеальной точки. Ранний вход сохраняется, а неподтвержденное событие несет меньший риск. Scale-in применяется только к обычным short-позициям источников signal и signal_arm. Short, открытый непосредственно после выхода из long по next-signal, является исключением: он сразу получает полную экспозицию 5.25 и затем сопровождается тем же direct-short lifecycle.

Position manager

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

Его задача:

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

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

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

long_trail_activate_bps=70
long_trail_giveback_bps=50
long_trail_source=phase-or-phase_flip
trail_reentry_block=same-side-reclaim
trail_reclaim_cooldown_frames=8
trail_reclaim_buffer_bps=0
trail_reclaim_max_entries=2
trail_reclaim_failure_bps=150
failed_short_reclaim_release=one
failed_short_reclaim_release_cooldown_frames=4
failed_short_reclaim_release_reference=short-exit
failed_short_reclaim_release_buffer_bps=0
stale_long_reclaim_rebase_frames=168
stale_long_reclaim_rebase_buffer_bps=10
short_edge_expiry_frames=24
edge_expiry_min_open_bps=-200
short_signal_arm_edge_expiry_frames=7
short_signal_arm_edge_expiry_min_best_bps=10
short_signal_arm_edge_expiry_long_reclaim=true
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 получает защиту после +70 bps MFE. Если цена отдает 50 bps от лучшей точки, директор закрывает позицию с reason=position_trail. После такого выхода он ждет 8 s300-кадров и разрешает не более двух повторных входов в текущей фазе, только когда цена причинно возвращает прежний high-water. Ложный reclaim закрывается после движения 150 bps против нового long. Если последующий signal_arm short не доказывает edge и истекает в единогласно бычьей фазе, директор блокирует новый phase-long до закрытого s300-кадра выше цены выхода short; штатный recovery при этом сохраняет одну long-попытку с cooldown 4 кадра. Исчерпанный reclaim, который остается заблокированным 168 кадров (14 часов), один раз переносится к текущему close плюс 10 bps. Timestamp блока сохраняется через restart. Это позволяет продолжить доказанный тренд, не превращая recovery в безусловный фоновый long.

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

если short был открыт после signal_arm confirmation, на седьмом s300-кадре
не набрал 10 bps MFE и цена вернулась к entry, директор закрывает его
по signal_arm_edge_expiry; причинный down-вход сохраняется как bounded re-arm
и требует нового снижения на 50 bps в течение 144 кадров, максимум два раза;
если 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, next-signal разворота и 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 шорта/опасности
fee=10 bps per closed trade
2026-01-01..2026-09-02 -> return=+3547.68%, mark=+3547.68%, peak-to-trough DD=28.86%, trades=317, endpoint=flat

Это не делает режим безопасным. Slow-phase selector калибрует чувствительность, но не выбирает long/short. Carry-слой закрывает пропуск монотонного роста, consensus блокирует противоречивые long-входы, а lifecycle-контур ограничивает отдачу доказанного short-движения, закрывает бесполезное зависание и разрешает повторный вход только после нового подтверждения. Funding, slippage и liquidation в replay не учтены. Обычный signal-short в текущем профиле входит на 67.5% целевой экспозиции и добирается до 5.25 после 30 bps подтверждения. Сигнал, закрывающий long, сразу открывает short на 5.25. DD36 дополнительно инвалидирует только ранний low-MFE signal short при устойчивом бычьем подтверждении окон 24/48. Поверх него main-профиль после прибыльного trail-выхода ждёт rebound/rejection 20/20 bps, фиксирует минимум arm и открывает short 5.25 только после отдельного последующего пробоя этого минимума ещё на 25 bps. Только этот источник ведётся MFE trail 50/25. Повторный same-side Decima-сигнал теперь закрывает уже открытый signal_arm short только при MFE 15..25 bps и текущем результате не выше -5 bps; исторически это условие сработало один раз и вернуло +824.79 п.п. realized return относительно предыдущего forward checkpoint. Так решение не может использовать минимум, сформированный позже точки входа, а replay и live исполняют один причинный контракт. Старый результат +6500.48% относится к архивному rejection-frame варианту и не является текущей production policy.

Архивное исследование органов сопровождения

Stateful position manager работает по явным правилам MFE, giveback, возраста и источника позиции. Рядом с ним исследуются две небольшие Decima-личности, которые слушают саму развязку открытой сделки:

long companion  -> ищет разрушение уже открытого long
short companion -> ищет момент отдачи небольшого доказанного short-хода

Органы не выбирают вход, сторону или exposure. В fixed-entry replay они могут только досрочно закрыть позицию своей стороны. Будущий scale-in после такого выхода не начисляется, поэтому результат остается причинным.

На базовой траектории 2026-01-01..2026-08-09 при той же комиссии 10 bps:

base:       +1484.22%, 267 trades, DD 38.82%
long only:  +1687.58%, 24 changed exits
short only: +1744.76%,  4 changed exits
both:       +1981.57%, 28 changed exits, DD 38.82%

Это пока shadow-кандидаты, а не часть production order control. После 1 июня они изменили всего пять выходов, в августе не сработали и не исправили августовский минус. Их задача на следующем интервале - подтвердить, что улучшение связано с повторяемым состоянием позиции, а не с подгонкой нескольких исторических развязок.

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-файлом.