Подтвердить что ты не робот

Как обновить устаревший модуль zipline.transforms python?

Я написал программу python, используя пакет квантования zipline http://www.zipline.io/beginner-tutorial.html. Недавно я обновил пакет и столкнулся с тем, что пакет zipline.transforms устарел. Я использовал две функции из пакета zipline.transforms, batch_transform() и MovingAverage.

Мне не удалось найти хороший пост, демонстрирующий, как это исправить, кроме как сказать batch_transform с помощью функции history(). Однако я не знаю, как именно его заменить. Я не нашел сообщение о том, как исправить отклонение MovingAverage.

Вот мой код, который я использую.

from zipline.algorithm import TradingAlgorithm
from zipline.transforms import batch_transform
from zipline.transforms import MovingAverage


class TradingStrategy(TradingAlgorithm):

    def initialize(self, window_length=6):
        self.add_transform(
            MovingAverage, 'kernel', ['price'], window_length=self.window_length)

    @batch_transform
    def get_data(data, context):
        '''
        Collector for some days of historical prices.
        '''
        daily_prices = data.price[STOCKS + [BENCHMARK]]
        return daily_prices

strategy = TradingStrategy()

Может ли кто-нибудь привести пример обновления кода выше? Я предполагаю, что есть много людей, занимающихся проблемами, учитывая, насколько популярным является квантовик.

4b9b3361

Ответ 1

Кажется, нет прямого способа использовать history вместо batch_transform.

Мне кажется, что не только методы были изменены, но и то, как они были предназначены для использования, также были полностью изменены.

В документации упоминается следующее:

Каждый алгоритм zipline состоит из двух функций, которые вы должны определить:

  • initialize(context)
  • handle_data(context, data)

Вот пример из документов об использовании метода истории для создания некоторых основных скользящих средних:

def initialize(context):
    context.i = 0
    context.asset = symbol('AAPL')


def handle_data(context, data):
    # Skip first 300 days to get full windows
    context.i += 1
    if context.i < 300:
        return

    # Compute averages
    # data.history() has to be called with the same params
    # from above and returns a pandas dataframe.
    short_mavg = data.history(context.asset, 'price', bar_count=100, frequency="1d").mean()
    long_mavg = data.history(context.asset, 'price', bar_count=300, frequency="1d").mean()

    # Trading logic
    if short_mavg > long_mavg:
        # order_target orders as many shares as needed to
        # achieve the desired number of shares.
        order_target(context.asset, 100)
    elif short_mavg < long_mavg:
        order_target(context.asset, 0)

    # Save values for later inspection
    record(AAPL=data.current(context.asset, 'price'),
           short_mavg=short_mavg,
           long_mavg=long_mavg)