Pythonのファイナンス(株 , FX)に特化したライブラリの使い方を解説【データ可視化、チャート分析を中心に進めていきます】

Pythonデータ分析

この記事の執筆・監修

キノコード
キノコード    

テクノロジーアンドデザインカンパニー株式会社のCEO。
日本最大級のプログラミング教育のYouTubeチャンネル「キノコード」や、プログラミング学習サービス「キノクエスト」を運営。
著書「あなたの仕事が一瞬で片付くPythonによる自動化仕事術」や、雑誌「日経ソフトウエア」や「シェルスクリプトマガジン」への寄稿など実績多数。

レッスンで使ったファイルはこちら

キノクエストでアカウントの新規登録に進み、メール認証を完了します。

ログインした状態(プラン選択画面が表示されます)で下記のボタンをクリックしてください。

ライブラリインポート

import mplfinance as mpf
from pandas_datareader import data
import warnings
warnings.simplefilter('ignore')

まず、ライブラリをインポートする記述をします。
mplfinanceというライブラリをmpfという名前でインポートします。
mplfinanceは名前の通り、ファイナンスに特化した可視化ライブラリです。
mplfinanceを使えば、ローソク足のグラフを簡単に作成することができます。
次に、日経平均株価のデータ取得に必要なpandas datareaderをインポートします。
pandas datareaderを使うと、日経平均やナスダック、日本の個別銘柄のデータを取得することができます。
また、jupyterlab上に警告文が出ることがあります。
グラフの描画には問題が無いので、その警告文を表示させない設定をしましょう。
import warningsと書きます。
そして、warningsドット、simplefilterと書いて丸括弧、無視という意味のignoreを記述しシングルコーテーションでくくります。
実行します。
ライブラリのインポートが完了しました。

日経平均株価データ取得

start = '2020-01-01'
end = '2020-06-30'

df = data.DataReader('^N225','yahoo', start, end)

それでは、日経平均株価のデータを取得してみましょう。
startという変数に取得したい期間の最初の日を代入します。
今回は2020年1月1日からとします。
合わせて、取得したい期間の最後の日をendという変数に代入します。
今回は2020年6月30日までとします。
次に、データフレームを作成する記述をします。
dfイコールと記述し、pandas datareaderの省略名のdata、ドットと書いてDataReader丸括弧です。
丸括弧の最初の引数には、取得したい株価のステッカーシンボルをシングルコーテーションでくくります。
今回は日経平均株価を取得したいので、ハットの後に大文字のN、225と書きます。
次の引数に、データソースの名前を記述します。
今回はyahooファイナンスからデータを取得するのでyahooと書きます。
最後に、先ほど設定した期間のstartとendを記述します。
実行します。
これで、dfという変数の中に設定した期間の日経平均株価のデータが格納されているはずです。

df.head(10)

上位10件を表示させてみましょう。
実行します。
データが取得できているようです。

mpf.plot(df, type='candle', figsize=(30,10))   

早速、mplfinanceでローソク足のグラフを作成していきましょう。
mplfinanceの省略名mpfの後にドット、plotと書いて丸括弧、丸括弧の第一引数に先ほど作成したdfを記述します。
typeでグラフの種類を指定することができます。
ここではローソク足を意味するcandleと書いてシングルコーテーションでくくります。
figsizeでグラフのサイズを指定できます。
ここでは30と10にします。
実行します。
ローソク足のグラフを作成できました。

グラフスタイル変更

mpf.plot(df, type='candle', figsize=(30,10), style='classic')  

グラフのスタイルも変更できます。
styleイコール、classicと書いてシングルコーテーションでくくります。
実行します。
白黒のローソク足を作成できました。

mpf.plot(df, type='candle', figsize=(30,10), style='yahoo')

他のグラフのスタイルもみてみましょう。
yahooとしてみます。
実行します。
このようなグラフが作成できました。
他にも、charlesやmike、starsandstripesなどがあります。お好きなグラフのスタイルを試してみてください。

出来高追加

mpf.plot(df, type='candle', figsize=(30,10), style='yahoo', volume=True)  

続いて、グラフに出来高を追加していきましょう。
volumeイコールTrueと記述します。
つまり、デフォルトではFalseになっています。
実行します。
出来高を追加できました。

ボリンジャーバンド用のdf追加

import talib as ta

df["upper"], df["middle"], df["lower"] = ta.BBANDS(df['Adj Close'], timeperiod=25, nbdevup=2, nbdevdn=2, matype=0)

