【Python】TA-Libで移動平均線(SMA)を引く

4月 9, 2021

今回は,テクニカル指標である移動平均線(Moving Average)をPythonライブラリTA-Libで計算し,描画する方法を紹介します.ただし,本記事で扱う移動平均線は単純移動平均線(SMA: Simple Moving Average)に限ります.

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

SMAについての説明は,【投資の基本】移動平均線とは?ゴールデンクロスとデッドクロスで売買をご覧ください.

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

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

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

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

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

TA-LibによるSMA(移動平均線)の描画コード

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

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


import datetime
import numpy as np
import matplotlib.pyplot as plt
import pandas_datareader.data as web
import talib as ta

start = datetime.date(2018,1,1)
end = datetime.date(2020,1,1)

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

close = df['Close']

#Simple Moving Average
sma5 = ta.SMA(close, timeperiod=5)
sma25 = ta.SMA(close, timeperiod=25)
sma50 = ta.SMA(close, timeperiod=50)
sma75 = ta.SMA(close, timeperiod=75)
sma100 = ta.SMA(close, timeperiod=100)

plt.plot(close,label='price')
plt.plot(sma5,label='sma5')
plt.plot(sma25,label='sma25')
plt.plot(sma50,label='sma50')
plt.plot(sma75,label='sma75')
plt.plot(sma100,label='sma100')
plt.xlabel('date')
plt.ylabel('price')
plt.legend()
plt.show()

実行結果

コード解説

株価データ取得

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

start = datetime.date(2018,1,1)
end = datetime.date(2020,1,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
2018-01-02  2695.889893  2682.360107  2683.729980  2695.810059  3367250000  2695.810059
2018-01-03  2714.370117  2697.770020  2697.850098  2713.060059  3538660000  2713.060059
2018-01-04  2729.290039  2719.070068  2719.310059  2723.989990  3695260000  2723.989990
2018-01-05  2743.449951  2727.919922  2731.330078  2743.149902  3236620000  2743.149902
2018-01-08  2748.510010  2737.600098  2742.669922  2747.709961  3242650000  2747.709961
...                 ...          ...          ...          ...         ...          ...
2019-12-24  3226.429932  3220.510010  3225.449951  3223.379883  1296540000  3223.379883
2019-12-26  3240.080078  3227.199951  3227.199951  3239.909912  2160680000  3239.909912
2019-12-27  3247.929932  3234.370117  3247.229980  3240.020020  2428670000  3240.020020
2019-12-30  3240.919922  3216.570068  3240.090088  3221.290039  3013290000  3221.290039
2019-12-31  3231.719971  3212.030029  3215.179932  3230.780029  2893810000  3230.780029

移動平均線に必要なデータ

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

close = df['Close']

TA-Libで移動平均線を計算

TA-Libでは,以下のコードだけで単純移動平均線(SMA)を得ることができます.

#Simple Moving Average
sma5 = ta.SMA(close, timeperiod=5)
sma25 = ta.SMA(close, timeperiod=25)
sma50 = ta.SMA(close, timeperiod=50)
sma75 = ta.SMA(close, timeperiod=75)
sma100 = ta.SMA(close, timeperiod=100)

例えば,sma5は5日間移動平均線です.

最後に,これらをグラフにプロットして完了です.ただし,株価(close)も同時にプロットしています.

plt.plot(close,label='price')
plt.plot(sma5,label='sma5')
plt.plot(sma25,label='sma25')
plt.plot(sma50,label='sma50')
plt.plot(sma75,label='sma75')
plt.plot(sma100,label='sma100')
plt.xlabel('date')
plt.ylabel('price')
plt.legend()
plt.show()