この記事では
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/
リアルタイムでデータを取得したい場合はこちらの記事をご覧ください。