Machine Learning for Trading - 日本市場 -

OMSCS ML4T で実装したモデルの日本市場での実験

OMSCS の Machine Learning for Trading (以降 ML4T) で実装したアルゴリズムを日本株でも適用し、実際に収益を得られるか試してみた。

Overall

OMSCS で受講した ML4T の最終課題にて、機械学習を用いた投資アルゴリズムを実装した。授業では米国株を対象としていたが、日本株でも有効であるか気になったので検証を行った。 授業の詳細に関しては、以下の記事で紹介している。

CS 7646: Machine Learning for Trading

Method

まずは、講義の課題に近しい条件で検証を行うため、以下の条件で試しに計算してみた。 講義のポリシーに反することを懸念し、モデルなど講義内容の核心に迫る部分に関しては概要を記載するのに留める。

モデル: ML4T で実装した Random Forest をベースとしたモデル
対象:三菱 UFJ 銀行 (8306)
In sample 期間:2008/1/1-2009/12/31
Out of sample 期間:2010/1/1-2011/12/31
取引:予測に応じて Long と Short が可能

Data

講義の中で米国株のデータは提供されていたため、日本株のデータを取得するところから検討する必要があった。 調べた結果、pandas_datareader で stooq から日本株のデータを取得できることがわかった。

【Python】pandas-datareaderを使用した日本株の株価情報取得

stooq は無料で株価データを提供しており、米国株だけでなく日本株も提供している数少ないソースのようである。 日本株に関しては、株価が更新されるのは一日ほどラグがあるため、タイムリーな予測を希望する際には適していないと思われる。 しかし、このモデルでは日足のデータを対象としているため、大きな問題ではないと考えた。 実際にモデルを稼働させて取引を行う場合には、この辺のデータの取得タイミングなどを考慮する必要があるため、有料のサービスを利用した方が良いだろう。

stooq

pandas_datareader でのデータの取得方法

pandas_datareader をインポートし、銘柄コード に .JP を付けることで取得可能である。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import pandas_datareader.data as pdr
import datetime as dt

symbol = '8306'
ticker_jp = symbol + '.JP'

start = dt.datetime(2008, 1, 1)
end = dt.datetime(2009, 12, 31)

df = pdr.DataReader(ticker_jp, 'stooq', start, end)

※API の制限があるようで、一日に何度も読み取りを行うと、急に何も返さなくなることがある。 その際には、データ取得時にエラーは返されないため、注意が必要である。

以下のように、銘柄毎に一日の始値、高値、安値、終値、出来高の情報を得ることができる。

stock_data

Result

上記の条件で、シミュレーションを行ってみた結果を示した。初期の投資資金を 1 として、その後の変動をグラフで示した。 ベンチマークとしては、期間のはじめに対象株を購入し、ホールドし続けた場合を示している。

insample_result

トレーニングに利用した In sample 期間においては、ベンチマークでは最終的な収益が若干のマイナスになっているにも関わらず、機械学習を用いた手法では 20 % ほど収益を得ることができている。

outofsample_result

Out of sample に関しては、ベンチマークよりも若干のプラスで終わる結果となった。推移がステップ状になっていることから、比較的短期間でポジションを解消していたと見受けられる。 相場として大きく変動しない横ばいのタイミングであったと見受けられるため、大きく収益を挙げることができなかった可能性もある。

今回、日本市場を対象に試しに計算を行ってみた結果、単純にモデルを適用させるだけで収益が得られる様子はなく、様々な試行錯誤が必要そうな結果となった。

Reflection

ML4T で実装したモデルを用いて、実際に投資を行うことを考えていたが、そのまま利用することはできなそうなことが明らかになった。講義の中で TA からも、考え無しにモデルを用いて実際にトレーディングすることは無謀であるというような案内がされていた。日本市場であれば米国市場よりも取引が少ないため、非効率な部分があることから、アルゴリズムでの取引も有効ではないかと考えたが、そう上手くはいかない様子である。
講義の中で、Random Forest か、Q Learning で実装する選択肢があったが、Q Learning を用いたらどのような結果であったか気になる。 余力がある時に、チューニングと Q Learning での実装に挑戦したいと思う。

ML4T を受講して、機械学習自体を学ぶことができたのは大きな成果であるが、それだけでなく、自身でいろいろと試してみようと思えるようになったのが大きな成長であると思う。 今後も継続して、学んだことを活かしていきたい。

Licensed under CC BY-NC-SA 4.0
Hugo で構築されています。
テーマ StackJimmy によって設計されています。