【FX×Python】外国為替過去データの取得方法|ヒストリカルデータを用いたテクニカル分析の精度UPに向けて

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

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

こんな方におすすめ!
  • FXのテクニカル分析に興味がある
  • Pythonで過去の外国為替相場データを大量取得する方法が知りたい
目次

【FX×Python】外国為替相場のヒストリカル価格データの取得

本記事ではFXのテクニカル分析に応用に向けて、外国為替相場のヒストリカルデータを大量取得する方法について解説します。下記のPythonライブラリを使用した方法の解説が主です。

  • forex-pythonのパッケージを用いたデータ取得方法

【参考】FX取引におすすめの取引所

Python環境設定・事前準備

forex-pythonというPythonライブラリを利用できるようにする必要があります。

ターミナルまたはコマンドプロンプトを開き、以下を実行しましょう。

pip install forex-python

【FX×Python実践】過去の外為データ取得

Pythonを用いて外国為替相場の過去データを取得する方法について解説します。

最新の外国為替レートを取得

最新の外国為替レートを取得するには、引数に基準となる通貨を指定し、次のように実行します。

from forex_python.converter import CurrencyRates

# 通貨(日本円の場合: JPYと指定)
currency = 'USD'

# 実行
obj = CurrencyRates()
obj.get_rates(currency)   
# 出力イメージ
# {'EUR': 0.9334453467749464,
#  'JPY': 128.21805283300665,
#  'BGN': 1.82563240922244,
#  'CZK': 23.069168300196026,
#  'DKK': 6.944273312797536,
#  'GBP': 0.7947166993372539,
#  'HUF': 369.83104639223376,
#  'PLN': 4.275646410902642,
#  'RON': 4.611966769345655,
#  'SEK': 9.806123401474844,
#  'CHF': 0.9596751610193224,
#  'ISK': 127.2286007654252,
#  'NOK': 9.426211145337442,
#  'HRK': 7.039111360029871,
#  'TRY': 16.411556053393078,
#  'AUD': 1.3939139363390276,
#  'BRL': 4.757304209838514,
#  'CAD': 1.2669653691776348,
#  'CNY': 6.664986465042472,
#  'HKD': 7.846821618594232,
#  'IDR': 14543.218519555681,
#  'INR': 77.69158965742555,
#  'KRW': 1240.8475683748718,
#  'MXN': 19.5902174927658,
#  'MYR': 4.37851208811724,
#  'NZD': 1.5363576962568841,
#  'PHP': 52.574442266405306,
#  'SGD': 1.3709511808083636,
#  'THB': 34.305049939326054,
#  'ZAR': 15.630542331746478}

過去特定断面の外国為替レートを取得

過去の特定日付における為替レートを取得するには、引数に「日付」と「基準となる通貨」を指定し、次のように実行します。

from datetime import datetime
from forex_python.converter import CurrencyRates

# 通貨
currency = 'JPY'

# 日付を指定(年, 月, 日, 時, 分)
date_obj = datetime(2021, 5, 23, 18, 0)

# 実行
obj = CurrencyRates()
obj.get_rates(currency, date_obj)
# 出力イメージ
# {'EUR': 0.007540909433677701,
#  'USD': 0.009190860417766383,
#  'JPY': 1,
#  'BGN': 0.014748510670386848,
#  'CZK': 0.19193122690596484,
#  'DKK': 0.05607571073071412,
#  'GBP': 0.006475378930699042,
#  'HUF': 2.6326068923912223,
#  'PLN': 0.033852650629665935,
#  'RON': 0.037152552597843294,
#  'SEK': 0.07632908528768569,
#  'CHF': 0.00825804992082045,
#  'ISK': 1.115300505240932,
#  'NOK': 0.07647990347635923,
#  'HRK': 0.05663373802880627,
#  'RUB': 0.674716084759822,
#  'TRY': 0.07703114395596108,
#  'AUD': 0.011837719628987255,
#  'BRL': 0.04873538948797224,
#  'CAD': 0.011070055048638864,
#  'CNY': 0.059115451323429595,
#  'HKD': 0.0713664127893824,
#  'IDR': 131.93477113339867,
#  'ILS': 0.029905738632079026,
#  'INR': 0.6696478395294473,
#  'KRW': 10.354045697911166,
#  'MXN': 0.18304878968403587,
#  'MYR': 0.03805972400271473,
#  'NZD': 0.012754694216122462,
#  'PHP': 0.4403212427418746,
#  'SGD': 0.012229846919538495,
#  'THB': 0.28831913128723324,
#  'ZAR': 0.12810496945931676}

