【OANDA】Pythonを使って為替データを取得する

どうも、たぬきねこ(@tnkicom)です。

今回は、OANDA APIとPythonを使って為替データ(価格データ)を取得したいと思います。

Python からOANDA V20 APIを使って為替データを取得します。

前提

環境

まず、私の環境は

  • python 3.8
  • oandapyV20 : 0.6.3

です。

OANDA APIを使うための環境構築

今回はOANDA APIを使います。

OANDA APIを使うためにデモ、もしくは本番口座を作成して、アクセストークンを取得しておく必要があります。以下の記事を参考にしてください。

また、oandapyV20をpipでインストールしておく必要があります。pipで簡単にインストールできます。

pip install oandapyV20

為替データを取得する

では、実際に為替データを取得していきます。

これ以降はOANDA APIのアクセストークンを持っていることを前提としています。アクセストークンを得るにはデモ口座に登録する必要があります。 この記事を参照してください。

まず、必要なモジュール群をインポートします。

import pandas as pd
from oandapyV20 import API
import oandapyV20.endpoints.instruments as instruments

次にOANDA APIにアクセスします。

access_token = "************************************************" # your access_token

api = API(access_token=access_token, environment="practice")

access_tokenはご自分のアクセストークンに変更してください。

params = {
    "granularity": "D",  # 取得する足
    "count": 50,         # 取得する足数
    "price": "B",        # Bid
}

instrument = "USD_JPY"   # 通貨ペア

instruments_candles = instruments.InstrumentsCandles(instrument=instrument, params=params)

response = api.request(instruments_candles)

paramsで取得するデータの設定を行っています。各パラメータの説明はコメントを参照してください。
instrumentで取得したい通貨ペアの設定をしています。

では、取得したデータ(response)の中身を見てみます。

print(response.keys())
#=> dict_keys(['instrument', 'granularity', 'candles'])

instruments, granularity, candlesといったデータがあります。。
instrument, granularityは自分で設定した値ですので、
candlesが目的として足データになります。

では、candlesを見てみます。
今回はpandasのDataFrame型にして見てみます。

df = pd.DataFrame(response["candles"])
print(df.head())
#=> 
#   complete  volume                            time                                                bid
# 0      True   54547  2019-08-14T21:00:00.000000000Z  {'o': '105.839', 'h': '106.769', 'l': '105.696...
# 1      True   22290  2019-08-15T21:00:00.000000000Z  {'o': '106.035', 'h': '106.489', 'l': '106.020...
# 2      True       1  2019-08-16T21:00:00.000000000Z  {'o': '106.339', 'h': '106.339', 'l': '106.339...
# 3      True   15345  2019-08-18T21:00:00.000000000Z  {'o': '106.239', 'h': '106.691', 'l': '106.215...
# 4      True   15867  2019-08-19T21:00:00.000000000Z  {'o': '106.624', 'h': '106.685', 'l': '106.156...

足データが取得できていることがわかります。
bidの中にはo(open), h(high), l(low), c(close(見切れていますが))という形で、始値、高値、安値、終値が格納されています。

無事データが取得できました。

全コードを以下に示します。

import pandas as pd
from oandapyV20 import API
import oandapyV20.endpoints.instruments as instruments

access_token = "************************************************"

api = API(access_token=access_token, environment="practice")

params = {
    "granularity": "D",  # 取得する足
    "count": 50,         # 取得する足数
    "price": "B",        # Bid
}

instrument = "USD_JPY"   # 通貨ペア

instruments_candles = instruments.InstrumentsCandles(
    instrument=instrument, params=params)

response = api.request(instruments_candles)

print(response.keys())

df = pd.DataFrame(response["candles"])
print(df.head())

終わりに

今回はOANDA APIとPythonを使って為替データを取得する方法を紹介しました。

以下の記事で取得したこのデータを使ってローソク足のチャートを表示する方法を紹介していますので、良ければどうぞ。

また、FXの価格予想プログラムを作ったりしているので、こちらもどうぞ。

では!

参考文献

  1. Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理
    Pythonでデータ解析をするなら読んでおくべき一冊。おすすめです。
タイトルとURLをコピーしました