OANDA fx Trade API を使って、リアルタイムな為替レートを取得してみる
今さらですが、OANDA Japan から FXトレードAPI が提供されているのを発見。
- レート情報の取得から、取引、建玉情報の取得などのFX 取引に必要なAPI一式が提供されています。
- 初期費用、月額利用料金は無料。ただし、口座残高が25万円以上必要です。
- 本物の口座を使うLive環境のほか、デモ口座のアカウントで使える Practice、アカウントなしで試せるSandbox環境も提供。
- REST APIの他、Java/FIX版のAPIも有り。
機能もかなり充実してます。本格的なトレードアプリも作れるんじゃないかな。
- REST APIだけど、ストリーミングでのレートデータ配信に対応
- Transfer-Encoding: chunked で配信する仕組みで、ポーリングなしでリアルタイムなレートデータを取得できます。
- OAuth 2.0での認証に対応
- すべてのGET APIが ETag に対応しているなど、細かいところの完成度も高い。
ということで、Rubyを使ってREST APIにアクセスし、リアルタイムな為替レートを取得してみるサンプルを書いてみました。(といっても、公開されているアクセスライブラリのサンプルを動かしてみただけですが・・・)
アクセスライブラリのインストール
RubyだとREST APIのアクセスライブラリが公開されているので、これを利用します。 gemでインストール。
$ gem install oanda_api
デモ口座のアカウントを使って、現在価格を得るサンプルコードです。 「<アクセストークン>」のところには、OANDAのサイトから取得したアクセストークンを指定します。取得方法はこちら。
require 'oanda_api' client = OandaAPI::Client::TokenClient.new(:practice, <アクセストークン>) prices = client.prices(instruments: ['EUR_USD','USD_JPY']).get prices.each do |p| puts "#{p.instrument} #{p.ask} #{p.bid} #{p.time}" end
実行結果です。
$ retrieve_price.rb EUR_USD 1.1201 1.11994 2015-05-11 00:22:16 UTC USD_JPY 119.744 119.728 2015-05-11 00:21:43 UTC
せっかくなので、ストリーミングAPIでリアルタイムなレート情報の取得もやってみます。
require 'oanda_api' access_token = <アクセストークン> # アカウントのIDが必要なので取得しておく。 client = OandaAPI::Client::TokenClient.new(:practice, access_token ) account = client.accounts.get.first # ストリーミングAPI用のクライアントを別途作成し、実行 streaming_client = OandaAPI::Streaming::Client.new(:practice, access_token ) prices = streaming_client.prices(account_id: account.account_id, instruments: ["USD_JPY"]) prices.stream do |p| # ※無限ループするので Ctrl+Cで停止すること。 puts "#{p.instrument} #{p.ask} #{p.bid} #{p.time}" end
実行してみます。放置するとずっと更新を続けるので、Ctrl+Cで停止すること。
$ ruby retrieve_price_uses_streaming_api.rb USD_JPY 119.747 119.743 2015-05-11 00:37:52 UTC USD_JPY 119.748 119.744 2015-05-11 00:38:12 UTC USD_JPY 119.749 119.745 2015-05-11 00:38:12 UTC USD_JPY 119.75 119.746 2015-05-11 00:38:12 UTC ...
Jiji2のバックエンドもこれに移行かな
Jiji2絶賛開発中ですが、
バックエンドは OANDA fx trade API に変更かな、と考えています。 旧バージョンと同じくスクレイピングを使う方向で考えていましたが、次のようなリスクはどうしても残るので。
- (アクセス頻度はもちろん抑えるにしても)やはり証券会社のサービスに多少は負荷がかかるので、利用禁止になる可能性がある。
- サイトの仕様変更で突然動作しなくなるリスクがある。
アプリ開発者としては、特定の証券会社にロックオンしてしまうのは避けたいところではあるので、このようなAPIを提供してくれる証券会社がもっと増えてくるといいな。(クリック証券、何でやめたんや・・・。)
追記(2015-12-01)
OANDA FX trade APIを利用した、無料のFXシステムトレードフレームワーク「Jiji」をリリースしました!
使ってみて、ご意見など頂けるとうれしいです。