2017-09-21 9 views
17

私はquantopian ziplineパッケージhttp://www.zipline.io/beginner-tutorial.htmlを使ってpythonプログラムを書いた。私は最近パッケージを更新し、zipline.transformsパッケージが廃止されたことに気付きました。私はzipline.transformsパッケージの2つの関数、batch_transform()MovingAverageを使っていました。非推奨のpython zipline.transformsモジュールを更新するには?

batch_transformhistory()機能に置き換えると言っている以外、これを修正する方法を示す良い投稿は見つかりませんでした。しかし、私はそれをどのように置き換えるべきかを認識していません。私は、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() 

誰かが上記のコードを更新する方法の例を提供できますか?私は、人気のある量子論がどれほど人気を集めているかという問題を扱う多くの人々がいると考えています。

+1

関連:https://stackoverflow.com/questions/37696727/zipline-import-error-no-module -named-zipline-transforms – denfromufa

+0

ヒストリがどのように追加されたのかここにあります:https://github.com/quantopian/zipline/pull/315/files – denfromufa

答えて

4

historyの代わりにbatch_transformの代わりに直接使用する方法はありません。

メソッドが変更されただけでなく、それらが使用される方法も完全に変更されているように見えます。

すべてのジップラインのアルゴリズムは2つの機能で構成され、ユーザーが定義する必要があります:

ドキュメントには、次のように述べて

  • 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) 
+0

上記と同じ結果をもたらすbatch_transformを使用したコードの例を提供できますか?私は2つを比較することができますか? –