米国株式投資のシステムトレードプラットフォームである 「Quantopian」 を使用してPythonで売買アルゴリズムを開発します。
このページでは、トレーディングアルゴリズムを作成する「IDE(統合化開発環境)」の基本的な使い方を説明します。
「Quantopian」のIDEでは、トレーディングアルゴリズムをPythonで書き、「バックテスティング(過去にトレーディングを実行した際のパフォーマンス)」が出来ます。
「Quantopian」のIDEの画面
Quantopianの「Research」メニューから「Algorithms」を選択し、ファイルを選択すると、以下の様なアルゴリズム作成画面が表示されます。
IDEの画面の解説
1.Pythonコード領域
ここに、Pythonでトレーディングアルゴリズムを書いていきます。
2.簡易バックテスティング実行
「Build Algorithm」ボタンを押すと、簡易的なバックテスティングを実行する事が出来ます。
「Run Full Backtest」ボタンの横にある期間で実行されます。
フルバックテストと違って簡易的な分析で結果は保存されませんが、トレーディングアルゴリズムが正しく動くかを、まずここで確認します。
3.フルバックテスト実行
「Run Full Backtest」ボタンを押すと、フルバックテスティングを実行する事が出来ます。
簡易バックテスティングより詳細な分析が可能で、結果も保存されます。
4.バックテスティング結果
バックテスティングの結果が表示されます。
5.ログ
ログが出力されます。
サンプルプログラムの実行
それでは、サンプルプログラムを実行しましょう。
以下のコードをPythonコード領域に書いて、「Build Algorithm」ボタンを押して下さい。
# Import Algorithm API import quantopian.algorithm as algo def initialize(context): # Initialize algorithm parameters context.day_count = 0 context.daily_message = "Day {}." context.weekly_message = "Time to place some trades!" # 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): # Execute any daily actions that need to happen # before the start of a trading session context.day_count += 1 log.info(context.daily_message, context.day_count) def rebalance(context, data): # Execute rebalance logic log.info(context.weekly_message)
実行結果
バックテスト結果
サンプルプログラムはログの出力のみなので、アルゴリズム収益は0のままです。
ログ結果
「before_trading_start」で日次メッセージを、「rebalance」で週次メッセージを表示しています。
コード解説
インポート
「quantopian.algorithm」を「algo」としてインポートします。
# Import Algorithm API import quantopian.algorithm as algo
initialize(context)
「initialize」は、アルゴリズム開始時に実行され、「context」をインプットとします。「initialize」では、パラメーターの初期設定や、1回限りのロジックの設定を行います。
「context.day_count」、「context.daily_message」 、「context.weekly_message」というパラメーターを設定、「algo.schedule_function」で定期的に実行する関数(rebalance)を設定しています。
def initialize(context): # Initialize algorithm parameters context.day_count = 0 context.daily_message = "Day {}." context.weekly_message = "Time to place some trades!" # Schedule rebalance function algo.schedule_function( rebalance, date_rule=algo.date_rules.week_start(), time_rule=algo.time_rules.market_open() )
context
「context」は辞書型のオブジェクトです。「initialize」に「print(context)」を追加して、中身を見た実行結果が以下の通りです。
initializeで定義した以外にも、様々なパラメーターが設定されている事が分かると思います。
PRINT AlgorithmContext({'portfolio': Portfolio({'portfolio_value': 10000000.0, 'positions_exposure': 0.0, 'cash': 10000000.0, 'starting_cash': 10000000.0, 'returns': 0.0, 'cash_flow': 0.0, 'positions': {}, 'positions_value': 0.0, 'start_date': Timestamp('2016-01-04 00:00:00+0000', tz='UTC', offset='C'), 'pnl': 0.0}), 'account': Account({'day_trades_remaining': inf, 'leverage': 0.0, 'regt_equity': 10000000.0, 'regt_margin': inf, 'gross_leverage': 0.0, 'available_funds': 10000000.0, 'maintenance_margin_requirement': 0.0, 'equity_with_loan': 10000000.0, 'buying_power': inf, 'initial_margin_requirement': 0.0, 'excess_liquidity': 10000000.0, 'settled_cash': 10000000.0, 'net_liquidation': 10000000.0, 'cushion': 1.0, 'total_positions_value': 0.0, 'net_leverage': 0.0, 'accrued_interest': 0.0, 'total_positions_exposure': 0.0}), 'day_count': 0, 'daily_message': 'Day {}.', 'weekly_message': 'Time to place some trades!'})
before_trading_start
「before_trading_start」は日次でマーケットオープン前に呼び出され、「context」と「data」をインプットとします。
日次で、「day_count」をプラス1し、ログとしてメッセージを出力しています。
def before_trading_start(context, data): # Execute any daily actions that need to happen # before the start of a trading session context.day_count += 1 log.info(context.daily_message, context.day_count)
rebalance
「initialize」の「algo.schedule_function」で実行すると宣言した関数の定義です。
「algo.schedule_function」で「date_rule=algo.date_rules.week_start()」と設定したので、毎週初に「context.weekly_message」をログとして出力します。
def rebalance(context, data): # Execute rebalance logic log.info(context.weekly_message)
参考ページ(公式チュートリアル)
「Quantopian」学習のオススメ講座
「Python for Financial Analysis and Algorithmic Trading 」は、Pythonで金融分析やアルゴリズムトレーディングを作成するための講座です。
世界的に有名なUdemy講師であるJose氏が、「Quontopian」について動画で解説している稀有な講座です。
例えば、「ボリンジャーバンド」を活用したトレーディングアルゴリズムを作成する事が出来ます。