OANDA REST-V20 APIで為替の情報を取得する

Pythonで為替の情報を取得するためのAPIをOANDA社が提供しています。為替の取引プログラムに使うAPIとしてポピュラーになりつつあるOANDA APIですが、次世代のAPIであるOANDA REST-V20 APIが開発されたそうなので紹介をしていきたいと思います。

旧OANDA APIの紹介

OANDA公式でサンプルコードの配布を行っています:github

また、使い方は以下のサイトで紹介されています。

OANDA APIをつかって Pythonで 為替レートを取得してみた

新API(OANDA REST-V20 API)と旧APIの違い

  • 旧APIと新APIでは情報を取得するために必要なaccount IDやaccess tokenの形式が異なる

使う分で気になるのはこれぐらいです。

例えばaccount IDは”012-345-6789123-456″と従来のものより桁が増えています。

新APIの使い方

APIを使うのに必要なaccount IDとaccess tokenはOANDAの口座を開設することで手に入れることができます。口座を開設するといってもFX本番用の口座ではなく、練習用のデモ口座でもaccount IDとaccess tokenを取得できるので私はデモ口座を使用しています。

しかし、今のところOANDA JAPANのデモ口座ではOANDA REST-V20 APIで使用する新しいヴァージョンのaccount IDは取得できないようなので本国のサイトからデモ口座を開設します。

公式:OANDA

2017_05_14

OPEN A DEMO ACCOUNTからデモ口座の開設が行えます。ちなみにcountryを選ぶときにJapanを選ぶとまだサービスが対応してませんと言われて口座を開設することができません。

口座を開設すると次のページに進むことができます。

2017_5_141

Manage Fundsからaccount IDを調べることができます。

2017_5_143

この黒塗りの部分にaccount IDが記載されています。

 

また、access tokenはManage API Accessから取得することができます。

2017_5_14_2

これでREST-V20 API用のaccount IDとaccess tokenの取得ができました。

便利なラッパー

REST-V20 APIそのものがすでに便利なのですが、さらに簡単に試せるラッパーを見つけたのでこちらを使っていきます。

https://github.com/hootnot/oanda-api-v20

こちらのラッパーを使わせていただきます。

インストール

$ pip install oandapyV20
$ pip install git+https://github.com/hootnot/oanda-api-v20.git

 

サンプルコード

このコードで為替の変動状況をリアルタイムで監視することが可能です。

import json
from oandapyV20 import API
from oandapyV20.exceptions import V20Error
from oandapyV20.endpoints.pricing import PricingStream

accountID = "..."
access_token="..."

api = API(access_token=access_token, environment="practice")

instruments = "DE30_EUR,EUR_USD,EUR_JPY"
s = PricingStream(accountID=accountID, params={"instruments":instruments})
try:
    n = 0
    for R in api.request(s):
        print(json.dumps(R, indent=2))
        n += 1
        if n > 10:
            s.terminate("maxrecs received: {}".format(MAXREC))

except V20Error as e:
    print("Error: {}".format(e))

 

欲しい情報だけを取り出す

上のコードを少し変えてみます。

例えばポンド円のbidのみを取り出したいときは次のように書き換えることで実現できます。(あと、10回読み込むと自動終了する部分を削除しました)

import json
from oandapyV20 import API
from oandapyV20.exceptions import V20Error
from oandapyV20.endpoints.pricing import PricingStream

accountID = "..."
access_token = "..."

api = API(access_token = access_token, environment="practice")

instruments = "GBP_JPY"
s = PricingStream(accountID, params={"instruments":instruments})

try:
	for R in api.request(s):
		if "bids" in R.keys():
			print(R["bids"][0]["price"])

except V20Error as e:
	print("Error: {}".format(e))

為替の情報がRという名前のディクショナリで返ってくるので、取得したい値のキー(今回は”bids”)を使うことで取り出します。

(”bids”と”asks”のキーで取得できる情報はなぜかリストで返ってくるのでR[“bids”][0][“price”]でアクセスしていますが、ほかの値はR[“time”]でアクセスできます)

まとめと次回予告(?)

今回はOANDA REST-V20 APIの導入を行いました。これをもとにローソク足チャートを作ってみたいと思います。

追記

為替の取引をするbotを実際に作ってみました:github

3 Comments

  1. ヤマモト
    2017年11月22日

    7行目がシンタックエラー(invalid syntax)となってしまいましたが何が原因なのでしょうか?宜しくお願い致します。

    Reply
  2. ヤマモト
    2017年11月22日

    度々すみません。先ほどの質問は問題解決できました。ただ、今度は14行目の”try:”がシンタックエラーが出てしまってます。宜しくお願い致します。

    Reply
    1. ばいろん
      2017年11月24日

      こちらで動作を確認したところ,Python3系で正常に動作を確認しました.(Python2系では今回指摘された部分とは直接関係ないですがexcept文の構文が異なるのでPython3推奨です)

      Syntax errorは構文のミスなのでソースコードのミスタイプが可能性としてあります(try文であれば:と;のタイプミスなど).

      とりあえず動作するかを確認したいときはラッパーの製作者様のサンプルコード(streaming endpoints)を試すのが手っ取り早いと思います.

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top