OANDA API V20を使ってみる(デモ口座開設編)
こんばんは、新米データサイエンティスト(@algon_fx)です。今日もしっかりジムで走れたのは良かったのですが、その直後に急な用事が発生して思ったより勉強が出来ませんでした。。
本当は米国雇用統計の予測モデルを作るべく、特徴量として使えそうなデータを漁ろうかと考えたのですが、それをやるほど時間がなさそうでしたので、今日は別件のリサーチをしました。
すでにFX機械学習をやっている方であれば、おそらく一度は触ったことがあるかと思いますが、今日はOANDA(オアンダ)のAPIについてまとめたいと思います。
【人気記事】
更新:2018年5月2日 – OANDA v20ですが日本の電話番号でも米国OANDAでデモ口座解説できるとのことです。内容を更新しました。
OANDA API V1の終了のお知らせ
さて、そもそもなんで、このタイミングでOANDAのAPI?ってお話なんですが…以前にOANDA JAPANのAPIを使ったトレードシステムの記事を書きましたが、為替レート関連の直近の生データはOANDA APIで十分と考えていました。
ところが…
なんと、OANDA API v1が2018年5月を持って終了と出ているではないですが。誤解のないように言うと、こちらですが、米国OANDAの話ですので、兼ねてから独自路線を突き進んでいるOANDA JAPANの話ではありません。
ですので、OANDA JAPANが提供しているAPI v1が2018年5月に終わるという話ではありません。ただ…そもそも開発が海外主体のOANDAさんな訳でして、これは日本でもいずれはAPI v1が終わってしまうのではないか?と心配になった訳です。
そこでOANDA API v20へ移行したい
しつこいようだが、日本のOANDA API v1は終了の予定は現段階ではありません。ただ、今まさにFX機械学習を頑張っている私にとって、開発の主体であるグローバルOANDAで終了と聞くと不安な訳です。
それ以外にもいくつか、OANDA API v1からv20へ移行したい理由があります。
- 現時点でv1のAPIを使っている海外勢はほとんどおらず、参考になるチュートリアルや記事がv20で書かれているため、v1へ転換する手間がかかる
- v1とv20の仕様の違いはさほどありませんが、APIをPythonで扱う外部パーティーの便利そうなラッパーやライブラリがv20しかサポートしていない
- 何よりv1が終了する可能性が高い(日本でも)
主に海外のサイトや掲示板などで勉強をしている私にとって、特に1の理由はでかい訳です。現時点でOANDA API v1を使っている人なんてほとんど皆無な訳で…v20で書かれたコードを紐解いてv1に転換する手間が結構かかる。
ただ、v1からv20へ移行するにあたり一つ大きな問題がある。それは…日本のOANDA JAPANがAPI V20を未だにサポートしていないのだ。全世界、OANDA API v20へ移管してv1は終了なのに対して、OANDA JAPANはv20が使えない。困る。
でも、この流れを加味すればOANDA JAPANがv20を解禁するのは近いようにも感じる訳です。ってことで、一足早いですが、公式サポートが出る前にv20で個人的には移管したい。

