無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

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

FXの取引レートを取得する。

クリック証券にアクセスして、FXのレートを取得するスクリプトです。

  • ClickClientを利用して、クリック証券WebServiceにアクセスし、レートを取得します。
    • 利用にはクリック証券のアカウントが必要です。
  • レートは10秒ごとに取得。強制終了するまで動きます。
  • 取得したレートはCSVファイルとしてローカルに保存します。
    • 保存先は引数で指定。そこに「<日付>/fx_<通貨ペア>.csv」の形式で保存されます。
    • CSVの形式は「,,<売りスワップ>,<買いスワップ>,<日付>」です。
#
#=クリック証券に接続し、FXのレートを取得するスクリプト
#
#==使い方
# ./collect.rb <レート保存先ディレクトリ> <クリック証券のユーザー名> <パスワード>
#

require "rubygems"
require "clickclient"
require "timeout"
require "fileutils"

DIR = ARGV[0]
USER = ARGV[1]
PASS = ARGV[2]

def convert_currency_pair_code(code)
  case code
    when ClickClient::FX::USDJPY
      return :USDJPY
    when ClickClient::FX::EURJPY
      return :EURJPY
    when ClickClient::FX::GBPJPY
      return :GBPJPY
    when ClickClient::FX::AUDJPY
      return :AUDJPY
    when ClickClient::FX::NZDJPY
      return :NZDJPY
    when ClickClient::FX::CADJPY
      return :CADJPY
    when ClickClient::FX::CHFJPY
      return :CHFJPY
    when ClickClient::FX::ZARJPY
      return :ZARJPY
    when ClickClient::FX::EURUSD
      return :EURUSD
    when ClickClient::FX::GBPUSD
      return :GBPUSD
    when ClickClient::FX::AUDUSD
      return :AUDUSD
    when ClickClient::FX::EURCHF
      return :EURCHF
    when ClickClient::FX::GBPCHF
      return :GBPCHF
    when ClickClient::FX::USDCHF
      return :USDCHF
  end
end

time = Time.now
prefix = DIR + "/" + time.strftime("%Y-%m-%d_%H%M%S")
FileUtils.mkdir_p prefix
prefix = prefix + "/fx_"
suffix = ".csv"
client = ClickClient::Client.new
client.fx_session(USER, PASS){|fx|
  loop {
    begin
      list = fx.list_rates
      list.each() { |k,info|
        code = convert_currency_pair_code info.currency_pair_code
        File.open( prefix + code.to_s + suffix, "a" ) { |f|
          line = [info.bid.to_s, info.ask.to_s,
            info.sell_swap.to_s, info.buy_swap.to_s,
            Time.now.strftime("%Y-%m-%d_%H%M%S")].join(", ")
          f << line << "\n"
        }
      }
    rescue Timeout::Error
      puts $!
    rescue
      puts $!
    end
    sleep 10
  }
}

修正(2008-01-22)

例外処理で血迷っていたので修正。