Понимание работы со временем.

Введение

Основной технологией алгоритмической торговли QuantConnect является основанная на событиях система потокового анализа под названием LEAN. LEAN пытается смоделировать поток времени как можно точнее, представляя данные («события») вашим алгоритмам в том порядке, в котором они приходят, как вы бы испытали в реальности.
Во всех алгоритмах QuantConnect этот временной поток встроен в качестве основного обработчика событий: OnData(slice). Объект Slice представляет все данные в определенный момент времени, «квант времени». Независимо от того, какие данные вы запрашиваете, вы получаете их в порядке, созданном согласно смоделированному алгоритму времени. Позволяя вашему алгоритму видеть только настоящее и прошлое, мы можем предотвратить наиболее распространенную ошибку количественного анализа — предвзятость.

Тики, бары и граница времени

Данные поступают в двух разных «формах» в зависимости от периода времени, который они охватывают: значения точек или значения периода. У них есть разные свойства в LEAN, которые определяют, когда данные передаются вашему алгоритму. Координация передачи этих данных контролируется Time Frontier. В QuantConnect тики представляют собой значения точек, а бары имеют период.

Граница времени (The Time Frontier)

QuantConnect позволяет вашему алгоритму запрашивать данные для нескольких ценных бумаг и нескольких разрешений. Это создает ситуацию, когда одна из ваших подписок на данные готова к отправке, но другая подписка с более длительным периодом может все еще строить свой бар. Чтобы координировать эти данные, мы используем время окончания точки данных для передачи их вашему алгоритму.
Как только EndTime точки данных пройдет, она будет передана вашему алгоритму в метод OnData(). Для барных данных это начало следующего бара. Вашему алгоритму разрешен доступ только к ценным бумагам до этой Границы Времени, что не позволяет вам случайно заглянуть в будущее.
Свойство self.Time в вашем алгоритме всегда равно этой границе времени. Это также используется в качестве метки времени для любых сообщений регистрации и отладки.

Данные бара — значения периода

Данные гистограммы представляют собой объединение данных за период в один объект. В QuantConnect мы упрощаем эту задачу, предварительно объединяя миллиарды необработанных торговых тиков в торговые бары, а котировочные тики — в котировочные бары.
Закрытие бара неизвестно до начала следующего бара, что иногда может сбивать с толку. Например, ценовой бар для пятницы будет включать все тики с 00:00 пятницы до 23:59,99999 пятницы, но на самом деле он будет передан вашему алгоритму в субботу в полночь. Из-за этого любые ордера, которые вы создаете после анализа пятничных данных, будут отправлены вашему брокеру в субботу, когда большинство рынков закрыто. QuantConnect автоматически превращает ваш ордер в ордер MarketOnOpen, который будет исполнен в понедельник утром.
При отсутствии тиков в течение периода предыдущий переданный бар копируется и выдается при разрешении запроса. В QuantConnect это поведение по умолчанию для данных гистограммы называется «заполнение данных вперед». Вы можете настроить, будет ли это включено, когда вы запрашиваете данные безопасности.
QuantConnect предоставляет данные в формате секунд, минут, часов и дневных баров. Чтобы создать другие периоды баров, вам нужно объединить эти короткие периоды в более крупные.

Данные тиков — значения точек

Тиковые данные представляют собой одну сделку или котировку, сделанную на рынке. Это дискретное событие, к которому не привязан период времени. Эти события генерируются, как только они поступают в LEAN.
Объекты Tick имеют одинаковое значение Time и EndTime, потому что у них нет периода. Они представляют собой мгновенные значения и не могут быть заполнены вперед.

Пакетный и потоковый анализ

Платформы для тестирования на исторических данных бывают двух основных разновидностей: пакетная обработка или потоковая передача событий.
Тестирование на исторических данных с пакетной обработкой намного проще. Он загружает все данные в массив и передает их вашему алгоритму для анализа. Поскольку ваш алгоритм имеет доступ к будущим точкам данных, легко заглянуть в будущее. Большинство самодельных инструментов анализа представляют собой пакетные системы.
QuantConnect/LEAN — это система потокового анализа. В реальной торговле точки данных генерируются одна за другой с течением времени. QuantConnect моделирует это при тестировании на истории, передавая данные в ваш алгоритм в ускоренном режиме. Из-за этого у вас нет доступа к ценовым данным за границей времени. Хотя потоковый анализ немного сложнее понять, он позволяет вашему алгоритму беспрепятственно работать в тестах на исторических данных и в реальной торговле без изменения кода.

Часовой пояс алгоритма

Время алгоритма доступно из свойства self.Time QCAlgorithm. Время алгоритма по умолчанию соответствует часовому поясу Нью-Йорка для UTC-4 летом и UTC-5 зимой. Это можно настроить, передав принятое имя часового пояса в метод SetTimeZone(). Полный список названий часовых поясов можно найти в Википедии.
# In initialize method:
self.SetTimeZone("America/New_York")
Результат установки часового пояса сохраняется в вашем свойстве algorithm.TimeZone. Кроме того, QCAlgorithm поддерживает время UTC в свойстве UtcTime:
# UTC Conversion of Algorithm Time
self.UtcTime
И Time, и UtcTime являются объектами без часового пояса. Их состояние поддерживается LEAN, чтобы быть непротиворечивым.