Официальное закрытие в файле по акциям выглядит как любая другая цена. Метка времени 16:00:00 Eastern, одно число, готово к исполнению. Дневные сигналы его маркируют. Ребалансировки бьют в него. Исследовательский агент воспримет его как котировку, которая сидела в стакане и ждала вас.
Закрытие — это аукцион, а не котировка. Это цена кросса заявок on-close, которые должны были быть приняты до отсечки. Если бэктест исполнился там, не вступив в этот пакет, он взял принт, частью которого вы бы не были.
Исполнение по 16:00 так, будто кросс был рыночной заявкой
Обычная уловка: посчитать сигнал на закрытии или сразу перед ним, исполнить по официальному закрытию, проставить 16:00. В тихий вторник по AAPL ложь — несколько центов. В дни, которые доминируют в книге с ежедневной ребалансировкой, это вся сделка.
В 16:00:00.000 кросс закрытия идёт или только что прошёл. Исполнимая заявка, которую вы отправите в этот момент, в этот кросс не попадёт. Она приземлится в том, что осталось: остаточный видимый объём, неполный лот, продлённая сессия на ARCA или Nasdaq. Этот принт может быть в двух центах от официального закрытия или в сорока базисных пунктах, и это другой пул ликвидности. На реконституции Russell, на конце месяца или в пятницу тройного ведьмовства закрытие часто составляет двузначную долю дневного объёма. Это и была ликвидность. Вас в ней не было.
Мы случайно проторговали это на бумаге. Подкрутка параметра приземлилась в 15:48. Бэктест по-прежнему исполнял каждое имя по официальному закрытию. OMS отправил обычные рыночные заявки в 16:00:03, потому что никто не подключил MOC. Принты постмаркета, горстка отклонений и недобор в 19 базисных пунктов относительно файла в день, когда файл говорил, что мы флэт к закрытию. Стратегия не сломалась. Сломалось правило исполнения.
Я до сих пор думаю о 15:49 как о физическом месте. Кто-то меняет вес. Кто-то другой смотрит на часы. Отсечке всё равно, кто из вас прав.
MOC — это заявка, которая на самом деле запрашивает этот кросс, и даже MOC — не обещание. Халт, пауза LULD, отменённый аукцион, имя, которое так и не открылось: вы можете быть флэт в 16:00 с рабочей on-close, которая умирает. LOC имеет право промахнуться полностью. Если кросс — $40.12, а ваш лимит — $40.00, вы ничего не держите. Куча бэктестов всё равно записывает закрытие.
Хуже: некоторые вендорские файлы хранят композитное закрытие, которое никогда не печаталось ни на одной площадке. К композиту нельзя присоединиться. Если стратегия отправила бы NYSE MOC, значимое исполнение — это кросс NYSE, в том размере, который аукцион поглотил бы.
Называть последний принт регулярной сессии закрытием
Некоторые пайплайны принципиально отвергают официальное закрытие и берут последний принт SIP до 16:00, потому что этот принт хотя бы «случился». На mega-cap последний и официальный часто стоят в центе или двух друг от друга, и вы не заметите. На mid-cap последний принт может быть 200 акций в 15:59:51, подписанный тем, кто снял остаточный display. Официальное закрытие двумя секундами позже — это кросс на миллион акций по другой цене.
Индекс, корзина создания ETF и каждая ребалансировка MOC торговали кросс. Ваш бэктест торговал остаток. И к последнему принту не прилагается ваш размер. Если этот принт — 400 акций, а ваш клип — 5,000, вы не получили эту цену. Вы получили метку времени, которая случайно оказалась последней.
Я видел файл по mid-cap, где last-print против официального закрытия сдвинулся на 28 центов в четверг ребалансировки. Бэктест, который брал last, выглядел более «подкованным в микроструктуре». Это был просто другой, более тонкий рынок, и он всё равно предполагал, что мы могли быть теми 200 акциями.
Сдвигать исполнение на завтрашнее открытие ради консервативности
Третья увёртка всплывает на код-ревью как комментарий: не предполагайте, что мы можем торговать закрытие, поэтому исполняйте на следующем открытии. Звучит по-взрослому. Это строит другую стратегию.
Сигнал close-to-close, исполненный на следующем открытии, съел ночной гэп. Для многих факторов по акциям этот гэп — большая часть хода, которым вы думали владеть. Исполнение на открытии не делает бэктест осторожным. Оно переносит P&L в сессию, которую вы не собирались торговать, и бросает вас в аукцион открытия, который вы тоже не моделировали.
На бумаге эти обломки легко прочитать неправильно. Дневной P&L бэктеста по-прежнему совпадает с сигналом. Бумажная книга держит ночь индексного гэпа и утро проскальзывания opening-cross. Потом люди спорят про implementation shortfall, хотя честное описание в том, что две системы делают не одну и ту же сделку.
Но открытие — тоже аукцион. Если вы пропустили вчерашнюю отсечку, вы не получаете автоматически чистый last на 9:30. Вы получаете механику MOO/LOO, имбаланс и гэп. Называть это консервативным исполнением закрытия — просто прятать второй несмоделированный кросс под добродетельным комментарием.
| Исполнение, которое вы записали | Что площадка на самом деле требовала | Как выглядят обломки |
|---|---|---|
| Официальное закрытие, без типа заявки | MOC или LOC, принятые до отсечки этой площадки | Принт постмаркета, отклонение или композитная цена, которую никто не хостил |
| Последний принт SIP до 16:00 | Сделка, в которой вы могли быть, в вашем размере | Остаток в 200 акций, принятый за исполнение клипа |
| Следующее открытие как «более безопасное» закрытие | Модель opening-cross плюс ночной гэп | Другая стратегия, всё ещё аукцион, всё ещё промах |
Честная развилка невелика. Либо исследовательский контракт говорит, что мы в закрытии, и тогда заявка — on-close, с меткой времени до 15:50 на NYSE или до 15:55 на Nasdaq, с размером относительно ожидаемого объёма закрытия, и ей позволено истечь без исполнения, если это LOC. Либо мы не в закрытии, и тогда постмаркет или следующее открытие — именованная политика со своим аукционом, а кривая капитала перестаёт носить ярлык 16:00.
Теперь мы бракуем бэктест, который записывает официальное закрытие без заявки on-close, сидящей внутри отсечки этой площадки. Это убило несколько красивых кривых дневных сигналов. Эти кривые никогда не были исполнимы по той цене, на которую претендовали.
← Все статьи


