米国株式投資のシステムトレードプラットフォームである 「Quantopian」 を使用してPythonの売買アルゴリズムを開発します。
このページでは、トレーディングアルゴリズムに「Pipeline」オブジェクトを導入して、ログに出力させる方法を解説します。
「Quantopian」のIDE画面
Quantopianの「Research」メニューから「Algorithms」を選択し、ファイルを選択すると、以下の様なアルゴリズム作成画面が表示されます。
以下、「Quantopian」のIDE(統合開発環境)の知識をベースとして解説しますので、使い方が分からない人は、こちらの記事をまずご覧下さい
QuantopianでのIDEの使い方の基本
サンプルプログラムの実行
それでは、サンプルプログラムを実行しましょう。
以下のコードをPythonコード領域に書いて、「Build Algorithm」ボタンを押して下さい。
# Import Algorithm API import quantopian.algorithm as algo # Pipeline imports from quantopian.pipeline import Pipeline from quantopian.pipeline.data.psychsignal import stocktwits from quantopian.pipeline.factors import SimpleMovingAverage from quantopian.pipeline.filters import QTradableStocksUS def initialize(context): # Attach pipeline to algorithm algo.attach_pipeline( make_pipeline(), 'data_pipe' ) # Schedule rebalance function algo.schedule_function( rebalance, date_rule=algo.date_rules.week_start(), time_rule=algo.time_rules.market_open() ) def before_trading_start(context, data): # Get pipeline output and store it in context context.pipeline_data = algo.pipeline_output('data_pipe') def rebalance(context, data): # Display first 10 rows of pipeline output log.info(context.pipeline_data.head(10)) # Pipeline definition def make_pipeline(): base_universe = QTradableStocksUS() sentiment_score = SimpleMovingAverage( inputs=[stocktwits.bull_minus_bear], window_length=3, ) return Pipeline( columns={ 'sentiment_score': sentiment_score, }, screen=( base_universe & sentiment_score.notnull() ) )
実行結果
バックテスト結果
サンプルプログラムは「Pipelineの結果」をログに出力しますが、特段売買を行っていないので、アルゴリズム収益は0のままです。
ログ結果
株式銘柄毎の「sentiment_score」の3日移動平均がログに表示されます。
コード解説
「attach_pipeline」メソッド
def initialize(context): # Attach pipeline to algorithm algo.attach_pipeline( make_pipeline(), 'data_pipe' )
アルゴリズムに「pipeline」を導入するには、「attach_pipeline」メソッドを「initialize」内で使用します。
ここでは、「make_pipeline()」(後ほど定義)という名のPipelineを「data_pipe」という名で導入します。
before_trading_start
def before_trading_start(context, data): # Get pipeline output and store it in context context.pipeline_data = algo.pipeline_output( 'data_pipe' )
「before_trading_start」は日次でマーケットオープン前に呼び出され、「context」と「data」をインプットとします。
日次で、「data_pipe」のアウトプットを取得し、「context.pipeline_data」で「context」内の「pipeline_data」にアウトプットを格納しています。
rebalance
「initialize」の「algo.schedule_function」で実行すると宣言した関数の定義です。
「algo.schedule_function」で「date_rule=algo.date_rules.week_start()」と設定したので、毎週初に実行されます。
「context」内の「pipeline_data.head」の頭10個をログとして出力します。
ログの出力結果が毎週毎、10銘柄の「sentiment_score」となっている事を確認して下さい。
def rebalance(context, data): # Display first 10 rows of pipeline output log.info(context.pipeline_data.head(10))
Pipelineの定義(make_pipeline())
# Pipeline imports from quantopian.pipeline import Pipeline from quantopian.pipeline.data.psychsignal import stocktwits from quantopian.pipeline.factors import SimpleMovingAverage from quantopian.pipeline.filters import QTradableStocksUS # Pipeline definition def make_pipeline(): base_universe = QTradableStocksUS() sentiment_score = SimpleMovingAverage( inputs=[stocktwits.bull_minus_bear], window_length=3, ) return Pipeline( columns={ 'sentiment_score': sentiment_score, }, screen=( base_universe & sentiment_score.notnull() ) )
Pipeline定義に必要なモジュールのインポートと定義です。
「stocktwits.bull_minus_bear」(Twitterメッセージのセンチメント(楽観-悲観)の3日移動平均を取得するpipelineを定義しています。
3日移動平均の計算には、「SimpleMovingAverage」関数を利用しています。
最後に「QTradableStocksUS」の銘柄で、かつ「sentiment_score」が存在するものを対象にフィルタリングを行っている事にも注意して下さい。
Pipelineの定義については、以下の記事を参考にして下さい。
参考ページ(公式チュートリアル)
「Quantopian」学習のオススメ講座
「Python for Financial Analysis and Algorithmic Trading 」は、Pythonで金融分析やアルゴリズムトレーディングを作成するための講座です。
世界的に有名なUdemy講師であるJose氏が、「Quontopian」について動画で解説している稀有な講座です。
例えば、「ボリンジャーバンド」を活用したトレーディングアルゴリズムを作成する事が出来ます。