Pythonプログラミングで為替レートを自動取得する方法:初心者向け解説

2024年8月21日

為替レート
イラスト出展:illustAC / RRice

初めに

今回は為替レートをPythonで取得する方法を紹介するね。

「為替レートをプログラムで取得してみたいけど、どうすればいいの?」そんなあなたのために、今回はPythonで為替レートを取得する方法を解説します。

為替レートってそもそも何?

本記事をご覧の方には当たり前だと思いますが、まず為替レートについて解説致します。当たり前ーという方は読み飛ばして下さい。

為替レートとは、2つの通貨間の交換比率のことです。簡単に言うと、ある通貨を別の通貨に換える際に、どれだけの量が必要になるかを表す数値のことです。

例えば、1ドルが100円と表記されている場合、1ドルを日本円に換算すると100円になることを意味します。

為替レートは常に変動しており、経済状況、政治情勢、金利差、需要と供給など、様々な要因によって影響を受けます。

為替レートとは
出展:illustAC / ハム蔵

プログラムで為替レートを取得するメリット

為替レートはYahoo!ファイナンスなどで簡単に確認することが出来るのですが、プログラムで為替レートを取得すると、さらに多くのメリットがあります。

  1. 自動化とリアルタイム性:
    手動で為替レートを調べる必要がなくなり、プログラムで自動的に最新のレートを取得できます。リアルタイムのレートを取得できるため、最新のレートに基づいた計算や分析が可能です。

  2. 効率性と正確性:
    手動での入力ミスや情報収集の遅延を防ぎ、効率的な処理を実現できます。

  3. 統合と連携:
    プログラムで取得した為替レートを、他のシステムやアプリケーションに簡単に統合できます。財務管理システムや取引システムなど、様々なシステムと連携して利用できます。

  4. データ分析とシミュレーション:
    取得した為替レートデータを分析することで、為替レートのトレンドや変動パターンを把握できます。為替レートの変動をシミュレーションし、リスク管理や投資戦略の策定に役立てることができます。

    為替レート
    出展:illustAC / Snowdrop

プログラムで為替レートを取得する方法

プログラムで為替レートを取得する方法は、大きく分けて2つあります。

1. API を使う

APIとは、アプリケーションプログラミングインターフェースの略で、プログラム同士がデータや機能をやり取りするための仕組みです。証券会社や金融データ提供会社が提供するAPIを利用することで、為替レートを簡単に取得できます。

メリット

  • リアルタイム性が高い
  • 法的な問題が少ない
  • ドキュメントが提供されている

デメリット

  • 費用が発生する場合がある
  • 利用制限がある場合がある
  • サービスが終了する場合がある

2. スクレイピング

スクレイピングとは、ウェブサイトから情報を自動的に取得する技術です。証券会社などのウェブサイトから、プログラムで為替レートを抜き取る方法です。

メリット

  • 無料で利用できる
  • APIよりサービス終了のリスクが少ない

デメリット

  • リアルタイム性が低い
  • APIよりメンテ性が低い
  • 法的な問題が発生する可能性がある

本サイトでお薦めする方法

スクレイピングは無料で利用できる手軽さがある反面、ウェブサイトの運営者の許可なくデータを収集することになるため、法的問題が発生するリスクがあります。そのため、本記事ではAPIによる為替レートの取得方法に焦点を当てて解説していきます。

為替レート取得APIを提供している会社

為替レート取得APIを提供している代表的な会社は以下になります。

OANDA証券

OANDA証券

OANDA証券は、FX取引やCFD取引などを提供しているグローバルな金融機関です。APIは、FX取引に特化しており、為替レート以外にも、注文やポジション管理などの機能も提供しています。

  • APIの特徴:多くの通貨ペアのリアルタイムレートを取得できます。APIを通じてFX取引を行うこともできます。
    -ドキュメント: 英語で提供されています。
  • 費用: 無料ですが口座残高が25万円以上必要です。
  • 公式ページ:https://www.oanda.jp/fxproduct/api

