【FX, python】oandapyで5000件以上のデータを取得する

前回の記事でoandapyで為替データを紹介する方法を紹介しました。

【oandapy,fx】oandapyで為替データを取得する方法

しかし前回の方法では5000件のデータを取得することが限界でした。

今回は5000個以上のデータを取得する方法を紹介します。


実装(ソースコード)

では、さっそくソースコードを示します。

import oandapy
import pandas as pd

oanda = oandapy.API(environment="live",
                    access_token="your_access_token")

# 定数
TARGET = "USD_JPY"  # 通貨ペア
TIME_CONF = "H1"     # 時間足
COUNT = 5000           # count
NB_ITR = 3          # count * NB_ITR 分データを取得

end = None
df = None

for i in range(NB_ITR):
    if i == 0 and end is None:
        hist = oanda.get_history(
            instrument=TARGET, granularity=TIME_CONF, count=COUNT)
    else:
        hist = oanda.get_history(
            instrument=TARGET, granularity=TIME_CONF, end=end, count=COUNT)

    hist = hist["candles"]
    end = hist[0]['time']    # [古い→新しい] なので、res[0]を取得
    df_new = pd.DataFrame(hist)
    if df is None:
        df = df_new
    else:
        df = pd.concat([df_new, df])

df = df.set_index(df["time"])
print(df.shape)

your_access_tokenは自分のアクセストークンに変更してください。
5000件以上取得するためには、
get_historyのend引数を使って実現します。
get_historyではend(時間)からcount分のデータを取得できます。
ソースコードにあるように、endをずらしていくことによってデータを取得していきます。

得られたデータの一部とデータ数を見てみます。

>>> df
                             closeAsk  closeBid  complete  highAsk  highBid  \
time                                                                          
2017-05-05T16:00:00.000000Z   112.755   112.742      True  112.774  112.759   
2017-05-05T17:00:00.000000Z   112.634   112.622      True  112.778  112.765   
2017-05-05T18:00:00.000000Z   112.636   112.619      True  112.694  112.679   
2017-05-05T19:00:00.000000Z   112.491   112.478      True  112.657  112.643   
2017-05-05T20:00:00.000000Z   112.738   112.638      True  112.826  112.795   
...省略
2019-10-03T04:00:00.000000Z   107.174   107.162      True  107.197  107.185   
2019-10-03T05:00:00.000000Z   107.141   107.129      True  107.194  107.181   
2019-10-03T06:00:00.000000Z   107.278   107.266      True  107.293  107.281   
2019-10-03T07:00:00.000000Z   107.237   107.223      True  107.305  107.293   
2019-10-03T08:00:00.000000Z   107.101   107.088     False  107.278  107.263 
>>> df.shape
(15000, 11)

データが15000件あることがわかります。

参考文献

https://github.com/oanda/oandapy/blob/master/oandapy/oandapy.py


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