Вы получили убедительный результат: криптостратегия приносит основную доходность между 13:00 и 14:00 UTC. Вы проверили комиссии, повторно запустили бэктест и протестировали сигнал на бумажном счёте. Теперь вы готовите версию для рынка акций США, и самым прибыльным, похоже, оказывается час с 09:30 до 10:30 по времени Нью-Йорка.
Прежде чем доверять результатам, проверьте, что происходило с часами. Из-за перехода США на летнее время открытие торгов в Нью-Йорке сдвигается на час относительно UTC. Если признаки, обозначения сессий и заявки используют разные представления времени, стратегия может эксплуатировать границу календаря, а не повторяющуюся закономерность рынка.
Отказываться от исследований внутридневных закономерностей не нужно. Нужно определить, о каких именно часах идёт речь в гипотезе, а затем последовательно использовать это определение во всех частях бэктеста.
Для начала уточните, что означает этот час
«Первый час» звучит точно, пока вы не укажете, по каким часам его отсчитываете. Это могут быть первые 60 минут после открытия NYSE, период с 09:30 до 10:30 по местному времени Нью-Йорка или фиксированный интервал UTC. В течение части года эти определения совпадают, но при переходе на летнее время расходятся.
Для гипотезы по акциям используйте местное время торговой сессии: 09:30 по Нью-Йорку означает 09:30 и при EST, и при EDT. Для гипотезы по криптовалютам нужной переменной может быть фиксированный час UTC. Крипторынок работает круглосуточно, поэтому у него нет открытия торговой площадки, от которого можно было бы вести отсчёт.
Зафиксируйте определение до настройки стратегии. «Торговать в первый час после открытия основной сессии» — проверяемая гипотеза. А формулировка «торговать в час, когда сигнал работает лучше всего» позволяет оптимизатору выбирать не только стратегию, но и способ отсчёта времени.
Где возникают несоответствия во времени
Представим, что данные по акциям хранятся в UTC, код признаков группирует строки по часам UTC, а правила исполнения открывают позиции в 09:30 по Нью-Йорку. После перехода на летнее время открытие рынка сдвигается с 14:30 UTC на 13:30 UTC. Теперь признак с меткой «первый час», определённый по часовому интервалу UTC, охватывает уже другой отрезок торговой сессии.
Похожая ловушка возникает при построении баров по временным меткам. Если сначала группировать данные в UTC, а затем переводить метки в часовой пояс Нью-Йорка, границы интервалов могут оказаться неожиданными. Особенно это заметно весной, когда один местный час пропускается, и осенью, когда один и тот же час повторяется дважды. Временная метка вроде 01:30 по местному времени в то осеннее воскресенье неоднозначна, если к ней не приложено смещение UTC и она не представлена в UTC.
Календарь может иметь значение и для результата по криптовалютам. Стратегия, ориентированная на часы UTC, месяцами может совпадать с активностью рынка США, а затем казаться сдвинувшейся при переводе часов в США. Это не делает стратегию неверной, но меняет вывод, который можно из неё сделать. Возможно, вы измерили закономерность, привязанную к фиксированному часу UTC, который иногда совпадает с открытием торгов в США, а не эффект, связанный с самим открытием.
Включите часы торговой сессии в проверку
Храните временные метки событий в UTC как основной источник данных. Вычисляйте поля местного времени сессии на основе именованного часового пояса, например America/New_York, используя базу часовых поясов, которая учитывает изменения правил в прошлом. Не задавайте жёстко «UTC минус пять» или «UTC минус четыре»: ни одно из этих смещений не соответствует времени Нью-Йорка круглый год.
| Решение | Пример для акций | Пример для криптовалют |
|---|---|---|
| Часы гипотезы | Минуты с открытия основной сессии | Час суток по UTC |
| Источник расписания сессий | Биржевой календарь с праздниками и сокращёнными днями | Непрерывный календарь UTC |
| Время выставления заявки | Следующее событие, при котором можно исполнить заявку после сигнала | Следующее событие, при котором можно исполнить заявку после сигнала |
Затем отдельно проверьте недели вокруг перехода на летнее и зимнее время. Сравните результаты до и после каждого перехода и выясните, остаётся ли лучший интервал привязанным к торговой сессии или фиксированному часу UTC. Если вы перебрали много часов, дат и смещений в поисках лучшего результата, учтите этот поиск при оценке переобучения: выбор способа отсчёта времени был ещё одним экспериментом.
Часовой пояс — это набор правил, а не число часов, которое нужно вычесть. Храните события в UTC, а местное время рынка вычисляйте, когда оно понадобится.
Что нужно проверить в тестовом запуске
Переводя стратегию на бумажную торговлю, записывайте для каждого события временную метку UTC и минуту относительно начала сессии. Так вы быстро заметите, если стратегия считает, что рынок открывается в 09:30, а на самом деле отправляет заявку в 10:30 по местному времени. Также проверяйте праздники и сокращённые дни: расписание обычной сессии, скопированное на все будни, легко добавит вымышленные сделки в дни, когда биржа закрыта.
При переводе часов не подгоняйте сигнал, чтобы кривая доходности выглядела привычно. Сначала проверьте заявленную гипотезу, календарь и время выставления заявок. Если результат сдвигается вместе с торговой сессией, вы узнали кое-что о поведении рынка в рамках сессии. Если он остаётся привязанным к тому же часу UTC, вывод будет другим. Бэктест должен сохранять это различие.
← Все статьи