Alpha Vantage

Alpha Vantage

Alpha Vantageは、金融データや経済指標などのAPIを提供している企業です。為替レート以外にも、株価、商品、経済指標などのデータを取得できます。

  • APIの特徴:為替レート以外にも、様々な金融データを取得できます。無料プランでは、データの精度や更新頻度に制限があります。
  • ドキュメント: 英語で提供されています。
  • 費用:無料版はリアルタイムデータではありません。リアルタイムのデータを取得するには月額5,000円程度かかります。
  • 公式ページ:https://www.alphavantage.co/

GMOコイン

GMOコイン

GMOコインは、暗号資産取引所を運営している企業です。APIは、暗号資産の取引に特化しており、為替レート以外にも、注文やポジション管理などの機能も提供しています。

  • APIの特徴:多くの通貨ペアのリアルタイムレートを取得できます。APIを通じてFX取引を行うこともできます。
  • ドキュメント: APIのドキュメントが日本語で提供されています。
  • 費用:無料です。APIを通じてFX取引を行う場合約定毎に0.002円がかかります。
  • 公式ページ:https://coin.z.com/jp/corp/product/info/fx/api/

お薦めの為替レート取得API提供会社

有名なのはOANDA証券ですが、私のお薦めはGMOコインになります。

自動売買を行う場合、取引を無料で行えるOANDA証券がお勧めですが、口座解説しないとAPIが利用出来ないのと、マニュアルが英語で解読するのが結構大変です。その点、GMOコインは口座開設をしなくてもAPIが利用出来て、かつ、マニュアルが日本語になります。また、APIを利用するには大抵はAPIキーというものを発行する必要があるのですが、GMOコインの為替レート取得APIではAPIキーが必要無いPublic APIとなっています。ですので、気軽にプログラムで為替レートの取得をしてみようとする場合、試し易いGMOコインが断然お薦めとなります。

GMOコインのAPIで為替レートを取得する方法

最新のドル円為替レートの取得方法

GMOコインのAPIで最新のドル円為替レートを取得する方法は以下の様になります。

ソースコード

import requests
import json
import pandas as pd

# GMOコインのAPIで最新の為替レートを取得
end_point = 'https://forex-api.coin.z.com/public'
api_path = f'/v1/ticker'

response = requests.get(f'{end_point}{api_path}')
if response.status_code != 200:
  print(f'エラーが発生しました。ステータス:{response.status_code}, メッセージ:{response.text}')
  exit(-1)

# レスポンス結果を取得
data = response.json()
print(data)

# pandasにデータを格納
df = pd.DataFrame(data["data"])
print(df)

# USDJPYのデータのみ抽出
usd_jpy_data = df.loc[df['symbol'] == 'USD_JPY']
print(usd_jpy_data)

ソースの解説

GMOコインの最新レート取得API(ticker)を実行することで、最新の為替レートが取得出来ます。

最新レート取得API(ticker)のURLはhttps://forex-api.coin.z.com/public/v1/tickerとなります。

【パラメタ】
パラメタはありません。

【レスポンス】

項目 説明
symbol 取扱銘柄。ドル円はUSD_JPY。取得出来る通貨ペアはこちらを参照して下さい。
ask 現在の買値
bid 現在の売値
timestamp 現在レートのタイムスタンプ
status 外国為替FXステータス: CLOSE OPEN(取引時間か否か)

実際のレスポンス

以下の様にJSON形式で結果が返却されます。

{'status': 0, 
 'data': [
   {'symbol': 'USD_JPY', 'ask': '148.163', 'bid': '148.162', 'timestamp': '2024-08-16T15:51:52.981761Z', 'status': 'OPEN'}, 
   {'symbol': 'EUR_JPY', 'ask': '162.912', 'bid': '162.909', 'timestamp': '2024-08-16T15:51:52.981921Z', 'status': 'OPEN'}, 
   {'symbol': 'GBP_JPY', 'ask': '191.181', 'bid': '191.177', 'timestamp': '2024-08-16T15:51:52.981569Z', 'status': 'OPEN'}, 
   {'symbol': 'AUD_JPY', 'ask': '98.476', 'bid': '98.473', 'timestamp': '2024-08-16T15:51:52.980911Z', 'status': 'OPEN'},
  ・・・
]}