指定した期間の相場情報を大量取得

指定した日付期間の外国為替レートを大量取得するには、「開始日」「終了日」「通貨ペア」を指定し、次のように実行します。

import pandas as pd
from datetime import datetime
from forex_python.converter import CurrencyRates

"""
********************************
引数情報(要チェック)
********************************
"""
# 開始日
start_date = datetime(2022, 5, 15, 0, 0)
# 終了日
end_date   = datetime.today()

# 通貨ペア|基準通貨
currency_1 = 'USD'
# 通貨ペア|比較通貨
currency_2 = 'JPY'


"""
********************************
実行(以下修正不要)
********************************
"""
# FX Object
obj = CurrencyRates()

# 為替レート計算
def historical_rate(datetime,currency1, currency2):
    try:
        return obj.get_rate(currency1, currency2, datetime)
    
    except Exception as re:
        print(re)
        return None

# データフレーム
df = pd.DataFrame(pd.date_range(start = start_date,  # 開始日
                                end   = end_date,    # 終日
                                freq  = 'B'          # 営業日のデータのみ取得(Only Business Day)
                                ), 
                  columns=['DateTime']
                 )

# 結果加工
currency_pair      = currency_1 + "/" + currency_2
df[currency_pair]  = df['DateTime'].apply(historical_rate, args=(currency_1,currency_2))

# 出力
print(df)
# 出力イメージ
#      DateTime     USD/JPY
# 0  2022-05-20  127.956888
# 1  2022-05-23  127.638615
# 2  2022-05-24  127.322761
# 3  2022-05-25  127.008258
# 4  2022-05-26  127.091708
# 5  2022-05-27  126.888640
# 6  2022-05-30  127.508361
# 7  2022-05-31  128.218053
# 8  2022-06-01  128.218053

【FX×Python実践】為替レート計算

指定した通貨ペアの為替レートを計算する方法について以下解説します。

指定した通貨ペアの最新レートを取得

指定した通貨ペアの最新レートを取得するには次のように実行します。

from forex_python.converter import CurrencyRates

# 通貨ペア|基準通貨
currency_1 = 'USD'
# 通貨ペア|比較通貨
currency_2 = 'JPY'

obj  = CurrencyRates()
rate = obj.get_rate(currency_1, currency_2) 
# 出力
print(currency_1+"/"+currency_2+": "+str(rate))

# 出力イメージ
# USD/JPY: 128.21805283300665

為替レートをもとに特定通貨の価格変換

例えば、USD100ドルを日本円(JPY)に変換した際の「日本円価格」を算出したい場合、次のように記載します。基準通貨に変換元の通貨、比較通貨に変換後の通貨を指定しましょう。

# 通貨ペア|基準通貨
currency_1 = 'USD'
# 基準通貨の価格
price      = 100
# 通貨ペア|比較通貨
currency_2 = 'JPY'

result = obj.convert(currency_1 ,currency_2, price) 
# 出力
print(currency_1+"("+str(price)+")を"+currency_2+"に変換後の価格: "+str(result))

# 出力イメージ
# USD(100)をJPYに変換後の価格: 12821.80

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

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

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

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

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

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

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

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

最後に

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

本記事をシェア!
目次