【FX×Python】RSIによるシストレ実践|外国為替相場のテクニカル分析・自動売買支援

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • PythonでRSIを用いたFXのテクニカル分析を実践したい
  • システムトレードにテクニカル分析を適用しFX買い・売りシグナルを自動取得したい
目次

RSIとは

RSI(Relative Strength Index)とは、現在の外国為替相場に対して、ある外貨が「買われすぎか」「売られすぎか」を判断するための指標です。RSIはFXに限らず株や仮想通貨等にも広く利用されている代表的なオシレータ系指標になります。

RSIは、ある期間の平均上昇幅を同じ期間の平均下落幅で引いた値(RS)に基づき、割合として表現される指標です。RSIが取りうる範囲は0~100[%]となります。また、値の解釈として一般的に次のように考察されます。

RSIの考察
  • RSI = 70 〜 80% : 買われすぎ(売りのサイン
  • RSI = 20 〜 30% : 売られすぎ(買いのサイン

具体的な計算方法も確認し、RSIの算出イメージを掴んでおきましょう。

期間価格上昇・下落幅
1日目1,000円
2日目1,020円+20円
3日目1,010円-10円
4日目1,050円+40円
5日目1,090円+40円
6日目1,080円-10円
7日目1,110円+30円

上記表の場合、2日目からが前日比較できる起算日となるため、例えば5日間の価格データを取り込むには6日分のデータが必要になります。その上で期間を5日間としたRSIを計算する場合、下記のような手順で算出します。

  1. 5日間の平均上昇幅:(20 + 40 + 40 + 30)/5 = 26
  2. 5日間の平均下落幅:(10 + 10)/5 = 4
  3. RSを計算: RS = 26 – 4 = 22
  4. RSIを計算: RSI = 100 – 100/(1+22) = 95[%]

【参考】FX取引をこれから始めたい方向け

FX取引をこれから始めてみたい方向けにおすすめの口座開設先をご紹介します。使い勝手の良い管理画面や非常に見やすいチャート画面を活用し、取引チャンスを見逃したくない方はDMM FXがおすすめです。

【事前準備】Python環境の構築

Pythonテクニカル分析の実践には、事前の環境設定が必要となりますゆえ、次に示すPythonパッケージはインストールしておきましょう。

Ta-Lib

Ta-Libはテクニカル分析に役立つライブラリです。以下の手順に従いインストールしましょう。

共通

最も簡単な方法はAnacondaをインストールしてTa-Libを使用する方法です。

Anacondaをインストール

② Anacondaプロンプトを開き、以下を実行

conda install -c conda-forge ta-lib
Mac OSの方はこちら

①Ta-Lib本体をインストール

brew install ta-lib

②Ta-Lib Pythonパッケージをインストール

pip install TA-Lib

yfinance

外国為替相場データは、yfinanceというPythonパッケージをもとに取得します。

pip install yfinance

mlpfinance

外国為替相場の価格推移グラフを可視化する手段としてmplfinanceを用います。

pip install mplfinance

【FX×Python実践】RSIによる外為相場のテクニカル分析

それでは実際にPythonコーディングを行なっていきます。

オシレータ系指標RSIをもとに外為相場のテクニカル分析を実施します。テクニカル分析をPythonで実施することで、FX売買における取引シグナルを自動取得できるようになることを目指しましょう。

外為相場データの取得

外為相場データを取得します。yahoo financeの関数を用いて下記のように記載しましょう。

コード

import numpy as np
import pandas as pd
import yfinance as yf

# 外為データ取得
data = yf.download(tickers  = 'USDJPY=X',   # 通貨ペア
                   period   = '3mo',        # データ取得期間
                   interval = '1d',         # データ表示間隔
                  )

出力イメージ

print(data)

# 出力イメージ
#                   Open        High         Low       Close   Adj Close  Volume
# Date                                                                          
# 2022-05-24  127.846001  128.050003  126.391998  127.846001  127.846001       0
# 2022-05-25  126.768997  127.415001  126.675003  126.768997  126.768997       0
# 2022-05-26  127.152000  127.559998  126.569000  127.152000  127.152000       0
# 2022-05-27  127.044998  127.210999  126.677002  127.044998  127.044998       0
# 2022-05-30  127.285004  127.806000  126.870003  127.285004  127.285004       0
# 2022-05-31  127.783997  128.878006  127.653000  127.783997  127.783997       0
# 2022-06-01  128.735992  130.115997  128.800003  128.735992  128.735992       0
# 2022-06-02  130.121994  130.181000  129.526993  130.121994  130.121994       0
# 2022-06-03  129.917999  130.970993  129.695007  129.917999  129.917999       0
# 2022-06-06  130.707001  131.675995  130.473007  130.707001  130.707001       0
# 2022-06-07  132.175995  132.988007  132.097000  132.175995  132.175995       0
# 2022-06-08  132.847000  134.436005  132.733002  132.847000  132.847000       0
# 2022-06-09  134.429993  134.554001  133.190994  134.429993  134.429993       0
# 2022-06-10  134.417999  134.380997  133.386993  134.417999  134.417999       0

引数情報

通貨ペアはtickersに指定します。今回の例ではUSD/JPYを設定しています。

yf.download()をもとに「データ取得期間」「取得間隔」を調整すると、スキャルピングトレード・デイトレに適用したデータが取得も可能です。

データの取得範囲はperiodで調整します。

period = “15m”直近15分のデータ取得
period = “1d”直近1日のデータ取得
period = “1mo”直近1ヶ月のデータ取得
period = “3mo”直近3ヶ月のデータ取得
period = “1y”直近1年のデータ取得

データ取得間隔はintervalで調整します。

period = “1m”1分間間隔でデータ表示
period = “15m”15分間間隔でデータ表示
period = “1d”1日おきにデータ表示
period = “10d”10日おきにデータ表示
period = “1mo”1ヶ月おきにデータ表示

RSI

前述で取得した外為相場データをもとに、RSIを算出します。

import talib

# RSI
RSI = talib.RSI(data['Close'],   # 外為データ
                20)              # RSを計算するための期間

print(RSI)
# 出力イメージ
# Date
# 2022-05-31    48.655596
# 2022-06-01    66.132580
# 2022-06-02    79.087192
# 2022-06-03    73.887490
# 2022-06-06    80.185730
# 2022-06-07    87.309413
# 2022-06-08    89.470822
# 2022-06-09    92.991051
# 2022-06-10    92.697544
# 2022-06-13    93.539178
# 2022-06-14    77.032649
# 2022-06-15    83.598880
# 2022-06-16    59.964438
# 2022-06-17    39.770676

FX|RSIによるグラフ可視化

前述で取得した外為相場データおよびRSIの算出結果を用いて、グラフを作成します。

以下のコードを実行してみましょう。

import mplfinance as mpf

# データ分析期間(直近1ヶ月分を指定した場合)
period = 90
data   = data.tail(period)

# グラフ可視化
rsi  = [
        mpf.make_addplot(RSI, panel=2, color='red'),
         ]

mpf.plot(data,              # データ 
         type='candle',     # グラフの種類('candle', 'line')
         volume=True,       # 出来高の表示有無
         style='yahoo',     # グラフスタイル
         addplot=rsi,       # 連結するグラフ情報(RSI)
        )

【コード全量】RSI採用のFXテクニカル分析

最後に本日ご紹介したコードの全量を示します。外為相場データの取得期間やRSIの計算期間を柔軟に調整することで、お好みの取引パターンに応じたテクニカル分析が可能になります。

import numpy as np
import pandas as pd
import yfinance as yf
import talib
import mplfinance as mpf

"""
***************************************************************
外国為替相場データ
***************************************************************
"""
# 外為データ取得
data = yf.download(tickers  = 'USDJPY=X',   # 通貨ペア
                   period   = '3mo',        # データ取得期間
                   interval = '1d',         # データ表示間隔
                  )

"""
***************************************************************
テクニカル指標:RSI
***************************************************************
"""
# RSI
RSI = talib.RSI(data['Close'],   # 外為データ
                20)              # RSを計算するための期間


"""
***************************************************************
グラフ可視化
***************************************************************
"""

# データ分析期間(直近1ヶ月分を指定した場合)
period = 90
data   = data.tail(period)

# グラフ可視化
rsi  = [
        mpf.make_addplot(RSI, panel=2, color='blue'),
         ]

mpf.plot(data,              # データ 
         type='candle',     # グラフの種類('candle', 'line')
         volume=True,       # 出来高の表示有無
         style='yahoo',     # グラフスタイル
         addplot=rsi,       # 連結するグラフ情報(RSI)
        )

【FX】シストレ実践法・その他優良情報

最後までご覧いただきありがとうございました。当サイトではFXにおける多様なシステムトレード手法の解説記事を取り扱っております。

システムトレードによるFX取引解説記事

対応言語記事名
Python【FX】過去データ(ヒストリカルデータ)を大量取得する方法
Python【FX】テクニカル分析|移動平均線
Python【FX】テクニカル分析|ボリンジャーバンド
Python【FX】テクニカル分析|MACD
Python【FX】テクニカル分析|RSI

【参考】仮想通貨・ビットコイン|金融投資情報

当サイトでは仮想通貨・ビットコインにおける多様な分析および自動売買手法を配信しています。ビットコイン投資にも興味がある方は是非こちらもご覧下さい。

仮想通貨・ビットコイン|情報一覧

自動売買ツールとは|超具体的実装方法

最後に

この記事が気に入ったら
フォローしてね!

目次