この記事では
oandapyV20を使ってローソクチャートを取得する方法について記載します。
ローソクの長さ、取得データの種類、取得期間の指定方法なども含めて記載します。
 
oandapyV20では、PricingInfoというクラスで/v3/instruments/{instrument}/candlesをGet通信で叩いています。
 
ドル円のローソクチャートを取得基本のコードはこちらです。
 
# -*- coding: utf-8 -*-
import json
from oandapyV20 import API
from oandapyV20.endpoints.pricing import PricingInfo
from oandapyV20.exceptions import V20Error
import oandapyV20.endpoints.instruments as instruments
import datetime
import pandas
def main():
    account_id="XXX-XXX-XXXXXXX-XXX"
    access_token = "***************************************************************"
    api = API(access_token=access_token, environment="practice")#or live
    params = {"instruments": "USD_JPY"}
    pricing_info = PricingInfo(accountID=account_id, params=params)
    r = instruments.InstrumentsCandles(instrument="USD_JPY",
                                    params={
                                        "granularity": "S15", # ロウソク足の種類を選択
                                        "alignmentTimezone": "Japan", # タイムゾーン
                                        #"from":datetime.datetime.now()
                                    }
    )
    data = api.request(r)
    for candle in r.response["candles"]:
        print(candle)
if __name__ == "__main__":
    main()
 
 
データの返り値である
candleの変数には下記の値が入ります。
 
(Pdb) candle
{'complete': True, 'volume': 117597, 'time': '2020-11-05T08:00:00.000000000Z', 'mid': {'o': '104.314', 'h': '104.388', 'l': '103.360', 'c': '103.424'}}
 
  
ローソク足の長さを指定する
 
上記ではローソクの長さを15秒に指定しますが、
最短で5秒、最大で1ヶ月まで変更できます。oandapyV20では、InstrumentsCandlesをインスタンス化する際の
paramという変数で様々な取得条件を指定しますが、
ローソク足の長さはgranularityというキーで指定します。これに対応する値は文字列型で下記で指定します。
 
    r = instruments.InstrumentsCandles(instrument="USD_JPY",
                                    params={
                                        "granularity": "S15", # ロウソク足の種類を選択
                                        "alignmentTimezone": "Japan", # タイムゾーン
                                        #"from":datetime.datetime.now()
                                    }
    )
 
 
| 引数 | 間隔 | 
| S5 | 5秒間 | 
| S10 | 10秒間 | 
| S15 | 15秒間 | 
| S30 | 30秒間 | 
| M1 | 1分間 | 
| M2 | 2分間 | 
| M3 | 3分間 | 
| M4 | 4分間 | 
| M5 | 5分間 | 
| M10 | 10分間 | 
| M15 | 15分間 | 
| M30 | 30分間 | 
| H1 | 1時間 | 
| H2 | 2時間 | 
| H3 | 3時間 | 
| H4 | 4時間 | 
| H6 | 6時間 | 
| H8 | 8時間 | 
| H12 | 12時間 | 
| D | 1日 | 
| W | 1週間 | 
| M | 1ヶ月 | 
 
 
総データ取得期間の指定
 
総データ取得期間を指定する際は、同様にparamという辞書の中で指定します。この中で
fromとtoというキーで時間を「文字列型」のUNIXTIMEで指定します。
 
r = instruments.InstrumentsCandles(
                        instrument="USD_JPY",
                        params={
                            "granularity": "D",
                            "alignmentTimezone": "Japan",
                            "from":str((datetime.datetime.now()-datetime.timedelta(days=30)).timestamp()),
                            "to":str((datetime.datetime.now()-datetime.timedelta(days=25)).timestamp())
                            }
                        )
 
 
キャンドルの本数の指定
 
データの期間を指定する代わりに、キャンドルの本数で総データ取得期間を指定することもできます。デフォルトは500本となります。
キャンドルの本数で帰って来るデータの量を指定したい場合はcount引数を整数で指定します。なお、期間をfrom,toで指定した場合こちらは使用できません。countの最大は5000本です。
 
r = instruments.InstrumentsCandles(
instrument="USD_JPY",
params={
"granularity": "D",
"alignmentTimezone": "Japan",
"count":100}
)
 
  
ローソクの価格種を指定する
 
ask,bid,middleのいずれのローソクを取得するかについてはparamsでpriceキーで指定できます。“M” はmidpoint candles、 “B” はbid candles)、 “A” はask candlesとのことで、デフォルトは”M”となります。
 
midの場合
 
(Pdb) candle
{'complete': True, 'volume': 117597, 'time': '2020-11-05T08:00:00.000000000Z', 'mid': {'o': '104.314', 'h': '104.388', 'l': '103.360', 'c': '103.424'}}
 
 
bidの場合
 
(Pdb) candle
{'complete': True, 'volume': 117597, 'time': '2020-11-05T08:00:00.000000000Z', 'bid': {'o': '104.308', 'h': '104.382', 'l': '103.354', 'c': '103.418'}}
 
 
通貨を指定する
 
これはinstrument引数で指定します。通貨のペアを/ではなく_でつないで指定します。
 
例えば,よく使うものを列挙すると
 
| ペア | コード | 
| ドル円 | USD_JPY | 
| ドルユーロ | EUR_USD | 
| ユーロ円 | EUR_JPY | 
|  |  | 
|  |  | 
 
 
https://www.oanda.jp/course/currencypair
 
参考文献
 
https://oanda-api-v20.readthedocs.io/en/latest/endpoints/instruments/instrumentlist.html
 
https://developer.oanda.com/rest-live-v20/instrument-ep/
 
リアルタイムでデータを取得したい場合はこちらの記事をご覧ください。
 
https://np-sys.com/hacks-with-it/%e3%80%90oandapyv20%e3%80%91oandaapi%e3%81%a7%e4%be%a1%e6%a0%bc%e3%82%92streaming%e9%85%8d%e4%bf%a1%e3%81%a7%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/