前回の記事で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