99. A-tag-not-highly-recommended

【oandapyV20】OandaAPIで価格をStreaming配信で取得する

ソースコードによって実現される素晴らしい世界に驚嘆する人
この記事ではoandapyV20を使ってStreaming配信でリアルタイムに価格を取得する方法について記載します。 Streaming配信は非常に便利であるものの、最大で250msごとのデータしか提供されませんので急激な値動きまで把握できるわけではない事に注意が必要です。公式では「1秒間に4回のウィンドウを作成し、それぞれのウィンドウの最後で有効な値を返す」という記載があります。詳細は記載されていないものの、250ms程度のデータであること、アカウントごとにデータを生成するので、すべての人に同じデータが配信されるわけではない事に留意が必要です。 ストリーミング配信は/v3/accounts/{accountID}/pricing/streamにGet通信でアクセスする事で提供されます。 oandapyV20を使った基本のコードはこちらです(ドル円の価格を取得)。
# -*- coding: utf-8 -*-
import json
from oandapyV20 import API
from oandapyV20.endpoints.pricing import PricingInfo
from oandapyV20.exceptions import V20Error
import oandapyV20.endpoints.pricing as pricing
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,EUR_JPY"
            }
    r = pricing.PricingStream(accountID=account_id, params=params)
    rv = api.request(r)
    maxrecs = 100
    for ticks in rv:
        print(json.dumps(ticks, indent=4),",")
        if maxrecs == 0:
            r.terminate("maxrecs records received")

if __name__ == "__main__":
    main()
これを実行すると、価格のリアルタイムデータが取得でします。ticksという変数にはこのような値が入ります。
{
    "type": "PRICE",
    "time": "2020-12-04T21:59:55.602697089Z",
    "bids": [
        {
            "price": "104.185",
            "liquidity": 250000
        }
    ],
    "asks": [
        {
            "price": "104.191",
            "liquidity": 250000
        }
    ],
    "closeoutBid": "104.177",
    "closeoutAsk": "104.199",
    "status": "non-tradeable",
    "tradeable": false,
    "instrument": "USD_JPY"
} ,
基本的には通貨ペア(Instruments)しかカスタマイズしないと思います。通貨ペアを変更したいときはparamsの値を変えてください。2つ以上のペアを同時にデータ取得したいときは、paramsにそれぞれのペアをカンマで区切って指定すればOKです。例えば、2つを指定したいときはこのように指定します。
    params ={
            "instruments": "USD_JPY,EUR_JPY"
            }
そうすると下記のデータが返ってきます。
{
    "type": "PRICE",
    "time": "2020-12-04T21:59:53.324563034Z",
    "bids": [
        {
            "price": "126.254",
            "liquidity": 250000
        }
    ],
    "asks": [
        {
            "price": "126.320",
            "liquidity": 250000
        }
    ],
    "closeoutBid": "126.238",
    "closeoutAsk": "126.336",
    "status": "non-tradeable",
    "tradeable": false,
    "instrument": "EUR_JPY"
} ,
{
    "type": "PRICE",
    "time": "2020-12-04T21:59:55.602697089Z",
    "bids": [
        {
            "price": "104.185",
            "liquidity": 250000
        }
    ],
    "asks": [
        {
            "price": "104.191",
            "liquidity": 250000
        }
    ],
    "closeoutBid": "104.177",
    "closeoutAsk": "104.199",
    "status": "non-tradeable",
    "tradeable": false,
    "instrument": "USD_JPY"
} ,
{
    "type": "HEARTBEAT",
    "time": "2020-12-06T11:28:32.333476447Z"
} ,
リアルタイムでデータが取得できるのはとても便利です。

通貨ペアの指定について

円関連

“USD_JPY”,’EUR_JPY’,’GBP_JPY’,’AUD_JPY’,’NZD_JPY’,’CAD_JPY’,’CHF_JPY’,

ドル関連

“EUR_USD”,’GBP_USD’,’AUD_USD’,’NZD_USD’,’USD_CAD’,’USD_CHF’,’USD_CNH’,

ユーロ関連

‘EUR_GBP’,’EUR_AUD’,’EUR_NZD’,’EUR_CHF’,’GBP_AUD’

参考文献

https://developer.oanda.com/rest-live-v20/pricing-ep/ https://developer.oanda.com/rest-live-v20/pricing-ep/ ローソクチャートを取得したいときはこちらの記事をご覧ください。
https://np-sys.com/hacks-with-it/oanda%e3%81%a7%e3%81%ae%e7%82%ba%e6%9b%bf%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%8f%96%e5%be%97/
Meditation Tools開発者
絹田 雅
複数の瞑想を学ぶことができるMeditation Toolsの開発者。 売上は人権段階を通じた寄附により社会をより良くすることに使われます。 利用はこちら
twitter-timeline