PythonのTA-Libを使ったRSIの取得方法を記載します。
RSIとは
RSIは、Relative Strength Index(相対力指数)の略称です。これは、技術分析の一部であり、特定の期間内の価格の変動に基づいて、ある金融商品の過買い・過売りの度合いを示す指標です。RSIは通常、0から100の範囲内で表され、一般的に70以上で過買い、30以下で過売りと見なされます。RSIが高い値になるほど、市場は過熱しており、下落する可能性が高く、逆にRSIが低い値になるほど、市場は過度に売られており、上昇する可能性が高いと見なされます。これはトレーダーが市場の過熱や過度の売りを識別し、適切なエントリーやエグジットのタイミングを見極めるのに役立ちます。
TA-Libを使ったRSIの取得方法
PythonにTA-Libをインストールしていない場合はインストールします。
インストール方法はWindowsのPythonにTA-Libをインストールする方法 (argentinajapan.com)を参考にして下さい
ソースコード
まずはTA-Libをインポートします。これをtaとします。
import talib as ta
taに対してRSI取得関数を記載します。以下の例では取得期間14とします。
df['rsi14']=ta.RSI(df['close'],timeperiod=14)
ちなみに df[‘close’]は、MT5で取得した終値です。RSIを取得するには データフレームの終値を渡す必要があります。
以下にMT5から2024/1/8 12:00から 2024/1/8の13:59までドル円(USDJPY)のデータを1分単位で取得して、これに対して期間14のRSIを求めて最初の20行と最後の10行を表示させるプログラミング例を記載します。
MT5に接続して為替データの取得方法はPythonからMT5に接続して為替データを取得する方法 (argentinajapan.com)を参考にして下さい。
import MetaTrader5 as mt5
import pandas as pd
from datetime import datetime
import pytz
import numpy as np
#Ta-Lib インポート
import talib as ta
#loginidにはMT5にログインするためのloginID,ServernameにはMT5のサーバー名,passwordにはそのパスワードを入力してください。
if mt5.initialize(login=loginid, server="ServerName",password="Password") == False:
print (mt5.last_error())
exit()
timezone = pytz.timezone("Etc/UTC")
date_from = datetime(2024, 1, 8, 12,0, tzinfo=timezone) #2024/1/8 12:00
date_to = datetime(2024, 1, 8, 13, 59, tzinfo=timezone) #2024/1/8 13:59
ticks = mt5.copy_rates_range("USDJPY",mt5.TIMEFRAME_M1,date_from,date_to)
mt5.shutdown()
df = pd.DataFrame(ticks)
df['time']=pd.to_datetime(df['time'], unit='s')
#rsi 期間14指定ここから
df['rsi14']=ta.RSI(df['close'],timeperiod=14)
print(df.head(20)) #2024/1/8 12:00 ~ 12:19までを表示
print(df.tail(10)) #2024/1/8 13:50 ~ 13:59までを表示
実行結果(最初の20行 2024/1/8 12:00~12:19までのデータ表示)
time open high low close tick_volume spread real_volume rsi14
0 2024-01-08 12:00:00 144.231 144.235 144.200 144.230 104 3 0 NaN
1 2024-01-08 12:01:00 144.230 144.260 144.212 144.245 143 3 0 NaN
2 2024-01-08 12:02:00 144.248 144.289 144.248 144.287 159 3 0 NaN
3 2024-01-08 12:03:00 144.287 144.299 144.271 144.279 110 3 0 NaN
4 2024-01-08 12:04:00 144.279 144.311 144.276 144.300 145 3 0 NaN
5 2024-01-08 12:05:00 144.300 144.300 144.288 144.291 106 3 0 NaN
6 2024-01-08 12:06:00 144.291 144.320 144.291 144.308 113 3 0 NaN
7 2024-01-08 12:07:00 144.309 144.314 144.287 144.290 128 3 0 NaN
8 2024-01-08 12:08:00 144.290 144.313 144.285 144.311 166 3 0 NaN
9 2024-01-08 12:09:00 144.312 144.314 144.285 144.296 144 3 0 NaN
10 2024-01-08 12:10:00 144.294 144.308 144.280 144.282 155 3 0 NaN
11 2024-01-08 12:11:00 144.282 144.284 144.274 144.276 77 3 0 NaN
12 2024-01-08 12:12:00 144.277 144.278 144.253 144.255 136 3 0 NaN
13 2024-01-08 12:13:00 144.255 144.263 144.236 144.260 110 3 0 NaN
14 2024-01-08 12:14:00 144.260 144.262 144.253 144.261 49 3 0 57.276995
15 2024-01-08 12:15:00 144.261 144.262 144.224 144.258 82 3 0 56.421202
16 2024-01-08 12:16:00 144.260 144.268 144.246 144.246 70 3 0 53.009384
17 2024-01-08 12:17:00 144.246 144.251 144.230 144.249 77 3 0 53.762160
18 2024-01-08 12:18:00 144.250 144.261 144.240 144.254 127 3 0 55.054493
19 2024-01-08 12:19:00 144.254 144.258 144.244 144.251 87 3 0 54.077858
最初の14行は、「期間14」で指定しているため、計算対象外となります。これによりNaN表示されます。
実行結果(最後の10行 2024/1/8 13:50~13:59までのデータ表示)
time open high low close tick_volume spread real_volume rsi14
110 2024-01-08 13:50:00 144.552 144.552 144.517 144.526 105 3 0 64.301729
111 2024-01-08 13:51:00 144.526 144.558 144.526 144.538 87 3 0 66.299171
112 2024-01-08 13:52:00 144.537 144.545 144.524 144.543 87 3 0 67.124584
113 2024-01-08 13:53:00 144.543 144.567 144.542 144.559 84 3 0 69.683440
114 2024-01-08 13:54:00 144.559 144.566 144.553 144.558 77 3 0 69.320278
115 2024-01-08 13:55:00 144.558 144.559 144.537 144.542 47 3 0 63.608279
116 2024-01-08 13:56:00 144.542 144.554 144.535 144.536 69 3 0 61.559756
117 2024-01-08 13:57:00 144.536 144.571 144.522 144.569 100 3 0 67.717738
118 2024-01-08 13:58:00 144.569 144.587 144.565 144.583 67 3 0 69.919338
119 2024-01-08 13:59:00 144.583 144.587 144.575 144.583 47 3 0 69.919338
無事にRSIの結果を取得できました。
考察
TA-Libで取得したRSIの計算結果と、MT5に表示されているRSIの値に若干差があります。MT5のRSIインジケータのアルゴリズムとTA-LibのRSIのアルゴリズムに若干差があるんですかね。
この原因がわかり次第、次の投稿に記載したいと思います。