API v20を使うためにデモ口座開設
今まで慣れしたんで来たAPI v1ですが、今後のことも考えるとやはりv20に移管しておきたいところ。そこで、調べて見たところ…OANDA API v20を使うには米国のOANDAにて口座開設が必要。
幸い、アメリカでも住所と電話番号を持っているので、とりあえず、OANDA API v20を使うためにデモ口座を開いてみました。
oanda.comの新規口座開設からfxTrader Practice(デモ口座開設)。
上記の「fxTrade Practice」をクリックすると下のデモ口座の新規開設フォームへ移動します。こちらですが、「coutry(国)」と「Phone(電話番号)」の入力が必要です。試しに日本の電話番号で登録してみようと試みましたが、日本の情報ではNGでした。
コメントにてさいきさんからご指摘いただきました!米国OANDAのデモ口座ですが、日本の携帯番号でも、国番を日本+81を選んで、最初の0を抜いて90-1111-2222と入力すれば、問題なくデモ口座開設行けるようです。訂正します。
上記のデモ口座新規開設フォームを入力すると、すぐにアカウントへのログインが可能です。デモ口座(fxTrade Practice)の申し込みが完了してログインしたら、下記の赤枠の「Manage API Access」をクリック。
「Manage API Access」のページへ移ると、OANDA API v20が利用できるAPIキーの発行が可能です。下記の赤線部分のように発行ボタンをクリックするとAPIキーの発行が行われます。
APIキーが発行されれば、あとは残すところ一つ。OANDA v20 APIを叩くのに、キーと口座IDが必要となります。キーはすぐに発見できたのですが、口座IDがなかなか見つかりませんでした。
ログイン後のページから「Transaction History(取引履歴)」のページを見てみると、今回開設したデモ口座のIDが表示されていました。(下記、赤線の部分)
これでAPIを叩くのに必要なキーと口座IDの取得が完了です。口座IDを探すのに少し時間はかかりましたが、思ったよりもスムーズにできました。
OANDA API v20を触ってみよう
デモ口座も作って、APIキーも取得できましたので、念願のAPI v20を触ってみましょう。とりあえず、軽く触ってみたいので、OANDA API v20のPythonのラッパーを使ってみることに。
こちらですが、pipでインストールが可能です。
1 2 3 4 |
# oanda api v20のPythonラッパーのインストール pip install oandapyV20 |
難なくエラーなしにコンプリートしてくれました。では、実際にOANDA API V20をインポートしてみましょう。JSON形式で吐き出すのでJSONも合わせてインポートします。
1 2 3 4 5 6 7 |
# ライブラリのインポート import json from oandapyV20 import API from oandapyV20.exceptions import V20Error from oandapyV20.endpoints.pricing import PricingStream |
次にAPI接続に必要な口座IDとAPIキー(トークン)を設定してあげます。下記はダミーですので、各自のIDとトークンに変更して実行してあげましょう。
1 2 3 4 5 |
# OANDA API v20の口座IDとAPIトークン accountID = "XXX-XXX-XXXXXXX-XXX" access_token = "abcdefghijkelmopqrstu1234567890-abcdefghijkelmopqrstu1234567890" |
次はAPIへの接続をしてあげましょう。
1 2 3 4 |
# OANDAのデモ口座へのAPI接続 api = API(access_token=access_token, environment="practice") |
実際にOANDA API V20で為替レートが引っ張れるか試して見ましょう。とりあえずドル円のレートを引っ張って見ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# API v20でドル円のレートを引っ張る instruments = "USD_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 > 1: s.terminate("maxrecs received: {}".format(MAXREC)) except V20Error as e: print("Error: {}".format(e)) |
{
“type”: “PRICE”,
“time”: “2018-04-17T14:11:32.183153942Z”,
“bids”: [
{
“price”: “107.130”,
“liquidity”: 10000000
}
],
“asks”: [
{
“price”: “107.142”,
“liquidity”: 10000000
}
],
“closeoutBid”: “107.115”,
“closeoutAsk”: “107.157”,
“status”: “tradeable”,
“tradeable”: true,
“instrument”: “USD_JPY”
}
大丈夫そうですね!これで、取り急ぎは念願のOANDA API V20が使えることになりました!
まとめと次の課題
今回は今まで使っていたOANDA API v1から最新のv20への移管を念頭に置いて、米国OANDAでデモ口座を開設して実際にAPI v20への接続をしてドル円のレートを引っ張ってみました。
次の課題は…山ほどありますね笑。
このOANDA API v20はシリーズ化しそうなので、また後日、まとめのページを作って、より詳しい使い方を勉強していきたいと思います。
ブログ読んでいただきありがとうございます!Twitterでも色々と発信しているので、是非フォローお願いします!
ディスカッション
コメント一覧
こんばんは。
OandaAPIのことを調べていてこちらの記事にたどり着きました。
携帯番号を国際対応に変えてあげれば、日本からでもv20のデモ口座登録できましたよ。
国際対応は090の0を抜けばいいだけです。(日本+81を選んで、”90-1234-5678″と記入)
おっしゃる通り今からv1を使うのはもったいないと思いますので、よかったら読者さんにお知らせしてあげて下さい(^_^;)
さいきさん、親切なご指摘ありがとうございます!記事も修正させていただきました!
教えてください。
s.terminate(“maxrecs received: {}”.format(MAXREC))
の、MAXRECは、どこから出て来たのでしょうか?