Директор и риск¶
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-файлом.