【Python】TA-Libでテクニカル指標計算 Part 3. SMA（単純移動平均線）の描画


今回は，テクニカル指標であるSMA（単純移動平均線）をPythonライブラリTA-Libで計算し，描画する方法を紹介します．

・[【Python】TA-Libでテクニカル指標計算 Part 1. RSIの描画](https://qiita.com/Fujinoinvestor/items/852a19fd1a787b31371f)
・[【Python】TA-Libでテクニカル指標計算 Part 2. ボリンジャーバンドの描画](https://qiita.com/Fujinoinvestor/items/7eb56f8de0e90b3406e9)
・[【Python】TA-Libでテクニカル指標計算 Part 3. SMA（単純移動平均線）の描画]
(https://qiita.com/Fujinoinvestor/items/49dc284279c7e9217c30)
・[【Python】TA-Libでテクニカル指標計算 Part 4. MACDの描画](https://qiita.com/Fujinoinvestor/items/9314c404f591f8df53d4)


#TA-Libのインストール

以前の記事

https://qiita.com/Fujinoinvestor/items/405c292cb262d8ca27bf

をご覧ください．

#TA-LibによるSMA描画

##各ライブラリインポート
```python
import datetime
import numpy as np
import matplotlib.pyplot as plt
import pandas_datareader.data as web
import talib as ta
```

##株価データ取得
今回は，2018/1/1~2020/1/1におけるS&P500のSMAを取得してみたいと思います．

株価は，pandas_datareaderで取得します．もちろんウェブやローカルにあるCSVファイルを読み込むなどでも構いません．

```python
start = datetime.date(2018,1,1)
end = datetime.date(2020,1,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
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
```

##SMAに必要なデータ
pandas-datareaderで取得したデータのうち，SMAを計算するために必要なデータは，終値（Close）だけです．dfの’Close’の列だけをcloseとして取り出します（他のカラムでも計算自体はできます）．

```python
close = df['Close']
```

##TA-LibでSMAを計算
```python
#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)
```

##描画
```python
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()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1298289/7195956e-3fb1-7807-cf06-9873c6a68608.png)


#まとめコード
```python

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()
```

もう少しだけ丁寧な解説を以下の記事で行っています．

https://optrip.xyz/?p=2621