Что осталось знакомым
Основная структура стратегии не изменилась:- Постоянное состояние стратегии хранится в
context. - Торговая логика для каждого бара размещается в
handle_data. - Для периодической ребалансировки используется
schedule_function. - Пользовательские метрики записываются через
record. - Для ребалансировки применяются методы целевых заявок.
Краткая таблица преобразований
Импорты
Алгоритмы классического Zipline часто импортируют множество функций API:context и импортировать только вспомогательные классы:
ziplime.api в стиле Zipline сохранено для совместимости, но прямые вызовы context легче читать в асинхронном коде:
Функции жизненного цикла
initialize
Классический Zipline:
initialize, чтобы найти инструменты, задать параметры стратегии, зарегистрировать функции по расписанию, подключить пайплайны и настроить ограничения.
handle_data
Классический Zipline:
before_trading_start
В классическом Zipline before_trading_start была синхронной. Сейчас Ziplime вызывает её так же.
async def и не размещайте в ней заявки.
analyze
Классический Zipline обычно передавал в analyze DataFrame с результатами. Ziplime также синхронно вызывает analyze с итоговой таблицей результатов.
Различия в работе с рыночными данными
Классический Zipline поддерживал вызовы, возвращающие скалярные значения:Различия в работе с заявками
Классический Zipline часто допускал такие вызовы:Поиск символов
Классический Zipline обычно находил символы в базе инструментов с учётом даты симуляции. Ziplime получает инструменты через сервис инструментов:mic или используйте форму SYMBOL@MIC.
Именованный набор инструментов загружается так:
Расписание
Классический Zipline:Портфель и позиции
В классическом Zipline часто использовался такой код:exchange_name должно совпадать с конфигурацией запуска.
Запись метрик
Эта часть почти не отличается от Zipline:Перенос пайплайнов
Ziplime включает API Pipeline в стиле Zipline:initialize:
EquityPricing доступны по стандартному пути; для пользовательских наборов данных нужны собственные загрузчики.
Запуск перенесённых алгоритмов
Примеры классического Zipline часто напрямую вызываютrun_algorithm(...) с данными pandas или именами пакетов.
Стандартный процесс в Ziplime:
- Загрузить данные в пакет Ziplime или использовать уже загруженный пакет.
- Загрузить пакет через
bundle_service.load_bundle(...). - Передать загруженный источник данных в
run_simulation(...). - В параметре
algorithm_fileуказать перенесённый.py-файл стратегии.
"XMOS" должен поддерживаться установленным календарём; если российский контур зарегистрировал календарь под другим именем, используйте имя из его конфигурации.
Полный пример до и после
Классический Zipline:Контрольный список миграции
- Замените импорты
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 российского контура.