この記事では
oandapyV20を使ってオーダブック、ポジションブックを取得する方法について記載します。
oandapyV20では、オーダーブックをとるためにはoandapyV20.endpoints.instrumentsのInstrumentsOrderBookというクラスで/v3/instruments/{instrument}/orderBookをGet通信で叩きます。
ポジションブックの場合は、oandapyV20.endpoints.instrumentsのInstrumentsPositionBookというクラスで/v3/instruments/{instrument}/positionBookをGet通信で叩きます。
いずれの場合もparamsで指定できるパラメータはinstrumentとtimeだけです。instrumentは必須引数ですが、timeは指定しない場合は最新が返されます。timeだUNIXTIMEを文字列型で渡します。最新を取りたい場合は、paramsは{}でいいと思います。
オーダーブックもポジションブックもほとんど同じなので、今回はオーダブックで説明したいと思います。
ドル円の最新のオーダーブックを取得するコードはこちらです。ポジションブックを見たい場合はInstrumentsPositionBookを使ってください。
# -*- 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 as pd
def main():
account_id="XXX-XXX-XXXXXXX-XXX"
access_token = "***************************************************************"
api = API(access_token=access_token, environment="practice")#or live
params ={}
r = instruments.InstrumentsOrderBook(instrument="EUR_USD",
params=params)
api.request(r)
data = (r.response)
print(data)
if __name__ == "__main__":
main()
返り値の中身を詳細に見てみます。所期のデータはdata[‘orderBook’][‘buckets’]にリストで返ってきています。
#まずはなんの型が帰ってきているかきます。
(Pdb) type(data)
<class 'dict'>
(Pdb) data.keys()
dict_keys(['orderBook'])
(Pdb) type(data['orderBook'])
<class 'dict'>
(Pdb) data['orderBook'].keys()
dict_keys(['instrument', 'time', 'unixTime', 'price', 'bucketWidth', 'buckets'])
(Pdb) data['orderBook']['instrument']
'EUR_USD'
(Pdb) data['orderBook']['time']
'2020-12-07T12:00:00Z'
(Pdb) data['orderBook']['price']
'1.21131'
(Pdb) data['orderBook']['bucketWidth']
'0.00050'
(Pdb) type(data['orderBook']['buckets'])
<class 'list'>
(Pdb) len(data['orderBook']['buckets'])
5548
(Pdb) data['orderBook']['buckets'][0]
{'price': '0.00000', 'longCountPercent': '0.4861', 'shortCountPercent': '0.3107'}
(Pdb) data['orderBook']['buckets'][1000]
{'price': '1.12050', 'longCountPercent': '0.0351', 'shortCountPercent': '0.0200'}
(Pdb) data['orderBook']['buckets'][3000]
{'price': '7.59750', 'longCountPercent': '0.0000', 'shortCountPercent': '0.0150'}
(Pdb) data['orderBook']['buckets'][5000]
{'price': '107.77800', 'longCountPercent': '0.0025', 'shortCountPercent': '0.0000'}
綺麗な最終結果だけが欲しいならdata[‘orderBook’][‘buckets’]をPandasに変換します。
(Pdb) pd.DataFrame(data['orderBook']['buckets'])
price longCountPercent shortCountPercent
0 0.00000 0.4861 0.3107
1 0.00050 0.1428 0.0802
2 0.00100 0.2956 0.0451
3 0.00150 0.0576 0.0251
4 0.00200 0.0401 0.0225
... ... ... ...
5543 34887878.00000 0.0025 0.0000
5544 100000000.00000 0.0025 0.0000
5545 1000000000.00000 0.0000 0.0050
5546 7000000000.00000 0.0000 0.0025
5547 9999999999.00000 0.0025 0.0000
[5548 rows x 3 columns]
参考文献
https://developer.oanda.com/rest-live-v20/instrument-ep/
https://developer.oanda.com/rest-live-v20/instrument-ep/
ローソクを取得したい場合はこちらをご覧ください
現在の価格をリアムタイムに欲しい場合はこちらをご覧ください