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