zipline run_pipeline и позиционные аргументы

Я использую Zipline-1.1.1, Python3.4.6 для создания динамического селектора акций следующим образом:

from zipline.pipeline import Pipeline, engine
from zipline.pipeline.factors import AverageDollarVolume, Returns

def make_pipeline():
    dollar_volume = AverageDollarVolume(window_length=1)
    high_dollar_volume = dollar_volume.percentile_between(N, 100)
    recent_returns = Returns(window_length=N, mask=high_dollar_volume)
    low_returns = recent_returns.percentile_between(0, n)
    high_returns = recent_returns.percentile_between(N, 100)
    pipe_columns = {
        'low_returns': low_returns,
        'high_returns': high_returns,
        'recent_returns': recent_returns,
        'dollar_volume': dollar_volume
    }
    pipe_screen = (low_returns | high_returns)
    pipe = Pipeline(columns=pipe_columns, screen=pipe_screen)
    return pipe

Я инициализирую объект конвейера с помощью:

my_pipe = make_pipeline()

Но когда я пытаюсь заполнить Pipeline, происходит сбой:

result = engine.PipelineEngine.run_pipeline(my_pipe, '2017-07-10', '2017-07-11')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    result = engine.PipelineEngine.run_pipeline(my_pipe, '2017-07-10', '2017-07-11')
TypeError: run_pipeline() missing 1 required positional argument: 'end_date'

Я не могу понять, что не так, любая помощь очень ценится.


person mda    schedule 11.07.2017    source источник


Ответы (1)


Если я правильно понимаю, вы используете это библиотека.

Насколько я вижу из этого кода, чтобы использовать метод run_pipeline, вам нужно создание конвейерных двигателей перед, например, SimplePipelineEngine. Вам это нужно, потому что PipelineEngine — это класс, даже абстрактный класс, а не объект.

Поэтому вам нужно создать объект класса SimplePipelineEngine, а затем вызвать для него run_pipeline. Вы можете сделать это следующим образом:

your_engine = SimplePipelineEngine(get_loader=your_loader, calendar=your_calendar, asset_finder=your_asset_finder)
your_eninge.run_pipeline(my_pipe, '2017-07-10', '2017-07-11')

Конечно, вы должны сначала создать your_loader и т.д.

Вот пример использования SimplePipelineEngine. Надеюсь, это поможет.

person running.t    schedule 11.07.2017
comment
Да действительно помогает! Спасибо. - person mda; 11.07.2017
comment
Вот подробное описание автономной реализации: github.com/quantopian/zipline/issues/911< /а> - person mda; 12.07.2017