Привет, автор стратегии с фильтром по числу рабочих мест,
Вы разработали простое правило: после отчёта о занятости в США стратегия держит ETF на акции в течение пяти сессий, если месячный прирост числа рабочих мест превышает 175,000. Иначе она остаётся в денежных средствах. Вы запланировали вход после открытия фондового рынка, учли торговые издержки и зафиксировали порог. Затем скачали исторический ряд занятости и восстановили по нему все сигналы.
Осталась проблема с данными. Исторический экономический ряд может содержать пересмотренные оценки, которых не было в распоряжении стратегии на даты, когда она якобы торговала. Чтобы честно протестировать макросигнал, нужно использовать версию, доступную в момент каждого решения. Перенос входа на один бар вперёд не исправит ситуацию, если число опубликовали двумя месяцами позже.
У январского наблюдения несколько дней рождения
Рассмотрим эту вымышленную историю публикаций. Даты и изменения числа рабочих мест иллюстрируют механику и не являются фактическими экономическими данными.
| Публикация | Отчётный месяц | Изменение числа рабочих мест по отчёту | Действие по вашему правилу на момент публикации |
|---|---|---|---|
| 7 февраля, 08:30 ET | Январь | +150,000 | Остаться в денежных средствах |
| 7 марта, 08:30 ET | Январь, пересмотрено | +185,000 | Не меняет решение, принятое в феврале |
| 4 апреля, 08:30 ET | Январь, пересмотрено повторно | +210,000 | Не меняет решение, принятое в феврале |
Если в скачанном ряду за январь указано +210,000, при воспроизведении стратегия войдёт в ETF в феврале. По фактическому правилу она должна была остаться в денежных средствах. Все цены, временные метки ордеров и комиссии могут быть верными, но вся эта сделка вымышлена.
Нельзя заранее считать, что такое загрязнение улучшает результаты. Пересмотры могут создать прибыльные или убыточные сделки, а также убрать и те и другие. Проблема в том, что симуляция отвечает на вопрос, который стратегия не могла задать в тот момент.
И январь здесь — только период, за который измеряется показатель. Это не дата, когда вы узнали его значение. Строка с меткой «1 января» не даёт права торговать по ней 1 января.
Фиксируйте историю доступности каждого значения
В вашей исследовательской таблице недостаточно указать месяц и число. Храните отчётный период, значение, временную метку публикации, идентификатор винтажа и источник. Для текущего сбора данных также записывайте, когда ваша система получила публикацию. Сохраняйте старые версии, не обновляя значения на месте.
На момент принятия решения выбирайте самую новую подходящую версию каждого наблюдения, временная метка доступности которого не позже этого момента. Затем рассчитывайте признаки по восстановленному снимку данных.
Правило извлечения данных: сначала оставьте только доступные на тот момент записи, затем выберите нужные версии и только после этого рассчитывайте сигнал. Если рассчитать признаки по сегодняшней пересмотренной истории и затем сдвинуть результат, утечка сохранится.
Пятисессионный период удержания не отменяет необходимость такого учёта. Он даёт больше возможностей выбрать консервативное время входа, но не открывает ранний доступ к пересмотрам.
В старых исследованиях у вас может быть подтверждённое время публикации, но не сохранены данные о времени получения вашей системой. Чётко разделяйте эти понятия. Можно моделировать доступ с заданной задержкой после документированного времени публикации. Но нельзя выдавать это предположение за измеренное историческое время доставки.
Также используйте временные метки с часовым поясом. Сохраняйте документированное местное время публикации и корректно конвертируйте его: фиксированное смещение UTC для Нью-Йорка даст сбой при переходе на летнее время. Позаботьтесь о себе в будущем. Вам в сентябре не придётся разгадывать название столбца, которое придумали вы в марте: date_actual_final2.
Для скользящих признаков нужен полный набор винтажей
Допустим, вы заменяете фиксированный порог условием «прирост числа рабочих мест превышает среднее за предыдущие двенадцать месяцев». Теперь нужны предыдущие наблюдения в том виде, в каком они были на момент решения, включая опубликованные к тому времени пересмотры.
Если всегда использовать первые публикации за каждый месяц, получится другой признак. Такой подход вполне допустим, если вам нужна именно история первоначальных объявлений. Но он не восстанавливает экономическую картину, доступную в конкретное утро: к тому моменту набор информации уже мог включать пересмотры данных за предыдущие месяцы.
Если вы рассчитываете месячное изменение числа рабочих мест по уровню занятости, сначала восстановите ряд уровней для нужного винтажа и только потом вычисляйте разницу. Сочетание нового значения уровня с уровнем за предыдущий месяц из старого винтажа может дать изменение, которого не было ни в одном опубликованном снимке данных.
Поэтому нужно определить, что именно означает ваш признак: первоначальные объявления, последняя доступная экономическая картина или сами пересмотры. Выражение «прирост числа рабочих мест» оставляет слишком много неопределённости.
Восстановите одну публикацию, прежде чем перезапускать расчёты за десять лет
Начать можно с ALFRED: там есть история винтажей для многих экономических рядов. Проверьте наличие данных для конкретного ряда и периода. Одна лишь дата винтажа не подтверждает доступность внутри дня; прежде чем использовать данные для сигнала в тот же день, сопоставьте их с документированным временем публикации.
Для первой проверки выберите одну публикацию и восстановите её вручную:
- Найдите архивную публикацию и зафиксируйте время публикации, отчётный месяц и первоначальное значение.
- Восстановите снимок входных данных, который стратегия получила бы до входа в сделку.
- Рассчитайте сигнал вручную и сравните его с результатом воспроизведения.
- Добавьте в хранилище данных более поздний пересмотр и проверьте, что раннее решение осталось неизменным.
Последняя проверка особенно полезна в автоматизированном исследовательском конвейере. Передавайте исследовательскому агенту пороговый момент снимка и выбранные идентификаторы винтажей вместе со значениями признаков. Даже после роста базы данных у вас должно быть достаточно свидетельств, чтобы связать сделку с конкретной публикацией.
Когда удастся воспроизвести это единственное решение, пересчитайте всю историю и сначала сравните расхождения сигналов, а уже потом — доходность. Посчитайте, сколько входов появилось, исчезло или сдвинулось из-за исправления. Эти изменения решений расскажут больше, чем одно сравнение Sharpe до и после.
Февральская сделка должна выдержать проверку данными, доступными в феврале. Оставьте апрельский пересмотр в апреле.
← Все статьи


