PythonのTA-Libを使ってRSIを取得してみた

TA-Lib

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のアルゴリズムに若干差があるんですかね。
この原因がわかり次第、次の投稿に記載したいと思います。

タイトルとURLをコピーしました