【ONADA,V20,Python】OANDA API V20で5000件以上のデータを取得する

今回は、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を独学で学んだ人は読んでおいたほうが良い本です。参考にどうぞ


みんなのPython 第4版

タイトルとURLをコピーしました