pandasを使うとデータの加工が簡単です

pythonでjson形式でデータを扱うのは少し手間なので、pandasにデータを格納するとデータ操作が楽になります。pandasにデータを入れるには、以下を実行します。

df = pd.DataFrame(data["data"])

そうすると以下の様にデータがpandasに格納されます。

     symbol      ask      bid                    timestamp status
0   USD_JPY  148.163  148.162  2024-08-16T15:51:52.981761Z   OPEN
1   EUR_JPY  162.912  162.909  2024-08-16T15:51:52.981921Z   OPEN
2   GBP_JPY  191.181  191.177  2024-08-16T15:51:52.981569Z   OPEN
3   AUD_JPY   98.476   98.473  2024-08-16T15:51:52.980911Z   OPEN
4   NZD_JPY   89.381   89.376  2024-08-16T15:51:52.979743Z   OPEN
5   CAD_JPY  108.093   108.09  2024-08-16T15:51:52.980616Z   OPEN
6   CHF_JPY  170.587  170.582  2024-08-16T15:51:52.981165Z   OPEN
7   EUR_USD  1.09956  1.09954  2024-08-16T15:51:52.982037Z   OPEN
8   TRY_JPY    4.399    4.384  2024-08-16T15:51:52.979481Z   OPEN
9   ZAR_JPY    8.287    8.277  2024-08-16T15:51:52.981226Z   OPEN
10  MXN_JPY     7.95    7.948  2024-08-16T15:51:52.980325Z   OPEN
11  GBP_USD  1.29036   1.2903  2024-08-16T15:51:52.982338Z   OPEN
12  AUD_USD  0.66465  0.66463  2024-08-16T15:51:52.979941Z   OPEN
13  NZD_USD  0.60328  0.60322  2024-08-16T15:51:52.980187Z   OPEN

ドル円のレコードを取得したい場合は以下のコードを実行します。

usd_jpy_data = df.loc[df['symbol'] == 'USD_JPY']

結果は以下になります。

    symbol      ask      bid                    timestamp status
0  USD_JPY  148.163  148.162  2024-08-16T15:51:52.981761Z   OPEN

最新のドル円1分足為替レートの取得方法

GMOコインのAPIで最新のドル円1分足為替レートの取得する方法は以下の様になります。

ソースコード

import datetime
import requests
import json
import pandas as pd

# 現在時刻取得
now_date = datetime.datetime.now()

# GMOコインのAPIで最新の1分足の為替レートを取得
end_point = 'https://forex-api.coin.z.com/public'
api_path = f'/v1/klines?symbol=USD_JPY&priceType=ASK&interval=1min&date={now_date.strftime("%Y%m%d")}'

response = requests.get(f'{end_point}{api_path}')
if response.status_code != 200:
  print(f'エラーが発生しました。ステータス:{response.status_code}, メッセージ:{response.text}')
  exit(-1)

# レスポンス結果を取得
data = response.json()
print(data)

# pandasにデータを格納
df = pd.DataFrame(data["data"])
print(df)

ソースの解説

GMOコインのKLine情報取得APIを実行することで、分速などの為替レートが取得出来ます。

KLine情報取得APIのURLはhttps://forex-api.coin.z.com/public/v1/klinesとなります。

【パラメタ】

項目 必須 説明
symbol 必須 取得したい通貨ペアをしています。ドル円の場合はUSD_JPYを指定します。指定出来る通貨ペアはこちらを参照して下さい。
priceType 必須 BID または ASKを指定します
interval 必須 以下の何れかを指定します。1分足データの場合は1minを指定します。
1min 5min 10min 15min 30min 1hour 4hour 8hour 12hour 1day 1week 1month
date 必須 取得したい日をYYYYMMDD形式形式で指定します。最新のレートを取得したい場合は当日日付をYYYYMMDDで指定します。

