読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

OANDA fx Trade API を使って、リアルタイムな為替レートを取得してみる

Ruby jiji

今さらですが、OANDA Japan から FXトレードAPI が提供されているのを発見。

www.oanda.jp

  • レート情報の取得から、取引、建玉情報の取得などのFX 取引に必要なAPI一式が提供されています。
  • 初期費用、月額利用料金は無料。ただし、口座残高が25万円以上必要です。
  • 本物の口座を使うLive環境のほか、デモ口座のアカウントで使える Practice、アカウントなしで試せるSandbox環境も提供。
  • REST APIの他、Java/FIX版のAPIも有り。


機能もかなり充実してます。本格的なトレードアプリも作れるんじゃないかな。

  • REST APIだけど、ストリーミングでのレートデータ配信に対応
    • Transfer-Encoding: chunked で配信する仕組みで、ポーリングなしでリアルタイムなレートデータを取得できます。
  • OAuth 2.0での認証に対応
    • サードパーティのサービスに、アカウント/パスワードを渡すことなくREST APIへのアクセストークンを安全に渡すことが可能。
    • なので、クラウド型のWebサービスも作ったりしやすいかと。
    • ただし、APIから取得した情報の再配信は禁止されているのでご注意。
  • すべての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絶賛開発中ですが、

unageanu.hatenablog.com

github.com

バックエンドは OANDA fx trade API に変更かな、と考えています。 旧バージョンと同じくスクレイピングを使う方向で考えていましたが、次のようなリスクはどうしても残るので。

  • (アクセス頻度はもちろん抑えるにしても)やはり証券会社のサービスに多少は負荷がかかるので、利用禁止になる可能性がある。
  • サイトの仕様変更で突然動作しなくなるリスクがある。

アプリ開発者としては、特定の証券会社にロックオンしてしまうのは避けたいところではあるので、このようなAPIを提供してくれる証券会社がもっと増えてくるといいな。(クリック証券、何でやめたんや・・・。)

追記(2015-12-01)

OANDA FX trade APIを利用した、無料のFXシステムトレードフレームワーク「Jiji」をリリースしました!

jiji2.unageanu.net

使ってみて、ご意見など頂けるとうれしいです。