1
この記事では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://top.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/