Pythonで「REST API」から為替データを取得する方法について解説
Pythonを使ってREST API(以下、API)から為替データを取得する方法について解説します。
APIを利用すると、さまざまな通貨ペアの為替データを取得でき、バックテストやシグナル検知など、さまざまな用途に利用することができます。
また、取得したデータをPythonでローソク足チャートに表示する方法についても解説します。
為替データを取得する
本記事では、APIで為替データを取得する3つの方法をご紹介します。
- 1.最新の為替データを取得する
- 2.リアルタイムにデータを取得する
- 3.過去データを取得する
いずれもドル円を例に為替データを取得していきます。
事前準備
PythonでAPIを利用するためには、次の2点が必要です。
- 1.APIトークンの発行
- 2.oandapyV20のインストール
詳細についてはこちらの記事で解説しておりますのでご参照ください。
>Pythonで「REST API」を使用するまでの4つの手順について解説
【方法1】 最新の為替データを取得する
最新の為替データを取得するためには、oandapyV20.endpoints.pricing.PricingInfoを使います。
from oandapyV20.endpoints.pricing import PricingInfo
from oandapyV20 import API
# アカウントID, APIトークンの定義
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# パラメータの設定
params = {
"instruments": "USD_JPY"
}
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 為替データを取得
r = PricingInfo(accountID=account_id, params=params)
client.request(r)
print(r.response)
APIを利用する際には、oandapyV20.APIでクラスを作成します。
この時、access_tokenにAPIトークンを指定します。
environmentで、本番環境(live)あるいはデモ環境(practice)を指定することができます。
最新の為替データを取得するには、PricingInfoを使います。
引数にはaccount_idとparamsを指定します。
paramsには、instrumentsとしてUSD_JPYを設定します。
これで、為替データを取得することができます。
返り値はJson形式です。
時刻やAsk、Bid Priceなどの情報が取得できていることが確認できます。
【方法2】リアルタイムにデータを取得する
oandapyV20.endpoints.pricing.PricingStreamを使うと、リアルタイムの為替データを取得することができます。
価格情報に変更があると自動更新されます。
from oandapyV20.endpoints.pricing import PricingStream
from oandapyV20 import API
# APIトークンの定義
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# パラメータの設定
params = {
"instruments": "USD_JPY"
}
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 為替データを取得
r = PricingStream(accountID=account_id, params=params)
client.request(r)
print(r.response)
使い方はPricingInfoとほとんど変わりません。
ただし、PricingStreamの場合、返り値がgeneratorになります。
次のようにfor分でデータを取り出すと、データが自動更新されていることが確認できます。
値に変更があるたびに、最新データが下に追加されて表示されます。
for i in r.response:
print(i)
【方法3】 過去データを取得する
oandapyV20.endpoints.instruments.InstrumentsCandlesを使うと過去データを取得することができます。
次のコードでは、ドル円の日足データを過去30日分取得しています。
import oandapyV20.endpoints.instruments as instruments
from oandapyV20 import API
# APIトークンの定義
api_token = "APIトークンを設定してください"
# パラメータの設定
params = {
"granularity": "D", # ローソク足の間隔
"count": 30, # 取得する足数
"price": "M", # B: Bid, A:Ask, M:Mid
}
# 通貨ペアの設定
instrument = "USD_JPY"
# API用のクラスを定義
client = API(access_token=api_token, environment="practice")
# 為替データを取得
r = instruments.InstrumentsCandles(instrument=instrument, params=params)
client.request(r)
print(r.response)
返り値はJson形式になっており、’candles’に為替データが格納されていることが確認できます。
パラメータの定義
InstrumentsCandlesでは、パラメータ(params)に次の3つを指定します。
- 1.granularity
- 2.count
- 3.price
granularityはローソク足の間隔です。
Dは日足(Daily)を示します。
その他に設定できる値は次の通りです。
H(時間足)、M(分足)、S(秒足)については、その後に数値を指定する必要があります。
- ● W: 週足
- ● D: 日足
- ● H: 時間足
- ○ H1: 1時間足
- ○ H2: 2時間足
- ○ H3: 3時間足
- ○ H4: 4時間足
- ○ H6: 6時間足
- ○ H8: 8時間足
- ○ H12: 12時間足
- ● M: 分足
- ○ M1: 1分足
- ○ M2: 2分足
- ○ M4: 4分足
- ○ M5: 5分足
- ○ M10: 10分足
- ○ M15: 15分足
- ○ M30: 30分足
- ● S: 秒足
- ○ S5: 5秒足
- ○ S10: 10秒足
- ○ S15: 15秒足
- ○ S30: 30秒足
countはデータ数です。
日足でcountを100に設定すると過去100日分となります。
priceではB、A、Mのいずれかを指定することができます。
- B: Bid Price
- A: Ask Price
- M: Mid Price (Bid PriceとAsk Priceの平均値)
となります。
ローソク足チャートに表示する
次に取得した為替データをローソク足チャートに表示してみます。
Pythonにはローソク足チャートを描けるライブラリがいくつかありますが、ここではmplfinanceを使います。
mplfinanceのインストール
まずは、mplfinanceをPython環境にインストールします。
pipコマンド(Anacondaを利用している場合はcondaコマンドでも可能)を使ってインストールしてください。
pip install mplfinance
conda install mplfinance
Json形式のデータをDataFrameに変換する
次にデータを準備します。
oandapyV20で取得したデータはJson形式であるため、これをDataFrameに変換します。
取得したデータの’candles’に為替データが入っています。
‘time’には時刻データ、’volume’には出来高データが入っています。
これらを順番に取り出してDataFrameに変換していきます。
合わせてカラム名も変更します。
import pandas as pd
# 為替データを格納するためのリストを定義
price_data = []
# データを1つずつ取り出してprice_dataに格納する
for row in r.response["candles"]:
# 辞書を定義
data = {}
# dataに格納する
data["datetime"] = row["time"]
data.update(row["mid"])
data["volume"] = row["volume"]
# price_dataに追加する
price_data.append(data)
# DataFrameに変換する
df = pd.DataFrame(price_data)
# カラム名の定義
columns = {
"o": "open",
"h": "high",
"l": "low",
"c": "close"
}
# カラム名の変更
df.rename(columns=columns, inplace=True)
df.head()
データのフォーマットを整える
次にデータのフォーマットを整えます。
これはmplfinanceの仕様に合わせるためです。
mplfinanceでローソク足チャートを描くためには、DataFrameのindexを日付データとし、カラムは左から始値、高値、安値、終値、出来高(出来高は任意)の順番にしておく必要があります。
カラムの順番はすでに指定通りになっているので変更不要です。
必要な作業は次の通りです。
- 1.「datetime」を文字列からdatetime型に変換する
- 2.「datetime」以外のカラムを文字列から数値データ(float)に変換する
- 3.「datetime」をindexに設定する
# datetimeの型変換
datetime_format = "%Y-%m-%dT%H:%M:%S.000000000Z"
df["datetime"] = pd.to_datetime(df["datetime"], format=datetime_format)
# datatimeをindexに指定
df.set_index("datetime", inplace=True)
# 数値データをfloatに変換
df = df.astype(float)
df.head()
これでデータのフォーマットが整いました。
mplfinanceでローソク足チャートを描く
最後にmplfinanceでローソク足チャートを描きます。
import mplfinance as mpf
mpf.plot(df, type="candle", style="yahoo", volume=True)
ローソク足チャートを描くには、mplfinanceのplot関数を使用します。
最初の引数にDataFrameを設定して、typeをcandleと指定するとローソク足チャートとなります。
volume=Trueとすると出来高を加えることも可能です。
さらにstyle=”yahoo”とするとYahoo!ファイナンスのチャートのようなデザインにすることができます。
本記事の執筆者:TAT
本記事の執筆者:TAT | 経歴 |
---|---|
2016年大学院卒業後、外資系IT企業に入社。 その後は金融情報→不動産テック→アドテク企業で、Pythonを用いたプロセスオートメーション、ダッシュボード開発、データ分析、AI開発などの業務に従事。 プログラミングや株式投資に関する情報を発信する「気ままなブログ」を運営中。 |
「REST API」をさらに学びたい方へオススメのコンテンツ
OANDA証券では、「REST API」に関する記事を豊富に提供しています。
「REST API」を利用するための手順、プログラミング言語の一つPythonを使い「REST API」を使用するまでの手順など、初心者の方向けコンテンツも豊富にあるので、APIを使った取引を始めてみたい方はぜひ参考にしてください。
ただしAPIを利用した取引は、OANDA証券の口座開設+いくつかの条件があります。
事前に確認を行い、ぜひOANDA証券の口座を開設し「REST API」を使った取引をご検討ください。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。