こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- PythonでRSIを用いたFXのテクニカル分析を実践したい
- システムトレードにテクニカル分析を適用しFX買い・売りシグナルを自動取得したい
RSIとは
RSI(Relative Strength Index)とは、現在の外国為替相場に対して、ある外貨が「買われすぎか」「売られすぎか」を判断するための指標です。RSIはFXに限らず株や仮想通貨等にも広く利用されている代表的なオシレータ系指標になります。
RSIは、ある期間の平均上昇幅を同じ期間の平均下落幅で引いた値(RS)に基づき、割合として表現される指標です。RSIが取りうる範囲は0~100[%]となります。また、値の解釈として一般的に次のように考察されます。
- 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を計算する場合、下記のような手順で算出します。
- 5日間の平均上昇幅:(20 + 40 + 40 + 30)/5 = 26
- 5日間の平均下落幅:(10 + 10)/5 = 4
- RSを計算: RS = 26 – 4 = 22
- 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・シストレ記事一覧
FXの自動売買やシステムトレードに興味がある方向けに様々な取引実践法を解説しています。
システムトレードによるFX取引解説記事
対応言語 | 記事名 |
---|---|
Python | 【FX】過去データ(ヒストリカルデータ)を大量取得する方法 |
Python | 【FX】テクニカル分析|移動平均線 |
Python | 【FX】テクニカル分析|ボリンジャーバンド |
Python | 【FX】テクニカル分析|MACD |
Python | 【FX】テクニカル分析|RSI |
【参考】仮想通貨・ビットコイン|金融投資情報
当サイトでは仮想通貨・ビットコインにおける多様な分析および自動売買手法を配信しています。ビットコイン投資にも興味がある方は是非こちらもご覧下さい。
仮想通貨・ビットコイン|情報一覧
自動売買ツールとは|超具体的実装方法
【仮想通貨】自動売買ツールの自作方法とおすすめ暗号資産取引所|無料で実践できるビットコイン自動取引の仕組みも徹底解説
「仮想通貨(暗号資産)の自動売買ツール作成に興味がある」「自動売買の仕組み・作り方を知りたい」「どこの仮想通貨取引所がおすすめなのか知りたい」本記事ではこのような要望にお応えします。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら