【Python】TA-Libによるボリンジャーバンドの取得・描画
今回は,テクニカル指標であるボリンジャーバンド(Bollinger Bands)をPythonライブラリTA-Libで計算し,描画する方法を紹介します.
本記事のコードを実行することで,以下のような結果が得られます.

ボリンジャーバンドについての説明は,ボリンジャーバンドとは?テクニカル分析には欠かせない基礎指標ですを参考にしてください.
各ライブラリのインストール
今回使用するライブラリは以下の通りです.
- datatime
- Numpy
- matplotlib
- pandas-datareader
- TA-Lib
このうちTA-Lib以外のライブラリ(モジュール)はpipで簡単にインストールできます.pandas-datareaderの使い方についてはpandas datareaderをインストールして株価データを取得する方法【日本株・米国株】をご覧ください.
TA-Libのインストールはひと手間いるので,Windowsをお使いの場合はTA-LibをWindowsにインストールする方法【Python】を,それ以外の環境をお使いの場合は各自お調べください.
TA-Libによるボリンジャーバンドの描画コード
2020/1/1~2021/3/1におけるS&P500のボリンジャーバンドを取得してみたいと思います.
コードと結果は以下の通りです.
import datetime
import numpy as np
import matplotlib.pyplot as plt
import pandas_datareader.data as web
import talib as ta
start = datetime.date(2020,1,1)
end = datetime.date(2021,3,1)
df = web.DataReader('^GSPC', 'yahoo', start, end) #get data
close = df['Close']
#Bollinger Bands
upper1, middle,lower1 = ta.BBANDS(close, timeperiod=25, nbdevup=1, nbdevdn=1, matype=0)
upper2, middle, lower2 = ta.BBANDS(close, timeperiod=25, nbdevup=2, nbdevdn=2, matype=0)
upper3, middle, lower3 = ta.BBANDS(close, timeperiod=25, nbdevup=3, nbdevdn=3, matype=0)
plt.plot(close,label='price',color='k')
plt.plot(upper1,label='upper1',color='b')
plt.plot(lower1,label='lower1',color='b')
plt.plot(upper2,label='upper2',color='g')
plt.plot(lower2,label='lower2',color='g')
plt.plot(upper3,label='upper3',color='r')
plt.plot(lower3,label='lower3',color='r')
plt.xlabel('date')
plt.ylabel('price')
plt.legend()
plt.show()
実行結果

コード解説
株価データ取得
株価は,pandas_datareaderで取得します.もちろんウェブやローカルにあるCSVファイルを読み込んでデータを取得しても構いません.
start = datetime.date(2020,1,1)
end = datetime.date(2021,3,1)
df = web.DataReader('^GSPC', 'yahoo', start, end) #get data
今回は,S&P500の株価データを取得しています.
pandas-datareaderの詳しい使い方についてはpandas datareaderをインストールして株価データを取得する方法【日本株・米国株】をご覧ください.
pandas-datareaderで取得したデータは以下のように,High(高値),Low(低値),Open(始値),Close(終値),Volume(出来高),Adj Close(調整後終値)を持つDataFarameとなっています.
High Low Open Close Volume Adj Close
Date
2019-12-31 3231.719971 3212.030029 3215.179932 3230.780029 2893810000 3230.780029
2020-01-02 3258.139893 3235.530029 3244.669922 3257.850098 3458250000 3257.850098
2020-01-03 3246.149902 3222.340088 3226.360107 3234.850098 3461290000 3234.850098
2020-01-06 3246.840088 3214.639893 3217.550049 3246.280029 3674070000 3246.280029
2020-01-07 3244.909912 3232.429932 3241.860107 3237.179932 3420380000 3237.179932
... ... ... ... ... ... ...
2021-02-23 3895.979980 3805.590088 3857.070068 3881.370117 6280650000 3881.370117
2021-02-24 3928.649902 3859.600098 3873.709961 3925.429932 5942350000 3925.429932
2021-02-25 3925.020020 3814.040039 3915.800049 3829.340088 6513060000 3829.340088
2021-02-26 3861.080078 3789.540039 3839.659912 3811.149902 6512950000 3811.149902
2021-03-01 3914.500000 3842.510010 3842.510010 3901.820068 5071540000 3901.820068
ボリンジャーバンドに必要なデータ
pandas-datareaderで取得したデータのうち,ボリンジャーバンドの計算に必要なデータは,終値(Close)だけです.dfの’Close’の列だけをcloseとして取り出します.
close = df['Close']
TA-Libでボリンジャーバンドを計算
TA-Libでは,以下のコードだけでボリンジャーバンドを得ることができます.
#Bollinger Bands
upper1, middle,lower1 = ta.BBANDS(close, timeperiod=25, nbdevup=1, nbdevdn=1, matype=0)
upper2, middle, lower2 = ta.BBANDS(close, timeperiod=25, nbdevup=2, nbdevdn=2, matype=0)
upper3, middle, lower3 = ta.BBANDS(close, timeperiod=25, nbdevup=3, nbdevdn=3, matype=0)
upper1,lower1が±σのボリンジャーバンド,upper2,lower2が±2σのボリンジャーバンド,upper3,lower3が±3σのボリンジャーバンドです.
最後に,これらをグラフにプロットして完了です.ただし,株価(close)も同時にプロットしています.
plt.plot(close,label='price',color='k')
plt.plot(upper1,label='upper1',color='b')
plt.plot(lower1,label='lower1',color='b')
plt.plot(upper2,label='upper2',color='g')
plt.plot(lower2,label='lower2',color='g')
plt.plot(upper3,label='upper3',color='r')
plt.plot(lower3,label='lower3',color='r')
plt.xlabel('date')
plt.ylabel('price')
plt.legend()
plt.show()

コロナショックでも,ボリンジャーバンド内に株価が収まってますね.
ディスカッション
コメント一覧
まだ、コメントがありません