Модуль 11 сказал: edge — это отказ. Этот модуль — про самую тонкую ошибку, которую refusal-first гейт обязан не допустить: попытку «обойти» токсичный риск, уменьшив размер позиции.
Хейркат раскладывается на части
Fair-value движок раскладывает котируемую ставку на baseline минус пять структурных хейркатов: peg, funding, oracle, liquidity, protocol. Сумма этих хейркатов говорит, сколько из ставки — плата за риск, а не настоящий carry. Ключ в том, что один из пяти — liquidity — зависит от размера позиции (большой тикет тяжелее выйти, выше impact), а остальные четыре — нет.
Два вето, не одно (rate_policy.py)
В evaluate_entry TAIL_VETO состоит из двух частей:
- (1a) Структурное вето токсичности:
if decomp.structural_haircut > params.max_structural_haircut→ REFUSE. Этот cap = 0.06. Поскольку он не включает liquidity, книга с токсичным хвостом отказана на любом размере. - (1b) Экономическое вето по total:
if decomp.total_haircut > params.max_total_haircut→ REFUSE. Этот cap = 0.12. Даже структурно чистая книга может стать tail-comp, когда добавлен её собственный exit-impact.
Книга может провалиться либо на (1a) структурной токсичности (нельзя обойти размером), либо на (1b) экономике с учётом ликвидности (это обойти можно — и это правильно: меньший, реально выходимый тикет — это действительно меньше риска).
Поиграй: HaircutVetoSim
Покрути хейркаты и размер позиции. Заметь главное: уменьшение размера двигает только liquidity-член (и total) — но структурное вето либо уже сработало, либо нет, и размер на него не влияет.
Двигай ползунки риска. Структурный хейркат (peg+funding+oracle+protocol) НЕ зависит от размера. Если он превышает cap — позиция отклонена при ЛЮБОМ размере.