Skip to main content
Ziplime сохраняет событийную модель стратегий классического Zipline, но не является его полной заменой без изменений в коде. Основные различия — асинхронные функции стратегии, DataFrame библиотеки Polars, явные стили исполнения и механизм запуска с пакетами данных и сервисами Ziplime от Финама. Используйте эту страницу при переносе старого алгоритма Zipline в файл алгоритма Ziplime.

Что осталось знакомым

Основная структура стратегии не изменилась:
В Ziplime основные функции становятся асинхронными:
Сохраняется и общая модель работы:
  • Постоянное состояние стратегии хранится в context.
  • Торговая логика для каждого бара размещается в handle_data.
  • Для периодической ребалансировки используется schedule_function.
  • Пользовательские метрики записываются через record.
  • Для ребалансировки применяются методы целевых заявок.

Краткая таблица преобразований

Импорты

Алгоритмы классического Zipline часто импортируют множество функций API:
В Ziplime предпочтительнее напрямую вызывать методы context и импортировать только вспомогательные классы:
Пространство имён ziplime.api в стиле Zipline сохранено для совместимости, но прямые вызовы context легче читать в асинхронном коде:

Функции жизненного цикла

initialize

Классический Zipline:
Ziplime:
Используйте initialize, чтобы найти инструменты, задать параметры стратегии, зарегистрировать функции по расписанию, подключить пайплайны и настроить ограничения.

handle_data

Классический Zipline:
Ziplime:

before_trading_start

В классическом Zipline before_trading_start была синхронной. Сейчас Ziplime вызывает её так же.
В текущей версии Ziplime не определяйте эту функцию через async def и не размещайте в ней заявки.

analyze

Классический Zipline обычно передавал в analyze DataFrame с результатами. Ziplime также синхронно вызывает analyze с итоговой таблицей результатов.

Различия в работе с рыночными данными

Классический Zipline поддерживал вызовы, возвращающие скалярные значения:
Ziplime ожидает списки и возвращает DataFrame Polars:
Исторические окна тоже запрашиваются асинхронно:
Если старая стратегия использует операции pandas, преобразуйте результат Ziplime явно:
Для нового кода предпочтительнее выражения Polars.

Различия в работе с заявками

Классический Zipline часто допускал такие вызовы:
Вызовы заявок в Ziplime асинхронные и требуют указать стиль исполнения:
Методы целевых заявок не учитывают ещё не исполненные открытые заявки. Если старая стратегия многократно отправляет целевые заявки, добавьте проверку:

Поиск символов

Классический Zipline обычно находил символы в базе инструментов с учётом даты симуляции. Ziplime получает инструменты через сервис инструментов:
Если один тикер встречается на нескольких биржах, передайте mic или используйте форму SYMBOL@MIC. Именованный набор инструментов загружается так:
Имя набора должно быть заранее зарегистрировано в сервисе инструментов российского контура.

Расписание

Классический Zipline:
Ziplime:
В дневных симуляциях правила времени фактически игнорируются, потому что часы формируют только один бар за сессию. В минутных симуляциях правила времени учитываются.

Портфель и позиции

В классическом Zipline часто использовался такой код:
Ziplime предоставляет итоговые показатели портфеля напрямую, но в текущей среде позиции хранятся во вложенной структуре по биржам и счетам. Используйте вспомогательные методы:
Для позиции по конкретному биржевому инструменту:
Значение exchange_name должно совпадать с конфигурацией запуска.

Запись метрик

Эта часть почти не отличается от Zipline:
Записанные значения становятся столбцами итоговой таблицы результатов.

Перенос пайплайнов

Ziplime включает API Pipeline в стиле Zipline:
Подключите пайплайн в initialize:
Получите результат после инициализации:
Поддержка пайплайнов зависит от загрузчиков. Ценовые данные через EquityPricing доступны по стандартному пути; для пользовательских наборов данных нужны собственные загрузчики.

Запуск перенесённых алгоритмов

Примеры классического Zipline часто напрямую вызывают run_algorithm(...) с данными pandas или именами пакетов. Стандартный процесс в Ziplime:
  1. Загрузить данные в пакет Ziplime или использовать уже загруженный пакет.
  2. Загрузить пакет через bundle_service.load_bundle(...).
  3. Передать загруженный источник данных в run_simulation(...).
  4. В параметре algorithm_file указать перенесённый .py-файл стратегии.
В примере стартовый капитал — 10 000 000 рублей. Идентификатор "XMOS" должен поддерживаться установленным календарём; если российский контур зарегистрировал календарь под другим именем, используйте имя из его конфигурации.

Полный пример до и после

Классический Zipline:
Ziplime:

Контрольный список миграции

  • Замените импорты zipline.api прямыми вызовами context и импортами вспомогательных объектов Ziplime.
  • Сделайте initialize, handle_data и запланированные функции асинхронными.
  • Добавьте await при поиске инструментов, доступе к данным, размещении и отмене заявок.
  • Передавайте списки в data.current и data.history.
  • Перепишите операции pandas на Polars или явно вызывайте .to_pandas().
  • Передавайте в методы заявок стиль исполнения, например MarketOrder().
  • Используйте def before_trading_start, а не async def before_trading_start.
  • Используйте def analyze, а не async def analyze.
  • Замените прямой доступ к portfolio.positions[asset] вспомогательными методами портфеля.
  • Для неоднозначных символов передавайте MIC-код, например MISX.
  • Перенесите настройку запуска в run_simulation(...) с пакетами данных Ziplime российского контура.