Бэктест показал годовую доходность 20%. В нём использовались данные за 8 лет, 1,640 сделок и корректное разделение по скользящему окну. Затем мы заменили текущую историю поставщика значениями, зафиксированными на тот момент, и преимущество упало до 3%.
Удивительным оказалось не исходное значение доходности, а 17 процентных пунктов, зависевших от пересмотренных данных. Такое знание задним числом может скрываться в экономических публикациях, финансовых показателях компаний, составе индексов и даже в, казалось бы, простых рыночных полях. Исторические данные показывают, что источник утверждает сейчас. Данные на момент времени показывают, что могла знать ваша стратегия тогда.
Почему исторические данные меняются после события?
Некоторые значения сначала публикуются как предварительные, а затем исправляются. Экономический показатель, опубликованный в пятницу, могут пересмотреть в следующем месяце. Компания может повторно раскрыть пересчитанный показатель прибыли. Поставщик данных может исправить ошибочную котировку, заполнить пропущенный интервал или заменить предварительное значение окончательным. Если база хранит только последнее значение, все эти изменения выглядят так, будто они всегда были верными.
Это важно, если стратегия ранжирует компании по опубликованной выручке или торгует на рынке после запланированной публикации данных. Если она получает исправленное значение на несколько месяцев раньше срока, бэктест снабжает её информацией, которой не было на рынке в момент принятия решения. Расчёт сигнала может быть безупречным, но на вход ему всё равно подана не та версия истории.
Здесь легко попасть в ловушку: поле с названием date часто обозначает период, к которому относится значение, а не момент, когда оно стало доступно. В строке квартальной выручки может быть указано 31 марта, хотя публикация состоялась только в мае. Эта дата относится к периоду работы компании, а не к набору информации, доступному стратегии.
Какую временную метку использовать в бэктесте?
Отслеживайте отдельно период действия значения и время его доступности. По возможности храните также время публикации и время получения системой. Стратегия могла использовать значение только после его публикации и получения системой; если эти моменты различаются, для консервативного воспроизведения берите более поздний.
| Временная метка | Что она обозначает | Для чего нужна |
|---|---|---|
| Время действия | Период или событие, к которому относится значение | Группирует наблюдения по измеряемому показателю |
| Время публикации | Когда источник опубликовал эту версию | Не даёт публикации появиться раньше, чем она состоялась |
| Время получения системой | Когда ваша система получила эту версию | Учитывает задержки доставки и поздние дозагрузки |
Предположим, квартальные продажи компании относятся к периоду с января по март, отчёт о них опубликован 8 мая в 16:15 по восточному времени США и поступил в ваше хранилище для исследований в 16:17. Стратегия, принимающая решение на закрытии рынка 8 мая, не может использовать этот отчёт, если решение по цене закрытия было принято в 16:00. Стратегия, принимающая решение на следующее утро, уже может. Одна лишь дата окончания квартала не позволяет ответить ни на один из этих вопросов.
Как проверить, влияет ли пересмотр данных на результат?
Запустите одну и ту же стратегию дважды: сначала на версии данных, доступной на момент каждого исторического решения, затем на последней пересмотренной истории. Зафиксируйте допущения об исполнении, вселенную инструментов и код. Разница покажет чувствительность результата к пересмотрам, а не станет сравнением разных стратегий.
Затем выясните, откуда берётся разрыв. Меняется ли результат в дни публикаций? Сосредоточены ли самые большие расхождения в нескольких компаниях с пересчитанной отчётностью или в исправленных наблюдениях? Совершает ли стратегия сделки до соответствующей публикации? Небольшая проверка на уровне событий часто объясняет больше, чем ещё один график накопленной доходности.
Эти цифры приведены для примера и не означают универсальный штраф. Полезный результат — парное сравнение для вашей стратегии при одинаковых сделках и издержках, насколько это возможно. Если версия с пересмотренными данными показывает намного лучший результат, прежде чем доверять итоговой цифре бэктеста, выясните, какие поля и даты объясняют эту разницу.
Что фиксировать при аудите данных на момент времени?
Начните с полей, которые действительно использует ваша стратегия. Для каждого укажите источник, смысл временной метки, политику пересмотра и возможность получить предыдущие версии. Уточните у поставщика, как представлены исправления: перезаписанными строками, новыми строками с версиями или отдельным журналом аудита. Пометка «исторические данные» на странице продукта ничего из этого не проясняет.
- Храните каждую версию вместе со временем публикации или первой доступности.
- Связывайте признаки с решениями по времени доступности, а не по меткам периода.
- Сохраняйте неизменяемый снимок или версию источника, чтобы можно было воспроизвести запуск.
- Помечайте значения, поступившие с задержкой, пересмотренные или не имеющие надёжной истории.
И придерживайтесь практических рамок. Если стратегия использует только сделки и бары с биржи, пересмотры экономических данных могут быть несущественны. Но исправления баров и поздние дозагрузки поставщика всё равно могут иметь значение, особенно если сигнал зависит от малоликвидного рынка или точного временного окна вокруг события.
Если история на момент времени недоступна
Не считайте молча сегодняшнее значение вчерашним. Отметьте это поле как ограничение, исключите его из утверждений, основанных на исторической доступности, или внесите консервативную задержку и покажите, как изменится результат. Запаздывающий заменитель может пригодиться в исследовании, если задержка явно указана и ограничение описано вместе с результатом.
Задача бэктеста — восстановить решение на основе набора информации, существовавшего в тот момент. Если данные показывают только последнюю версию, у честного результата есть чёткая граница: он позволяет проверить стратегию на восстановленной сегодня истории, но не установить точно, что мог видеть участник рынка в прошлом.
← Все статьи