次に、ボリンジャーバンドを作成していきます。
ボリンジャーバンドとは、株の売られすぎや買われすぎを判断するテクニカル指標の一つです。
移動平均などの平均に対し、標準偏差のプラスマイナス2倍が使われることが多いです。
株価はこの2本のラインの間に収まると言われています。
反対に、これらの2本のラインから外れた場合は、売られすぎ、買われすぎという判断材料にします。
ここでは、taという名前でtalibをインポートします。
talibを使用することで、テクニカル指標の追加を簡単に行うことができます。
では、25日の移動平均、標準偏差2のボリンジャーバンドを作成していきましょう。
まず、ボリンジャーバンドに使用するカラムをデータフレームに追加していきます。
df角括弧の中に、upper、middle、lowerをそれぞれ記述します。
upperは上のボリンジャーバンド、middleは移動平均、lowerは下のボリンジャーバンドになります。
イコールを書いて、talibの省略名ta、ドット、大文字でBBANDS丸括弧を記述します。
第一引数に、df角括弧、終値を示すAdj Closeを渡します。
25日の移動平均を作成したいので、timeperiodでは25を設定します。
ボリンジャーバンドの上のラインと下のラインを示す標準偏差はそれぞれnbdevupとnbdevdnで設定できます。
ここでは2とします。
matypeに単純移動平均を意味する0を設定します。
1を渡すと指数移動平均、2を渡すと加重移動平均になります。
こちらは記述しなくてもデフォルトでは単純移動平均になります。
実行します。

df.tail()

dfドットtailでカラムが追加されたかどうか確認してみましょう。
実行します。
カラムが追加されているようです。

ボリンジャーバンドプロット

apds = [mpf.make_addplot(df['upper'],color='g'),  
        mpf.make_addplot(df['middle'],color='b'),
        mpf.make_addplot(df['lower'],color='r')
       ]

mpf.plot(df, type='candle', figsize=(30,10), style='yahoo', volume=True, addplot=apds)

では、ボリンジャーバンドをグラフに描画する記述をしていきましょう。
apdsという変数に、先ほど作成したupper、middle、lowerを代入していきます。
角括弧の中に、mplfinanceの省略名mpfと書いてドット、makeアンダーバー、addplot、丸括弧の中に引数を渡していきます。
df角括弧の中にupper、middle、lowerをそれぞれ記述します。
colorで色を指定します。
ここでは、グリーン、ブルー、レッドの頭文字を取ってg、b、rとします。
次に、mpfドットplotと書いて丸括弧、丸括弧の中でグラフの大きさやスタイルを設定していきます。
出来高を作成した時と同じ記述の後に、addplotイコールと書いて上で代入した変数のapdsを渡します。
実行します。
ボリンジャーバンドが追加されました。

MACD用のdf追加

df['macd'], df['macdsignal'], df['macdhist'] = ta.MACD(df['Adj Close'], fastperiod=12, slowperiod=26, signalperiod=9)

次に、MACDのヒストグラムを追加していきましょう。
MACDとは、簡単に言うとトレンドを見る指標です。
0以上なら上昇トレンド、0以下なら下降トレンドという判断材料にします。
こちらもTalibを使ってカラムを作成していきます。
df角括弧の中に、macd、macdsignal、macdhistと書いてイコール、taドット大文字でMACDの後に丸括弧、最初の引数に終値を示すAdj Closeを渡します。
MACDは短期の移動平均、長期の移動平均、MACDシグナルで成り立っています。
それぞれ、fastperiod、slowperiod、signalperiodと書きます。
一般的に、短期の移動平均は12、長期の移動平均は26、MACDシグナルは9と設定することが多いです。
実行します。
これで、データフレームにMACDのカラムが追加されているはずです。

df.tail()

dfドットtailで確認してみましょう。
カラムが追加されているようです。

MACDプロット

apds = [mpf.make_addplot(df['upper'],color='g'),  
        mpf.make_addplot(df['middle'],color='b'),
        mpf.make_addplot(df['lower'],color='r'),
        mpf.make_addplot(df['macdhist'], type='bar', 
                         width=1.0, panel=1, color='gray', alpha=0.5, ylabel='MACD')
       ]

mpf.plot(df, type='candle', figsize=(30,15), style='yahoo', volume=True, addplot=apds, 
          volume_panel=2, panel_ratios=(3,1,1))

