Издержки криптобэктеста: комиссии, спред, проскальзывание и финансирование
Стратегия создаёт валовые сигналы, но сохраняет только чистый результат. Комиссии — лишь часть разницы: спред, задержка исполнения, неблагоприятное проскальзывание, влияние размера заявки на книгу и фьючерсное финансирование могут уничтожить небольшое историческое преимущество.
Разделите все составляющие издержек
Не объединяйте все издержки в один необъяснимый процент. Комиссия зависит от биржи, продукта, уровня аккаунта и от того, добавляет заявка ликвидность или забирает её. Спред существует ещё до отправки заявки. Проскальзывание — это разница между исходной и фактической ценой исполнения. Для бессрочных фьючерсов отдельно учитывается финансирование в моменты расчёта.
Для каждой составляющей задайте свою точку расчёта, чтобы не списать одну издержку дважды. Если исходная цена — середина спреда или последняя сделка свечи, перед проскальзыванием может потребоваться учесть спред. Если модель уже использует исполнимые цены bid и ask, второй полный спред будет двойным счётом. Влияние объёма на цену тоже не является ещё одним названием проскальзывания: оно описывает, как размер заявки поглощает доступную ликвидность. Зафиксируйте исходную цену, сторону и тип заявки, предполагаемую глубину и валюту пересчёта.
Стройте расчёт от отдельных исполнений. Для каждого из них храните время, сторону, количество, исходную и фактическую цену, предполагаемый статус мейкера или тейкера, ставку и сумму комиссии, а также связанные начисления финансирования. Только после сверки объединяйте исполнения в сделки и итог портфеля. Такой подход корректно учитывает добавления по сетке, частичные закрытия, развороты и пересчёт комиссии в валюту отчёта, а позднее позволяет сопоставить бэктест с журналами Paper и тестовой среды.
| Составляющая | Когда возникает | Как моделировать |
|---|---|---|
| Торговая комиссия | При каждом исполнении | Номинал исполнения × ставка мейкера или тейкера |
| Спред | При покупке по ask или продаже по bid | Использовать исполнимую цену соответствующей стороны книги |
| Проскальзывание | Между исходной и фактической ценой | Сдвигать цену в неблагоприятную для стратегии сторону |
| Влияние объёма | Когда заявка поглощает несколько уровней книги | Увеличивать издержки с учётом размера и ликвидности |
| Финансирование | В расчётные моменты бессрочного фьючерса | Применять историческую ставку со знаком к номиналу открытой позиции |
Считайте вход, добавления и выход отдельно
Одна сделка с входом и выходом содержит как минимум два исполнения. Стратегии Grid и DCA платят комиссию и пересекают спред при каждом добавлении, частичном закрытии и окончательном выходе. Поэтому оборот нередко важнее объявленной ставки комиссии: считайте издержки по фактическим смоделированным исполнениям, а не только по числу завершённых сделок.
Сверяйте расчёт на трёх уровнях. Сумма комиссий и ценовых поправок по исполнениям должна совпадать с издержками завершённых сделок; итоги сделок — с отчётом портфеля; разница между валовым и чистым результатом — с комиссиями, спредом, проскальзыванием, финансированием и другими явно названными компонентами. Расхождения из-за округления или пересчёта валюты нужно объяснять, а не прятать в остаток. Несверенная модель не готова к анализу чувствительности.
общая комиссия = Σ (номинал каждого исполнения × применимая ставка комиссии)Учитывайте каждое исполнение, а не только первоначальный размер позиции. Если комиссия списывается в другом активе или применяется скидка, пересчитайте сумму в валюту отчёта по зафиксированному правилу.
Моделируйте спред и проскальзывание в неблагоприятную сторону
Покупка по рыночной цене обычно исполняется по доступным ask, а продажа — по bid. Исключение возможно для лимитной заявки, которая заранее стояла в книге и дождалась встречной ликвидности. Защитные механизмы биржи для рыночных заявок не гарантируют последнюю отображаемую цену. Чем быстрее рынок, тоньше книга и больше заявка, тем выше неопределённость исполнения.[3]
неблагоприятная цена покупки = базовая цена × (1 + проскальзывание б.п. / 10 000)Для продажи вычтите корректировку. Запускайте несколько сценариев вместо того, чтобы утверждать, что одно фиксированное значение базисного пункта представляет каждый инструмент, размер и режим волатильности.
Добавьте финансирование и риск ликвидации для фьючерсов
Пока бессрочная фьючерсная позиция открыта, стратегия может как получать, так и выплачивать финансирование. Плечо уменьшает требуемую маржу и приближает ликвидацию, но не уменьшает комиссию, рассчитанную от номинала позиции. В отчёте финансирование должно быть показано отдельно и с правильным знаком, а модель не должна позволять капиталу пройти через состояние, в котором позиция уже была бы ликвидирована.
Повышайте издержки в стресс-сценариях до изменения решения
Рассчитайте базовый сценарий и как минимум два менее благоприятных. Повышайте комиссию, увеличивайте проскальзывание и задерживайте исполнение. Задача не в том, чтобы угадать точную будущую цену, а в том, чтобы понять, какой уровень издержек сделает чистый PnL, просадку или показатели с поправкой на риск неприемлемыми.[1][2]
Выразите чувствительность как запас до безубыточности. Разделите оставшееся чистое преимущество на оборот или число исполнений и оцените, сколько дополнительных базисных пунктов на одно исполнение его уничтожит; затем подтвердите оценку повторным запуском. Сравните запас с отклонениями, наблюдаемыми в Paper и тестовой среде по разным инструментам и режимам волатильности. Если всё преимущество меньше обычных колебаний спреда и качества исполнения, стратегию следует отклонить или переработать.
| Сценарий | Комиссии | Проскальзывание | Решение |
|---|---|---|---|
| Базовый | Ожидаемый уровень аккаунта | 5 б.п. на рыночное исполнение | Зафиксировать, но пока не одобрять |
| Консервативный | Следующий, менее выгодный уровень | 10 б.п. | Результат должен оставаться в пределах риска |
| Стрессовый | Тейкер при каждом исполнении | 20 б.п. | Определить границу безубыточности |
Проверьте издержки в одном отчёте
Возьмите существующий журнал сделок и заново рассчитайте чистый PnL по отдельным исполнениям.
- Перечислите каждое исполнение и независимо рассчитайте его номинал, ставку и сумму комиссии.
- Оцените спред и неблагоприятное проскальзывание для входа, добавлений и выхода.
- Добавьте финансирование со знаком для каждого расчётного момента, который пересекала фьючерсная позиция.
- Повторите расчёт с консервативными предположениями и запишите, при каком уровне издержек решение меняется.
Контрольный список модели издержек
Правдоподобный чистый результат должен отвечать на все вопросы ниже.
- Статус мейкера или тейкера соответствует фактически смоделированному поведению заявки.
- Каждое исполнение, включая добавления по сетке и частичные выходы, увеличивает издержки.
- Спред, проскальзывание и влияние объёма на цену считаются разными составляющими.
- Финансирование учитывается по времени, со знаком и отдельно от торгового PnL и комиссий.
- Стратегия выдерживает документированный менее благоприятный сценарий издержек.
Почему модель издержек остаётся оценкой
Исторические свечи не показывают будущую позицию заявки в очереди и полную реакцию книги на ваш объём. Комиссии, уровни аккаунта, скидки, ставки финансирования, ликвидность и правила инструментов меняются. Стресс-тест задаёт границы решения, но не обещает конкретную цену будущего исполнения и не устраняет влияние заявки на рынок.
Источники и дополнительное чтение
Поведение продукта сверено с документацией и кодом SteadyEdge, а изменчивые сведения о биржах и платформах ведут на актуальные официальные источники.
Определите запас стратегии по издержкам
Откройте отчёт, в котором отдельно показаны комиссии и финансирование, и рассчитайте максимальное дополнительное проскальзывание, которое стратегия выдержит до нарушения критерия принятия.