6 Октября 2026 · исследования

Почему в бэктесте сделка прошла по цене, которой рынок не показывал?

Почему в бэктесте сделка прошла по цене, которой рынок не показывал?

Бэктест может показать исполнение по цене, которую рынок никогда не выставлял. Обычно симулятор выводит правдоподобное на вид исполнение из неполных данных: максимума и минимума бара, средней цены или лимитной цены, по которой прошла одна сделка. В результате журнал сделок выглядит точным, но скрывает, что на самом деле предлагал рынок.

Для начала выясните, с какой ценой могло взаимодействовать ваше поручение. Бар последних сделок показывает, по каким ценам торговали в течение интервала. Но он не сообщает, какими были bid и ask в момент поступления поручения, какой объём был доступен по этим ценам и могло ли ваше поручение оказаться первым в очереди.

Почему в бэктесте исполнение происходит за пределами рыночной цены?

Для начала уточним, что значит «за пределами». Исполнение покупки ниже минимума бара или продажи выше максимума — явная ошибка в учёте или времени. Но даже исполнение в диапазоне между максимумом и минимумом может быть вымышленным: цена могла появиться до выставления поручения, на другой стороне спреда или в слишком малом объёме для его исполнения.

Возьмём минутный бар: цена открытия 100.00, минимум 99.80, закрытие 100.10. Стратегия получает завершённый бар, выставляет покупку, и симулятор исполняет её по 99.80. Возможно, минимум был достигнут в начале минуты — за 50 секунд до сигнала. Бар не доказывает, что цена 99.80 была доступна после принятия решения.

Какие данные естьЧто они подтверждаютЧего они не подтверждают
Бар OHLCVДиапазон наблюдавшихся цен сделок и объём за интервалПоследовательность цен, bid и ask или доступный объём в момент поступления поручения
Записи сделокСведения об исполненных сделках с временными метками и ценамиОстаточную ликвидность или ваше место в очереди
Котировки верхнего уровня стаканаЛучшие отображаемые bid и ask в моменты выборкиГлубину за пределами лучшего уровня или сохранение котировки между выборками
События книги ордеровИзменения отображаемой глубины и события очереди — в пределах охвата потока данныхСкрытую ликвидность, доступ к площадке или гарантированный приоритет

Ещё одна распространённая причина — путаница между средней и исполнимой ценой. Если котировка составляет 99.99 bid и 100.01 ask, покупка по средней цене 100.00 выглядит аккуратно в отчёте. Рыночная покупка обычно исполняется по ask, а при большом объёме — ещё и с учётом влияния на рынок. Если считать среднюю цену ценой исполнения, половина спреда незаметно исчезает.

Может ли лимитный ордер исполниться только потому, что рынок коснулся его цены?

Касание цены означает, что по ней прошла сделка. Но это не доказывает, что исполнился бы ваш лимитный ордер. Если впереди вас стояли другие ордера, объёма сделок по этой цене могло не хватить до вашей позиции в очереди. Кроме того, сделка могла пройти на другой площадке, пока ваш ордер стоял на своей.

Допустим, вы выставили лимитную покупку по 50.00, а после этого по этой цене прошла сделка на 200 акций. Симулятор, который ориентируется только на касание цены, исполнит все 500 акций. Более осторожная модель учитывает, сколько прошло по цене 50.00 или лучше после поступления ордера, а затем оценивает объём впереди в очереди. Без данных книги ордеров на уровне отдельных заявок размер этой очереди остаётся предположением. Оно должно быть явно отражено в результатах, а не выдаваться за достоверный факт.

В небольшой исследовательской системе я бы предпочёл явно указать это предположение и проверить диапазон значений, а не делать вид, что свечные данные раскрывают приоритет в очереди. Подходящий диапазон зависит от площадки, размера ордера и частоты сделок стратегии. Тихая акция на открытии торгов и малоликвидный криптоконтракт в 03:00 UTC — это разные задачи исполнения.

Как выбрать модель исполнения для баровых данных?

Подберите модель с учётом и данных, и того, что утверждает стратегия. Бэктест на барах может быть полезен для медленных стратегий, но исполнение должно соответствовать тому, что действительно показывают бары.

  1. Задайте время принятия решения и поступления ордера. Если сигнал использует цену закрытия бара, выставляйте ордер после закрытия. Моделируйте исполнение по следующему доступному интервалу или котировке, а не по минимуму завершённого бара, который был достигнут раньше.
  2. Используйте правильную сторону спреда. Рыночные покупки моделируйте от ask, продажи — от bid. Если у вас есть только бары сделок, оцените спред по отдельному источнику или укажите, что модель его не учитывает.
  3. Ограничьте исполнение реалистичной ликвидностью. Ограничьте долю от наблюдавшегося объёма и учитывайте комиссии и влияние на рынок. Общий объём бара не означает, что весь он был доступен по выбранной вами цене.
  4. Проверьте устойчивость предположений. Сравните исполнение на открытии следующего бара с консервативным проскальзыванием и проверьте, сохраняется ли результат при худшем исполнении. Не подгоняйте модель исполнения под прибыльность стратегии.

Это варианты моделирования, а не способ восстановить единственно верное исполнение по неполным данным. Если стратегия зависит от захвата нескольких базисных пунктов, баров может быть недостаточно, чтобы подтвердить такое утверждение.

Как выяснить, где в бэктесте появилось невозможное исполнение?

Проследите путь одной подозрительной сделки от сигнала до реестра. Храните отдельно временную метку принятия решения, отправки ордера и его симулированного поступления, использованное рыночное наблюдение, цену и объём исполнения и комиссию. Затем по порядку проверьте:

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

бэктестингрыночные данныеисполнениеинженерия данных
ПоделитьсяXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← Все статьи