Модель проскальзывания, которая не льстит вашему бэктесту
Предположение, что вы исполняетесь по лучшей цене, — самый частый способ для бэктеста соврать. Грубая, но измеренная модель слиппеджа стоит больше изощрённой догадки.
Инженеры Vizanix · об авторе
- РАЗДЕЛ
- Исследование и проверка
- ОПУБЛИКОВАНО
- 2026-08-31
- ГЛАВ
- 5
- ЧИТАТЬ ДАЛЬШЕ
- 3
- ЯЗЫК
- написано на русском
В любом бэктесте есть модель исполнения, написал её кто-то или нет. Значение по умолчанию — вы исполняетесь по запрошенной цене — это модель, и она ошибается в направлении, всегда выгодном стратегии.
Три уровня честности
Уровень 0: без слиппеджа. Исполнение по лучшей цене. Годится для первой проверки на здравый смысл и бесполезно для решения о выходе в бой. Любая стратегия с малым преимуществом на этом уровне полностью вымышлена.
Уровень 1: фиксированная стрижка. Считать N базисных пунктов против вас на каждом рыночном ордере. Грубо, но ставит издержку в правильном направлении и заставляет преимущество брать планку. Если больше ничего — делайте хотя бы это.
Уровень 2: по глубине. Пройтись по записанному стакану и посчитать, что ваш объём реально бы съел. Это честная версия, и она требует записанного стакана — поэтому фаза сбора идёт первой.
def walk_book(levels, qty):
"""Во что этот объём реально обходится против записанной глубины."""
filled = cost = 0.0
for price, size in levels:
take = min(size, qty - filled)
cost += take * price
filled += take
if filled >= qty:
return cost / filled # средневзвешенное исполнение
return None # глубины не хватило — честный ответ «вы бы не смогли»Возврат None важен. Бэктест, который молча исполняет объём, неподъёмный для стакана, тестирует рынок, которого не было. Вернуть ничего и пропустить сделку правдивее, чем экстраполировать.
Измерьте вживую, потом калибруйте
Любая модель остаётся догадкой, пока её не сравнили с реальностью. Измерение простое, и большинство операций его не делает:
# Логируйте на каждом исполнении. Это единственная настоящая цифра слиппеджа.
slip_bps = (fill_price - decision_mid) / decision_mid * 10_000
if side == "sell":
slip_bps = -slip_bps
metrics.observe("slippage_bps", slip_bps,
tags={"symbol": symbol, "order_type": order_type, "size_bucket": bucket(qty)})После нескольких тысяч исполнений у вас есть распределение. Сравните его медиану и 95-й перцентиль с тем, что предполагал бэктест. Если бэктест использовал один базисный пункт, а реальность даёт четыре, каждый исторический результат надо перечитать.
Что на него влияет
| Фактор | Эффект |
|---|---|
| Размер ордера относительно глубины | Доминирует. Всё остальное вторично. |
| Волатильность в момент ордера | Сильный — середина уходит, пока вы в полёте |
| Срочность | Рыночные ордера платят; терпеливые лимитки нет, но рискуют не исполниться |
| Время суток | Более тонкие стаканы в тихие часы |
| Идёт ли рынок против вас | Adverse selection: хуже ровно тогда, когда это важно |
Последняя строка — причина, по которой средний слиппедж занижает издержку. Ваши худшие исполнения скучиваются в ваши худшие моменты, поэтому среднее льстит, а болит хвост. Моделируйте 95-й перцентиль, а не медиану.
Лимитным ордерам нужна другая модель
Для лимитки вопрос не в цене — вы получаете свою цену или ничего. Вопрос в том, исполнится ли она, и бэктест, исполняющий каждую лимитку, чьей цены коснулись, оптимистичен специфическим образом: он игнорирует позицию в очереди.
Разумное приближение: требовать, чтобы цена прошла сквозь ваш уровень, а не просто коснулась его, прежде чем засчитать исполнение. Консервативно и убирает основную часть фантазии. Если есть полные данные стакана — моделируйте позицию в очереди как следует.
Практический минимум
- Применяйте фиксированную консервативную стрижку с первого дня. Никогда не тестируйте на нуле.
- Логируйте реализованный слиппедж на каждом живом исполнении, с разбивкой по размеру.
- Раз в квартал калибруйте допущение бэктеста по измеренному распределению.
- Используйте 95-й перцентиль для решений о риске и медиану для ожиданий.
- Прогоняйте бэктест по сетке слиппеджа: если прибыльность умирает между 1 и 5 базисными пунктами, вы дёшево узнали нечто важное.
Статья описывает инженерную практику. Это не инвестиционная рекомендация. Vizanix разрабатывает программное обеспечение и не обещает торговую доходность.