今回は,テクニカル指標であるボリンジャーバンド(Bollinger Bands)をPythonライブラリTA-Libで計算し,描画する方法を紹介します.
・【Python】TA-Libでテクニカル指標計算 Part 1. RSIの描画
・【Python】TA-Libでテクニカル指標計算 Part 2. ボリンジャーバンドの描画
・[【Python】TA-Libでテクニカル指標計算 Part 3. SMA(単純移動平均線)の描画]
(https://qiita.com/Fujinoinvestor/items/49dc284279c7e9217c30)
・【Python】TA-Libでテクニカル指標計算 Part 4. MACDの描画
#TA-Libのインストール
以前の記事
をご覧ください.
#TA-Libによるボリンジャーバンド描画
##各ライブラリインポート
import datetime
import numpy as np
import matplotlib.pyplot as plt
import pandas_datareader.data as web
import talib as ta
##株価データ取得
今回は,2020/1/1~2021/3/1におけるS&P500のボリンジャーバンドを取得してみたいと思います.
株価は,pandas_datareaderで取得します.もちろんウェブやローカルにあるCSVファイルを読み込むなどでも構いません.
start = datetime.date(2020,1,1)
end = datetime.date(2021,3,1)
df = web.DataReader('^GSPC', 'yahoo', start, end) #get data
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でボリンジャーバンドを計算
#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()
#まとめコード
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()
もう少しだけ丁寧な解説を以下の記事で行っています.