今回は、OANDAPYV20 で5000件以上のデータを取得する方法を紹介します。
ソースコード
では、さっそくソースコードを見てみます。
import pandas as pd from oandapyV20 import API import oandapyV20.endpoints.instruments as instruments # 定数 COUNT = 5000 # 一度に取得するデータ数(max:5000) NB_ITR = 3 # count * NB_ITR 分データを取得 GRANULARITY = "M1" INSTRUMENT = "USD_JPY" def get_candles(instrument="USD_JPY", params=None): """ 足データを取得してDataFrameに変換 """ instruments_candles = instruments.InstrumentsCandles(instrument=instrument, params=params) api.request(instruments_candles) response = instruments_candles.response df = pd.DataFrame(response["candles"]) return df access_token = "<>" api = API(access_token=access_token, environment="practice") params = { "granularity": GRANULARITY, "count": COUNT, "price": "B", } # 足データの取得 candles = None for i in range(NB_ITR): new_candles = get_candles(instrument=INSTRUMENT, params=params) params["to"] = new_candles["time"].iloc[0] print(params["to"]) candles = pd.concat([new_candles, candles]) print(candles)
your_access_tokenは自分のアクセストークンに変更してください。
5000件以上取得するためには、
パラメータの「to」を使って実現しています。
toによって、「〜toまでの5000件」のデータを取得してくれます。
データは新しいデータから古いデータといった順番に取得します。
なので、toに取得したデータで最も古いデータの時刻を設定してあげれば良いことがわかります。
取得したデータ
取得したデータを見てみます。
今回はデータをpandasのDataFrame形式に変換しています。
complete volume time bid 0 True 13 2019-10-10T16:06:00.000000000Z {'o': '107.900', 'h': '107.901', 'l': '107.895... 1 True 13 2019-10-10T16:07:00.000000000Z {'o': '107.895', 'h': '107.895', 'l': '107.884... 2 True 12 2019-10-10T16:08:00.000000000Z {'o': '107.896', 'h': '107.898', 'l': '107.882... 3 True 18 2019-10-10T16:09:00.000000000Z {'o': '107.890', 'h': '107.890', 'l': '107.870... 4 True 25 2019-10-10T16:10:00.000000000Z {'o': '107.869', 'h': '107.876', 'l': '107.858... ... ... ... ... ... 4995 True 4 2019-10-25T20:54:00.000000000Z {'o': '108.667', 'h': '108.668', 'l': '108.665... 4996 True 4 2019-10-25T20:55:00.000000000Z {'o': '108.666', 'h': '108.666', 'l': '108.661... 4997 True 2 2019-10-25T20:56:00.000000000Z {'o': '108.658', 'h': '108.661', 'l': '108.658... 4998 True 2 2019-10-25T20:57:00.000000000Z {'o': '108.658', 'h': '108.662', 'l': '108.658... 4999 True 9 2019-10-25T20:59:00.000000000Z {'o': '108.654', 'h': '108.657', 'l': '108.650... [15000 rows x 4 columns]
15000件あることがわかります。
データを取得できていますね。
上のソースコードの NB_ITR を変更すればさらに多くのデータを取得できます。
もちろん、OANDAが保持しているデータ数には上限がありますので、上限内で設定してください。
上限超えた値を設定するとエラーを出力しますので。
終わりに
今回はoandapyV20を使って為替データを5000件以上取得する方法を紹介しました。
ちょっと前までV1で作業していたので、今変換作業で困ってます。
(妥協していたツケが回ってきた)
参考文献とおすすめの教科書
参考文献
https://developer.oanda.com/rest-live-v20/instrument-ep/
おすすめの教科書
Pythonを基本から学べる書籍を紹介しておきます。Pythonを独学で学んだ人は読んでおいたほうが良い本です。参考にどうぞ