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

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

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

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

mode=phase
phase-lookback-frames=224
phase-threshold-bps=0.0
same-side-signal=close-if-profit
neutral-action=skip
entry-exposure=0.5
fee-bps=4.0
capital=100

phase-lookback-frames=224 на s1800 означает длинную фазовую память. Это не быстрый индикатор. Такая память не дает s300-сигналу торговать против режима.

Почему close-if-profit стал базой

Более простой режим keep может держать позицию дольше, но хуже управляет моментами, когда Decima снова слышит тот же side уже после движения.

close-if-profit делает same-side сигнал предохранителем:

если позиции нет -> можно открыть
если позиция того же side и есть прибыль -> можно закрыть
если позиция того же side и прибыли нет -> держать/не дергаться

Это уменьшает хаотичную мясорубку на shorts и лучше соответствует идее "забрать, когда рынок дал".

Position manager

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

Поэтому текущая v42 добавила отдельный position manager.

Его задача:

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

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

Текущие параметры short-выхода:

short_trail_activate_bps=300
short_trail_giveback_bps=350

Смысл:

если short набрал хотя бы 300 bps открытой прибыли,
position manager начинает сопровождать MFE;
если затем рынок отдает 350 bps от лучшей точки,
позиция закрывается с reason=position_trail.

Это не stop-loss и не take-profit. Это защита уже набранного движения.

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

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

После добавления position manager текущая all-history база стала:

UTC daily Memory 288 + position manager
entry_exposure=0.5 -> return=+37.31%, max_drawdown=8.04%
entry_exposure=1.0 -> return=+85.79%, max_drawdown=20.05%

Это делает position manager частью текущей базы v42, а не экспериментальным украшением.

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

Базовая текущая экспозиция:

entry-exposure=0.5

При капитале 100 это означает, что один вход использует половину капитала в модели. При сравнении доходности это отдельный фактор:

return в отчетах зависит от exposure

entry-exposure=1.0 означает, что позиция использует 100% equity как notional в модели. Это не биржевое плечо. Если появляется futures leverage, эффективный риск считается отдельно:

effective_exposure = entry_exposure * leverage

Например, entry_exposure=1.0 и leverage=3 означает, что движение рынка против позиции на 5% дает около 15% удара по equity до комиссий, funding и slippage.

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

После июньских replay-проверок стало ясно, что Whaler работает не как один жесткий режим, а как несколько профилей риска одного директора.

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

conservative:
  entry_exposure=0.5
  same_side_signal=close-if-profit
  leverage=1
  цель: стабильная paper/live база

balanced:
  entry_exposure=1.0
  same_side_signal=close-if-profit
  leverage=1
  цель: полный размер без усложнения re-entry

aggressive:
  entry_exposure=0.5
  same_side_signal=close-and-reopen-probe
  reentry_exposure=0.1
  confirm_exposure=1.0
  confirm_bps=80
  leverage=1
  цель: брать повторный заход только после подтверждения

max_aggression:
  entry_exposure>=1.0
  возможен short-only или phase-biased режим
  возможен leverage
  обязателен жесткий 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. Без дополнительных risk gates он увеличивает drawdown сильнее, чем базовый close-if-profit.

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

  • капитал;
  • плечо;
  • 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
skip: neutral phase
skip: already in position, not profitable
close: same-side close-if-profit
close: position_trail
skip: cooldown
skip: max trades per day
skip: запас прочности не прошел

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

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

Директор:

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

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

Decima говорит:

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

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

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

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