【Python】TA-LibによるMACDの取得・描画

4月 10, 2021

今回は,テクニカル指標であるMACD(Moving Average Convergence Divergence)をPythonライブラリTA-Libで計算し,描画する方法を紹介します.

本記事のコードを実行することで,以下のような結果が得られます.

MACDについての解説は,テクニカル分析で重要な指標「MACD」とは?売買タイミングやトレンド予測の参考にできるをご覧ください.

各ライブラリのインストール

今回使用するライブラリは以下の通りです.

  • datatime
  • Numpy
  • matplotlib
  • pandas-datareader
  • TA-Lib

このうちTA-Lib以外のライブラリ(モジュール)はpipで簡単にインストールできます.pandas-datareaderの使い方についてはpandas datareaderをインストールして株価データを取得する方法【日本株・米国株】をご覧ください.

TA-Libのインストールはひと手間いるので,Windowsをお使いの場合はTA-LibをWindowsにインストールする方法【Python】を,それ以外の環境をお使いの場合は各自お調べください.

TA-LibによるMACDの描画コード

今回は,2020/5/1~2021/3/1におけるS&P500のMACDを取得してみたいと思います.

コードと結果は以下の通りです.

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,5,1)
end = datetime.date(2021,3,1)

df = web.DataReader('^GSPC', 'yahoo', start, end) #get data

close = df['Close']

#MACD - Moving Average Convergence/Divergence
macd, macdsignal, macdhist = ta.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)

plt.plot(macd,label='macd')
plt.plot(macdsignal,label='macdsignal')
plt.bar(macdhist.index,macdhist ,label='macdhist')
plt.xlabel('date')
plt.ylabel('indicator value')
plt.legend()
plt.show()

実行結果

コード解説

株価データ取得

株価は,pandas_datareaderで取得します.もちろんウェブやローカルにあるCSVファイルを読み込んでデータを取得しても構いません.

start = datetime.date(2020,5,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
2020-04-30  2930.909912  2892.469971  2930.909912  2912.429932  6523120000  2912.429932
2020-05-01  2869.090088  2821.610107  2869.090088  2830.709961  4753160000  2830.709961
2020-05-04  2844.239990  2797.850098  2815.010010  2842.739990  4723140000  2842.739990
2020-05-05  2898.229980  2863.550049  2868.879883  2868.439941  5129590000  2868.439941
2020-05-06  2891.110107  2847.649902  2883.139893  2848.419922  4861920000  2848.419922
...                 ...          ...          ...          ...         ...          ...
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

MACDに必要なデータ

pandas-datareaderで取得したデータのうち,MACDの計算に必要なデータは,終値(Close)だけです.dfの’Close’の列だけをcloseとして取り出します.

close = df['Close']

TA-LibでMACDを計算

TA-Libでは,以下のコードだけでボリンジャーバンドを得ることができます.

#MACD - Moving Average Convergence/Divergence
macd, macdsignal, macdhist = ta.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)

macdがMACD,macdsignalがMACDのシグナル(MACDの移動平均線),macdhistがMACDとシグナルの差分です.

最後に,これらをグラフにプロットして完了です.

plt.plot(macd,label='macd')
plt.plot(macdsignal,label='macdsignal')
plt.bar(macdhist.index,macdhist ,label='macdhist')
plt.xlabel('date')
plt.ylabel('indicator value')
plt.legend()
plt.show()