Исходные данные

У одного пользователя могут одновременно работать несколько стратегий. Одна выставляет пассивную заявку на продажу контракта, другая отправляет встречную покупку. В API Kalshi поведение при таком пересечении зависит от режима self-trade prevention. Документация Create Order V2 описывает два варианта обработки. Kalshi API, Create Order V2 ↗

Какую заявку отменяет биржа

В режиме taker_at_cross движок прекращает исполнение входящей заявки, когда она дошла до собственной встречной заявки пользователя. Уже сопоставленные частичные исполнения остаются в силе. В режиме maker биржа отменяет собственную заявку, которая стояла в книге, и продолжает сопоставление входящей. Следующая доступная встречная заявка может принадлежать другому пользователю.

Условная заявка на десять контрактов

Первые три контракта исполнились против другого участника. На следующем уровне стоит собственная заявка пользователя. При taker_at_cross в учёте останутся три исполнения, а незаполненный остаток входящей заявки будет отменён. При maker из книги удалится собственная встречная заявка. Что случится с остатком входящей, зависит от дальнейшей ликвидности и её условий.

Для журнала нужны два отдельных результата. Первый показывает, сколько контрактов исполнено и по какой цене. Второй фиксирует, какая заявка была отменена. Если робот увидит только итоговую отмену входящей заявки и обнулит всю операцию, он потеряет из расчёта уже исполненные три контракта. В тесте стоит воспроизвести пересечение после частичного исполнения и проверить итоговый остаток позиции.