6 Ноября 2026 · данные

В бэктесте использовался неверный срез активов на тот момент

В бэктесте использовался неверный срез активов на тот момент

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

Формирование универсума — часть стратегии. Если в реальной системе можно было выбирать только из активов, доступных на момент принятия каждого решения, бэктест должен соблюдать то же ограничение. Три распространённых упрощения его регулярно стирают.

Ошибка первая: тестировать сегодняшний список на всей истории

Представим, что сегодня вы отобрали 50 крупнейших криптовалютных бессрочных контрактов, а затем тестируете их с 2021 года. В список не попали контракты, которые исчезли, утратили ликвидность или были делистингованы. Кроме того, для прошлых дат доступны рынки, которых тогда, возможно, ещё не существовало.

Последствия легко не заметить: стратегия выглядит стабильнее, потому что провалившиеся активы исчезли из выборки. Например, правило моментум может выглядеть превосходно на сегодняшних 50 рынках, хотя историческая версия не раз вкладывалась бы в активы, которые впоследствии обвалились или были исключены из листинга биржи. Вы протестировали портфель, составленный с учётом того, чем всё закончилось.

Фиксируйте состав универсума в датированном реестре. Для каждого актива записывайте, когда он стал подходить под критерии, когда перестал им соответствовать и по какой причине. На каждом ребалансировании применяйте правила, используя только доступную на тот момент информацию. Актив должен включаться в выборку после фактического листинга и необходимого периода прогрева. Если его делистингуют, для последней позиции нужно определить порядок выхода или расчёта; удаление её строк из данных — не правило выхода.

Ошибка вторая: ранжировать по статистике, рассчитанной после принятия решения

Даже исторический универсум может содержать утечку, если правило отбора опирается на окно, полностью сформированное в будущем. «Каждый месяц торговать 20 самыми ликвидными акциями» звучит разумно, пока для ранжирования ликвидности не используют весь месяц, в котором стратегия уже должна торговать.

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

Установите отсечку для расчётов до момента отбора. Например, при ежемесячной ребалансировке в первую сессию можно ранжировать активы по 20 предыдущим завершённым сессиям, заканчивая предыдущей сессией. Затем явно укажите задержку исполнения: если рейтинг рассчитан по вчерашнему закрытию, можно ли отправить заявку на сегодняшнем открытии в рамках принятого рабочего процесса?

Правило отбораВерсия на конкретный момент времениТипичная утечка
Топ-20 по дневному обороту в долларахРанжировать по завершённым сессиям до ребалансировкиВключать день или месяц ребалансировки
Листинг на биржеИспользовать фактическое время листинга и делистингаИспользовать текущий эндпоинт со списком тикеров для прошлых дат
Минимальная историяСчитать доступные наблюдения на момент отбораТребовать, чтобы актив сохранился в будущем, для прохождения фильтра

Ошибка третья: считать отсутствие истории доказательством того, что актив не подходил

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

Последствия — аккуратный универсум с необъяснёнными пробелами. Исследователи нередко требуют полного окна ретроспективного анализа, а затем молча исключают всё, для чего его нет. Это может быть разумным правилом прогрева, но оно также намеренно отсекает недавно прошедшие листинг активы. Хуже того, если чаще всего история отсутствует у провалившихся рынков, условие «только полные данные» становится ещё одним фильтром выживших.

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

Сделайте универсум воспроизводимым

Для полезного аудита достаточно начать с одного исторического ребалансирования. Восстановите список кандидатов по датированным данным о листинге и информации, доступной на момент отсечки. Пересчитайте параметры ранжирования, используя только завершённые наблюдения. Затем сравните полученный состав со списком, который фактически использовал бэктест.

Сохраняйте вместе с запуском правило отбора, отсечку, решения о включении и исключении, а также версию источника данных. Если вы не можете объяснить, почему в определённую дату один актив вошёл в список, а другой остался за его пределами, вы пока не знаете, обнаружила ли стратегия преимущество или просто получила выборку, сформированную с учётом будущего.

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

смещение выжившихданные на конкретный момент времениформирование универсумабэктестинг
ПоделитьсяXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← Все статьи