【Python】TA-Libでテクニカル指標計算 Part 1. RSIの描画

今回は，テクニカル指標である RSI(Relative Strength Index) を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によるRSI描画

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

##株価データ取得
今回は，2019/4/1~2020/4/1におけるS&P500の9日RSIと14日RSIをTA-Libで取得してみたいと思います．

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

```python
start = datetime.date(2019,4,1)
end = datetime.date(2020,4,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-04-01  2869.399902  2848.629883  2848.629883  2867.189941  3500760000  2867.189941
2019-04-02  2872.899902  2858.750000  2868.239990  2867.239990  3246900000  2867.239990
2019-04-03  2885.250000  2865.169922  2876.090088  2873.399902  3550240000  2873.399902
2019-04-04  2881.280029  2867.139893  2873.989990  2879.389893  3015180000  2879.389893
2019-04-05  2893.239990  2882.989990  2884.159912  2892.739990  3146820000  2892.739990
...                 ...          ...          ...          ...         ...          ...
2020-03-26  2637.010010  2500.719971  2501.290039  2630.070068  7753160000  2630.070068
2020-03-27  2615.909912  2520.020020  2555.870117  2541.469971  6194330000  2541.469971
2020-03-30  2631.800049  2545.280029  2558.979980  2626.649902  5746220000  2626.649902
2020-03-31  2641.389893  2571.149902  2614.689941  2584.590088  6568290000  2584.590088
2020-04-01  2522.750000  2447.489990  2498.080078  2470.500000  5947900000  2470.500000
```

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

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

##TA-LibでRSIを計算
```python
#RSI(Relative Strength Index)
rsi9 = ta.RSI(close, timeperiod=9)
rsi14 = ta.RSI(close, timeperiod=14)
```

##描画
```python
plt.plot(rsi9,label='rsi9')
plt.plot(rsi14,label='rsi14')
plt.xlabel('date')
plt.ylabel('RSI')
plt.legend()
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1298289/06aa8713-af7f-07ec-92ae-3ee1dd7bd847.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(2019,4,1)
end = datetime.date(2020,4,1)

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

close = df['Close']

#RSI(Relative Strength Index)
rsi9 = ta.RSI(close, timeperiod=9)
rsi14 = ta.RSI(close, timeperiod=14)

plt.plot(rsi9,label='rsi9')
plt.plot(rsi14,label='rsi14')
plt.xlabel('date')
plt.ylabel('RSI')
plt.legend()
plt.show()
```

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

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