apdsという変数の中に、MACDのデータを追加します。
mpfドット、makeアンダーバー、addplot丸括弧です。
今回はMACDの中でも、証券会社のツールなどでよく使われているMACDのヒストグラムを描画してみましょう。
丸括弧の中の第一引数には、macdhistのデータを渡します。
typeイコールの後に、棒グラフを意味するbarを書いてシングルコーテーションでくくります。
棒グラフの幅をwidthで設定します。
今回は1とします。
グラフを追加する順番はpanelで指定できます。
今回は、上側にローソク足、真ん中にMACD、下側に出来高を表示させるようにします。
panelは、上から0、1、2の順番になるので、MACDの1と設定します。
colorとalphaで色や透明度を指定できます。
今回は色をgray、透明度を0.5とします。
最後に、ylabelでy軸に表示させるラベルを追加します。
続いて、mpfドット、プロットと書いてaddplotまでは先ほどと同じ記述です。
volumeアンダーバーpanel、イコールの後に2と書きます。
これは、先程も説明しましたが、上から0、1、2と数えて2の位置に出来高が表示される設定にします。
panelアンダーバー、rationsでそれぞれのグラフを表示させる比率を指定できます。
ここでは、3対1対1とします。
実行します。
MACDのグラフが追加されました。

RSIデータフレーム追加

df["RSI"] = ta.RSI(df["Adj Close"], timeperiod=25)

次に、RSIのグラフを追加していきましょう。
RSIも、株の買われすぎや売られすぎを判断する指標です。
一般的に、RSIは20%~30%を下回ると売られすぎ、70%~80%を上回ると買われすぎだと判断されます。
こちらもTalibを使ってRSIのカラムをデータフレームに追加していきます。
df角括弧の中にRSIと記述しイコール、taドット、大文字でRSI丸括弧です。
丸括弧の中の第一引数に終値を示すAdj Close、timeperiodでRSIを作成する期間を指定します。
今回は25日間のRSIを作成してみましょう。
実行します。
これで、RSIのデータが追加されているはずです。

df.tail()

確認してみましょう。
RSIのデータが追加されています。

apds = [mpf.make_addplot(df['upper'],color='g'),  
        mpf.make_addplot(df['middle'],color='b'),
        mpf.make_addplot(df['lower'],color='r'),
        mpf.make_addplot(df['macdhist'], type='bar', 
                         width=1.0, panel=1, color='gray', alpha=0.5, ylabel='MACD'),
        mpf.make_addplot(df['RSI'], panel=2, type='line', ylabel='RSI')      
       ]

mpf.plot(df, type='candle', figsize=(30,15), style='yahoo', volume=True, addplot=apds,
       volume_panel=3, panel_ratios=(5,2,2,1))             

apdsという変数の中で、これまで記述したものの後にRSIのデータを追加します。
mpfドット、makeアンダーバー、addplotと書いて丸括弧、丸括弧の中の第一引数に先ほど作成したRSIを渡します。
panelイコール2と書いて、上から0、1、2番目にRSIを表示させてみます。
typeイコールlineで、線グラフを指定します。
y軸のラベルにRSIと付ける記述をします。
最後に、mpfドット、plotの丸括弧の中のvolume panelを3に、panel ratiosを5対2対2対1に変更します。
そのほかの記述は今までと同様です。
実行します。
RSIのグラフを追加できました。

グラフ保存

mpf.plot(df, type='candle', addplot=apds, figsize=(30,10), style='yahoo',
         volume=True, volume_panel=3,panel_ratios=(1,1,1,1), savefig='technical.png') 

最後に、作成したグラフを保存しましょう。
mpf.plotの丸括弧の中に、savefigと記述しイコール、好きな名前をシングルコーテーションでくくります。
今回はpng形式のファイルで保存してみます。
他にも、pdfやjpegなどを指定できます。
実行します。
グラフが保存されました。

個別銘柄

未経験からはじめるPython学習「キノクエスト」 キノクエスト
  • スキルアップしたいけど何からはじめればよいかわからない…
  • プログラミングスクールに入りたいけど料金が高い…
  • プログラミングを学んでも業務やキャリアに活かせるか不安…

キノクエストは、このような悩みを持つ方にぴったりのプログラミング学習サービスです。
国内最大級のプログラミング学習系YouTubeチャンネル「キノコード」が提供しているから、未経験者にもわかりやすく質の高い学習体験を実感していただけます。

キノクエスト