Skip to main content
Пайплайны — расширенный механизм расчёта кросс-секционных факторов и фильтров по множеству инструментов до запуска торговой логики. Они подходят для отбора набора инструментов, ранжирования и факторных стратегий. Поддержка пайплайнов зависит от настройки подходящих загрузчиков данных. Стандартный путь запуска подключает ценовые данные для EquityPricing; для пользовательских наборов данных нужны собственные загрузчики.

Основной принцип

  1. Создайте объект Pipeline.
  2. Подключите его в initialize.
  3. Получите результат после инициализации — обычно в before_trading_start.
  4. Используйте результат для выбора инструментов или целевых весов.

Создание пайплайна

Столбцы можно добавить и после создания объекта:

Фильтры screen

Параметр screen определяет, какие инструменты попадут в результат.
Для инструментов MOEX фактор AverageDollarVolume отражает средний денежный объём в валюте котировки — как правило, в рублях. Имя класса остаётся неизменным как часть API. Фильтр также можно задать после создания пайплайна:

Примеры распространённых факторов

Последние значения OHLCV

Скользящая средняя

Доходность

Средний денежный объём

Ранжирование и фильтрация

Факторы поддерживают, в частности, следующие методы: Пример:

Получение результата пайплайна

Метод context.pipeline_output(name) доступен после инициализации.
Тип результата определяется движком пайплайна и выбранным загрузчиком. На путях, совместимых с Zipline, это pandas DataFrame с индексом по инструментам текущей сессии.

Пользовательские факторы

Используйте CustomFactor для расчётов, которых нет среди встроенных факторов.
Добавьте фактор в пайплайн:

Когда использовать пайплайны

Используйте пайплайны, если:
  • Нужен ежедневно ранжируемый набор инструментов.
  • Один и тот же кросс-секционный фактор рассчитывается для множества инструментов.
  • Ресурсоёмкую логику отбора инструментов нужно вынести из handle_data.
Обращайтесь напрямую к data.current и data.history, если:
  • Стратегия торгует небольшим фиксированным набором инструментов.
  • Сигнал прост и рассчитывается отдельно для каждого инструмента.
  • Кросс-секционное ранжирование не требуется.