【レスポンス】

項目 説明
openTime 開始時刻のunixタイムスタンプ(ミリ秒)
open 始値
high 高値
low 安値
close 終値

実際のレスポンス

以下の様にJSON形式で結果が返却されます。

{'status': 0, 
'data': [
  {'openTime': '1723755600000', 'open': '149.348', 'high': '149.356', 'low': '149.348', 'close': '149.355'},
  {'openTime': '1723755660000', 'open': '149.355', 'high': '149.371', 'low': '149.355', 'close': '149.37'}, 
  {'openTime': '1723755720000', 'open': '149.37', 'high': '149.372', 'low': '149.369', 'close': '149.372'}, 
  ・・・
]}

pandasを使うとデータの加工が簡単です

pythonでjson形式で大量データを扱うのは手間なので、pandasにデータを格納するとデータ操作が楽になります。pandasにデータを入れるには、以下を実行します。

df = pd.DataFrame(data["data"])

そうすると以下の様にデータがpandasに格納されます。

           openTime     open     high      low    close
0     1723755600000  149.348  149.356  149.348  149.355
1     1723755660000  149.355  149.371  149.355   149.37
2     1723755720000   149.37  149.372  149.369  149.372
3     1723755780000  149.372  149.382  149.372   149.38
4     1723755840000   149.38   149.38  149.378  149.379
...             ...      ...      ...      ...      ...
1104  1723821840000  148.173  148.175  148.161  148.168
1105  1723821900000  148.168  148.183  148.152  148.183
1106  1723821960000  148.183   148.19  148.168  148.183
1107  1723822020000  148.183  148.187   148.15  148.161
1108  1723822080000  148.161  148.173  148.144   148.16

その他のGMOコインのFX APIの機能

GMOコインのFX APIでは上記で紹介した以外にも様々な機能を提供しています。

Public API

  • 外国為替FXステータス:外国為替FXの稼動状態を取得します。
  • 最新レート:全銘柄分の最新レートを取得します。
  • KLine情報の取得:指定した銘柄の四本値を取得します。
  • 取引ルール:取引ルールを取得します。

Private API

  • 資産残高を取得:資産残高を取得します。
  • 注文情報取得:指定した注文IDの注文情報を取得します。
  • 有効注文一覧:有効注文一覧を取得します。
  • 約定情報取得:約定情報を取得します。
  • 最新の約定一覧:最新約定一覧を取得します。
  • 建玉一覧を取得:有効建玉一覧を取得します。
  • 建玉サマリーを取得:建玉サマリーを取得します。
  • スピード注文:スピード注文をします。
  • 注文:新規注文をします。
  • IFD注文:IFD注文をします。
  • IFDOCO注文:IFDOCO注文をします。
  • 注文変更:注文変更をします。
  • OCO注文変更:OCO注文変更をします。
  • IFD注文変更:IFD注文変更をします。
  • IFDOCO注文変更:IFDOCO注文変更をします。
  • 注文の複数キャンセル:複数の注文を取消します。
  • 注文の一括キャンセル:一括で注文(通常注文、特殊注文いずれも)を取消します。
  • 決済注文:決済注文をします。

各機能の詳細

各APIの詳しい説明は本家のマニュアルを参照下さい。
https://api.coin.z.com/fxdocs/#outline

最後に

この記事では、Pythonで為替レートを取得する方法を解説しました。GMOコインのPublic APIは、簡単に使用でき、日本語のドキュメントも充実しているので、初心者の方でも安心して試すことができます。

ぜひ、この記事を参考にして、プログラムで為替レートを取得してみてください。

注意

  • 本記事は、Pythonを用いたFX為替レート取得の技術的な解説を目的としており、投資を推奨するものではありません。
  • FX取引は価格変動のリスクを伴うため、投資の最終決定は、ご自身の判断と責任で行ってください。