Skip to main content
Симуляция идёт по одному календарю. Начиная с 2.11.0 каждый листинг оценивается по часам торгов своей площадки, поэтому в одном бэктесте могут быть инструменты рынков с разным расписанием — например, акции Мосбиржи и фьючерсы срочного рынка с вечерней сессией.

Что определяет площадка листинга

  • data.can_trade спрашивает площадку листинга. В дневном запуске — торговалась ли площадка в этот день, во внутридневном — открыта ли она в эту минуту.
  • Заявка по листингу, рынок которого закрыт, вызывает ошибку, в которой названы календарь листинга и календарь симуляции.
  • context.rebalance не трогает позицию, пока её рынок закрыт, — ни заявок, ни закрытия.
  • ExchangeAsset.trading_calendar — собственный календарь листинга или None для площадки, которой нет в таблице; такие листинги оцениваются по календарю симуляции.
Запуск, все листинги которого торгуются по календарю самой симуляции, даёт те же результаты, что и до 2.11.0.

Площадки Мосбиржи

Московских площадок нет среди встроенных — их регистрирует zipfinam версии 1.26.10.1 или новее. Достаточно установить пакет: import zipfinam для этого не нужен. Стандартный календарь XMOS заканчивается в 18:45, и на нём фьючерсная стратегия теряла бы вечернюю сессию — поэтому zipfinam добавляет отдельный календарь FORTS. Без zipfinam московские листинги оцениваются по календарю симуляции.

Встроенные площадки

Часы для смешанного запуска

Календарь симуляции должен проходить каждую минуту, в которую торгуется хотя бы одна из площадок запуска. clock_calendar_name подбирает такой календарь:
Передайте результат как календарь запуска (ziplime run -c ... или run_simulation(trading_calendar=...)). Если календарь одной площадки уже проходит все минуты, когда торгуются остальные, используется он; иначе ответ — 24/5 (каждый будний день, круглосуточно) или 24/7, если какая-то площадка не закрывается никогда. Листинг бенчмарка в список не включайте — его только читают, а не торгуют. calendar_for_mic(mic) возвращает ExchangeCalendar, по которому живёт площадка.

Переопределения

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

Расширения

Пакет может добавлять площадки, календари и адреса источников данных без правок Ziplime. Именно так устроен zipfinam. Площадки. Вызовите register_venue_calendars({MIC: имя_календаря}) при импорте или объявите соответствие в группе точек входа ziplime.venue_calendars — она загружается при первом обращении:
Адреса источников данных. Вызовите register_address_scheme(scheme, mount) или объявите функцию подключения в группе точек входа ziplime.address_schemes. Тогда стратегия читает data.history(..., data_source="scheme://...") без регистрации со своей стороны:
Функция подключения вызывается как mount(address, *, asset_service, start_date, end_date, trading_calendar) и возвращает DataSource (или awaitable, который его вернёт). Неиспользуемые именованные аргументы она должна принимать и игнорировать. Схема hf:// встроена в движок. Провайдеры данных. Коннекторы для загрузки регистрируются в группе точек входа ziplime.data_providers — так zipfinam добавляет провайдер finam. ziplime providers показывает, что доступно в вашей установке.