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