【Python】TA-Libで移動平均線(SMA)を引く
今回は,テクニカル指標である移動平均線(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()

ディスカッション
コメント一覧
まだ、コメントがありません