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

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

決済APIを実装

FX取引の決済APIを実装。(通常決済・成り行き決済をサポート/OCO決済は未サポート)

ダウンロード

例によって一応公開。こちらからどうぞ。
※実際のWebサービスでの動作は未検証です。ローカルサーバーでの動作のみ確認しています。

使い方

require 'gmoclient'

c = GMO::Client.new
c.fx_session( <ユーザーID>, <パスワード> ) { | fx_session | 
  
  # 通貨ペア一覧取得
  # 引数で取得する通貨ペアコードを配列で指定
  # 指定しない場合すべての通貨ペアの情報を取得。
  puts "\n--- list_currency_pairs"
  list = fx_session.list_currency_pairs [GMO::USDJPY, GMO::EURJPY]
  list.each{ |currency_pair_code, value|  puts value }
  
  # レート一覧取得 
  puts "\n--- list_rates"
  list = fx_session.list_rates
  list.each{ |currency_pair_code, value|  puts value }
  
  # 成り行き注文
  puts "\n--- order - buy"
  puts fx_session.order( GMO::USDJPY, GMO::BUY, 2  )
  puts "\n--- order - sell"
  result = fx_session.order( GMO::USDJPY, GMO::SELL, 1, {
    :slippage=>99,
    :slippage_base_rate=>list[GMO::USDJPY].bid_rate
  })
  puts result
  
  # 成り行き決済注文
  puts "\n--- settle"
  puts fx_session.settle( result.order_no, 1 )
  puts fx_session.settle( result.order_no, 2, {
    :slippage=>99,
    :slippage_base_rate=>list[GMO::USDJPY].bid_rate
  })
  
  # 通常注文
  puts "\n--- order - basic sell"
  result = fx_session.order( GMO::USDJPY, GMO::SELL, 1, {
    :rate=>145.19,
    :execution_expression=>GMO::EXECUTION_EXPRESSION_LIMIT_ORDER,
    :expiration_type=>GMO::EXPIRATION_TYPE_SPECIFIED,
    :expiration_date=>DateTime.new( 2007, 11, 5, 0 )
  })
  puts result

  # 注文変更
  puts "\n--- edit_order"
  fx_session.edit_order( result.order_no, {
    :rate=>145.19,
    :expiration_type=>GMO::EXPIRATION_TYPE_TODAY
  })
  
  # 注文取消し
  puts "\n--- cancel_order"
  fx_session.cancel_order( result.order_no )
  
  # 通常決済注文
  puts "\n--- settle - basic"
  result = fx_session.order( GMO::USDJPY, GMO::SELL, 2, {
    :rate=>145.19,
    :execution_expression=>GMO::EXECUTION_EXPRESSION_LIMIT_ORDER,
    :expiration_type=>GMO::EXPIRATION_TYPE_TODAY
  })
  puts fx_session.settle( result.order_no, 2, {
    :rate=>146.20,
    :execution_expression=>GMO::EXECUTION_EXPRESSION_LIMIT_ORDER,
    :expiration_type=>GMO::EXPIRATION_TYPE_SPECIFIED,
    :expiration_date=>DateTime.new( 2007, 11, 5, 0 )
  })
  
  
  # 注文一覧取得
  # 引数で、注文状態コード(必須)、通貨ペアコード、注文日期間開始日、注文日期間終了日を指定可能。
  puts "\n--- list_orders"
  list = fx_session.list_orders GMO::ORDER_CONDITION_ALL, GMO::EURJPY, Date.new( 2007, 10, 1 ), Date.new( 2007, 11, 1 )
  list.each{ |item|  puts item }  
  
  # 建玉一覧取得
  # 引数で、通貨ペアコードを指定可能。(省略可)
  puts "\n--- list_open_interests"
  list = fx_session.list_open_interests( GMO::EURJPY )
  list.each{ |item|  puts item }
  
  # 約定一覧取得
  # 引数で、取得期間(開始日,終了日)(必須)、通貨ペアコード、取引タイプ(新規Or決済)を指定可能。
  puts "\n--- list_execution_results"
  list = fx_session.list_execution_results( Date.new( 2007, 10, 1 ), Date.new( 2007, 11, 1 ) )
  list.each{ |item|  puts item }   
  list = fx_session.list_execution_results( Date.new( 2007, 10, 1 ), Date.new( 2007, 11, 1 ), GMO::TRADE_TYPE_NEW, GMO::EURJPY )
  list.each{ |item|  puts item }
  
  # 余力情報の取得
  puts "\n--- get_margin"
  puts fx_session.get_margin
  
  # お知らせ一覧取得
  puts "\n--- list_messages"
  list = fx_session.list_messages
  list.each{ |item|  puts item.to_s }  
}

実行結果です

--- list_currency_pairs
@max_trade_quantity=3000000, @maxTorihikiSuryo=3000000, @name=USDJPY, @tsukaPairCode=1, @trade_unit=10000, @torihikiTani=10000, @currency_pair_code=1, @tsukaPairName=USDJPY, @min_trade_quantity=10000, @minTorihikiSuryo=10000

--- list_rates
@bid=88.38, @buy_swap=175, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=88.45, @bidHigh=88.47, @days_of_grant=1, @tsukaPair=, @bid_low=88.22, @kaiSwap=175, @bid_rate=88.38, @zenjitsuhi=6, @date=2007-06-12T00:00:00Z, @bid_high=88.47, @currency_pair_code=5, @uriSwap=-178, @ask=88.45, @sell_swap=-178, @fuyoNissu=1, @day_before_to=6.0, @bidLow=88.22
@bid=0.8179, @buy_swap=20, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=0.8198, @bidHigh=0.8196, @days_of_grant=1, @tsukaPair=, @bid_low=0.8175, @kaiSwap=20, @bid_rate=0.8179, @zenjitsuhi=2, @date=2007-06-12T00:00:00Z, @bid_high=0.8196, @currency_pair_code=11, @uriSwap=-23, @ask=0.8198, @sell_swap=-23, @fuyoNissu=1, @day_before_to=2.0, @bidLow=0.8175
@bid=111.92, @buy_swap=108, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=111.98, @bidHigh=112.0, @days_of_grant=1, @tsukaPair=, @bid_low=111.68, @kaiSwap=108, @bid_rate=111.92, @zenjitsuhi=7, @date=2007-06-12T00:00:00Z, @bid_high=112.0, @currency_pair_code=6, @uriSwap=-111, @ask=111.98, @sell_swap=-111, @fuyoNissu=1, @day_before_to=7.0, @bidLow=111.68
@bid=1.6538, @buy_swap=71, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=1.6544, @bidHigh=1.6546, @days_of_grant=1, @tsukaPair=, @bid_low=1.6526, @kaiSwap=71, @bid_rate=1.6538, @zenjitsuhi=4, @date=2007-06-12T00:00:00Z, @bid_high=1.6546, @currency_pair_code=12, @uriSwap=-74, @ask=1.6544, @sell_swap=-74, @fuyoNissu=1, @day_before_to=4.0, @bidLow=1.6526
@bid=121.64, @buy_swap=159, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=121.79, @bidHigh=121.66, @days_of_grant=1, @tsukaPair=, @bid_low=121.4, @kaiSwap=159, @bid_rate=121.64, @zenjitsuhi=18, @date=2007-06-12T00:00:00Z, @bid_high=121.66, @currency_pair_code=1, @uriSwap=-161, @ask=121.79, @sell_swap=-161, @fuyoNissu=1, @day_before_to=18.0, @bidLow=121.4
@bid=98.99, @buy_swap=42, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=99.04, @bidHigh=99.02, @days_of_grant=1, @tsukaPair=, @bid_low=98.63, @kaiSwap=42, @bid_rate=98.99, @zenjitsuhi=18, @date=2007-06-12T00:00:00Z, @bid_high=99.02, @currency_pair_code=7, @uriSwap=-46, @ask=99.04, @sell_swap=-46, @fuyoNissu=1, @day_before_to=18.0, @bidLow=98.63
@bid=2.4267, @buy_swap=200, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=2.4275, @bidHigh=2.4298, @days_of_grant=1, @tsukaPair=, @bid_low=2.4256, @kaiSwap=200, @bid_rate=2.4267, @zenjitsuhi=-11, @date=2007-06-12T00:00:00Z, @bid_high=2.4298, @currency_pair_code=13, @uriSwap=-205, @ask=2.4275, @sell_swap=-205, @fuyoNissu=1, @day_before_to=-11.0, @bidLow=2.4256
@bid=163.78, @buy_swap=143, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=163.83, @bidHigh=163.8, @days_of_grant=1, @tsukaPair=, @bid_low=163.39, @kaiSwap=143, @bid_rate=163.78, @zenjitsuhi=33, @date=2007-06-12T00:00:00Z, @bid_high=163.8, @currency_pair_code=2, @uriSwap=-147, @ask=163.83, @sell_swap=-147, @fuyoNissu=1, @day_before_to=33.0, @bidLow=163.39
@bid=17.18, @buy_swap=370, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=17.25, @bidHigh=17.19, @days_of_grant=1, @tsukaPair=, @bid_low=17.12, @kaiSwap=370, @bid_rate=17.18, @zenjitsuhi=6, @date=2007-06-12T00:00:00Z, @bid_high=17.19, @currency_pair_code=8, @uriSwap=-390, @ask=17.25, @sell_swap=-390, @fuyoNissu=1, @day_before_to=6.0, @bidLow=17.12
@bid=1.2273, @buy_swap=100, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=1.23, @bidHigh=1.2285, @days_of_grant=1, @tsukaPair=, @bid_low=1.2264, @kaiSwap=100, @bid_rate=1.2273, @zenjitsuhi=-3, @date=2007-06-12T00:00:00Z, @bid_high=1.2285, @currency_pair_code=14, @uriSwap=-104, @ask=1.23, @sell_swap=-104, @fuyoNissu=1, @day_before_to=-3.0, @bidLow=1.2264
@bid=240.29, @buy_swap=301, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=240.37, @bidHigh=240.33, @days_of_grant=1, @tsukaPair=, @bid_low=239.86, @kaiSwap=301, @bid_rate=240.29, @zenjitsuhi=30, @date=2007-06-12T00:00:00Z, @bid_high=240.33, @currency_pair_code=3, @uriSwap=-306, @ask=240.37, @sell_swap=-306, @fuyoNissu=1, @day_before_to=30.0, @bidLow=239.86
@bid=1.345, @buy_swap=-68, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=1.3463, @bidHigh=1.3454, @days_of_grant=1, @tsukaPair=, @bid_low=1.344, @kaiSwap=-68, @bid_rate=1.345, @zenjitsuhi=6, @date=2007-06-12T00:00:00Z, @bid_high=1.3454, @currency_pair_code=9, @uriSwap=64, @ask=1.3463, @sell_swap=64, @fuyoNissu=1, @day_before_to=6.0, @bidLow=1.344
@bid=99.74, @buy_swap=148, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=99.8, @bidHigh=99.88, @days_of_grant=1, @tsukaPair=, @bid_low=99.49, @kaiSwap=148, @bid_rate=99.74, @zenjitsuhi=18, @date=2007-06-12T00:00:00Z, @bid_high=99.88, @currency_pair_code=4, @uriSwap=-152, @ask=99.8, @sell_swap=-152, @fuyoNissu=1, @day_before_to=18.0, @bidLow=99.49
@bid=1.9723, @buy_swap=-2, @hasseibi=2007-06-12T00:00:00Z, @ask_rate=1.9747, @bidHigh=1.9733, @days_of_grant=1, @tsukaPair=, @bid_low=1.9719, @kaiSwap=-2, @bid_rate=1.9723, @zenjitsuhi=-5, @date=2007-06-12T00:00:00Z, @bid_high=1.9733, @currency_pair_code=10, @uriSwap=-3, @ask=1.9747, @sell_swap=-3, @fuyoNissu=1, @day_before_to=-5.0, @bidLow=1.9719

--- order - buy
@limit_order_no=, @tategyokuBango=10000000001, @open_interest_no=10000000001, @chumonBango=10000000001, @settlement_order_no=, @stop_order_no=, @order_no=10000000001

--- order - sell
@limit_order_no=, @tategyokuBango=10000000001, @open_interest_no=10000000001, @chumonBango=10000000001, @settlement_order_no=, @stop_order_no=, @order_no=10000000001

--- settle
@kessaiTategyokuBango=1, @open_interest_no=1, @stop_settlement_order_no=, @chumonBango=10000000001, @settlement_order_no=10000000001, @limit_settlement_order_no=
@kessaiTategyokuBango=1, @open_interest_no=1, @stop_settlement_order_no=, @chumonBango=10000000001, @settlement_order_no=10000000001, @limit_settlement_order_no=

--- order - basic sell
@limit_order_no=, @open_interest_no=, @chumonBango=10000000001, @settlement_order_no=, @stop_order_no=, @order_no=10000000001

--- edit_order

--- cancel_order

--- settle - basic
@kessaiTategyokuBango=1, @open_interest_no=1, @stop_settlement_order_no=, @chumonBango=10000000001, @settlement_order_no=10000000001, @limit_settlement_order_no=

--- list_orders
@sell_or_buy=0, @fuseiritsuRiyu=0, @failure_reason=0, @hatchuNichiji=2007-05-29T13:17:00Z, @execution_expression=1, @baibai=0, @trade_type=0, @chumonJotai=20, @order_state=20, @shikko=1, @rate=121.0, @yakujoNichiji=, @torihiki=0, @agreement_date=, @date=2007-05-29T13:17:00Z, @enable_change_or_cancel=true, @yukoNichiji=, @chumonBango=10000000001, @expiration_date=, @chumonRate=121.0, @trade_quantity=10000.0, @yakujoRate=, @henkoTorikeshiKano=1, @agreement_rate=, @order_no=10000000001, @yukoKigen=0, @expiration_type=0, @hatchuSuryo=10000
@sell_or_buy=1, @fuseiritsuRiyu=0, @failure_reason=0, @hatchuNichiji=2007-05-29T13:17:00Z, @execution_expression=1, @baibai=1, @trade_type=1, @chumonJotai=10, @order_state=10, @shikko=1, @rate=122.0, @yakujoNichiji=, @torihiki=1, @agreement_date=, @date=2007-05-29T13:17:00Z, @enable_change_or_cancel=true, @yukoNichiji=, @chumonBango=10000000002, @expiration_date=, @chumonRate=122, @trade_quantity=10000.0, @yakujoRate=, @henkoTorikeshiKano=1, @agreement_rate=, @order_no=10000000002, @yukoKigen=0, @expiration_type=0, @hatchuSuryo=10000
@sell_or_buy=1, @fuseiritsuRiyu=0, @failure_reason=0, @hatchuNichiji=2007-05-29T13:17:00Z, @execution_expression=1, @baibai=1, @trade_type=1, @chumonJotai=10, @order_state=10, @shikko=1, @rate=120.0, @yakujoNichiji=, @torihiki=1, @agreement_date=, @date=2007-05-29T13:17:00Z, @enable_change_or_cancel=true, @yukoNichiji=, @chumonBango=10000000003, @expiration_date=, @chumonRate=120, @trade_quantity=10000.0, @yakujoRate=, @henkoTorikeshiKano=1, @agreement_rate=, @order_no=10000000003, @yukoKigen=0, @expiration_type=0, @hatchuSuryo=10000

--- list_open_interests
@hyokaRate=121.09, @baibai=0, @chumonKano=1, @tategyokuBango=10000000001, @tsukaPair=, @tategyokuRate=121.15, @yakujoNichiji=2007-05-29T13:17:00Z, @hyokaSoneki=-600, @currency_pair_code=1, @chumonSuryo=0, @ruikeiSwap=1404, @suryo=10000

--- list_execution_results
@yakujoSuryo=100000, @kessaiSoneki=-14000, @baibai=1, @tsukaPair=, @kessaiTaisho=10000000001, @tategyokuRate=121.7, @tesuryo=0, @yakujoNichiji=2007-05-29T13:17:00Z, @torihiki=1, @chumonBango=10000000003, @currency_pair_code=1, @ukewatashibi=2007-05-31T00:00:00Z, @yakujoRate=121.56, @ruikeiSwap=0
@yakujoSuryo=100000, @kessaiSoneki=-14000, @baibai=1, @tsukaPair=, @kessaiTaisho=10000000001, @tategyokuRate=121.7, @tesuryo=0, @yakujoNichiji=2007-05-29T13:17:00Z, @torihiki=1, @chumonBango=10000000003, @currency_pair_code=1, @ukewatashibi=2007-05-31T00:00:00Z, @yakujoRate=121.56, @ruikeiSwap=0

--- get_margin
@balance_in_account=9235360, @genkinZandaka=9251160, @required_guarantee_money=1211600, @guarantee_money_status=1, @hitsuyoShokokin=1211600, @shokokinIjiritsu=738.3, @settlement_profit_or_loss_of_next_business_day=0, @kessaiSonekiT1=0, @appraisal_profit_or_loss_of_open_interest=-290000, @kozaZandaka=9235360, @freezed_guarantee_money=1211600, @transferable_money_amount=7733760, @kosokuShokokin=1211600, @shokokinStatus=1, @settlement_profit_or_loss_of_today=0, @kessaiSonekiT=0, @guarantee_money_list=@torihikiShokokin=12116, @guarantee_money=12116, @tsukaPairCode=1, @currency_pair_code=1@torihikiShokokin=16261, @guarantee_money=16261, @tsukaPairCode=2, @currency_pair_code=2@torihikiShokokin=24063, @guarantee_money=24063, @tsukaPairCode=3, @currency_pair_code=3@torihikiShokokin=9929, @guarantee_money=9929, @tsukaPairCode=4, @currency_pair_code=4@torihikiShokokin=8794, @guarantee_money=8794, @tsukaPairCode=5, @currency_pair_code=5@torihikiShokokin=11175, @guarantee_money=11175, @tsukaPairCode=6, @currency_pair_code=6@torihikiShokokin=9865, @guarantee_money=9865, @tsukaPairCode=7, @currency_pair_code=7@torihikiShokokin=16930, @guarantee_money=16930, @tsukaPairCode=8, @currency_pair_code=8@torihikiShokokin=16259, @guarantee_money=16259, @tsukaPairCode=9, @currency_pair_code=9@torihikiShokokin=24062, @guarantee_money=24062, @tsukaPairCode=10, @currency_pair_code=10@torihikiShokokin=9918, @guarantee_money=9918, @tsukaPairCode=11, @currency_pair_code=11@torihikiShokokin=16259, @guarantee_money=16259, @tsukaPairCode=12, @currency_pair_code=12@torihikiShokokin=24058, @guarantee_money=24058, @tsukaPairCode=13, @currency_pair_code=13@torihikiShokokin=12110, @guarantee_money=12110, @tsukaPairCode=14, @currency_pair_code=14, @market_value=8945360, @torihikiShokokinList=
    , @tategyokuHyokaSoneki=-290000, @swap_profit_or_loss=-15800, @margin=7733760, @swapSoneki=-15800, @furikaeKano=7733760, @balance_of_cach=9251160, @shimegoFurikae=0, @ordered_guarantee_money=0, @guarantee_money_maintenance_ratio=738.3, @chumonShokokin=0, @jikaHyokaSogaku=8945360, @settlement_profit_or_loss_of_next_next_business_day=0, @kessaiSonekiT2=0, @yoryoku=7733760

--- list_messages
@riyo=0, @text=お知らせ内容の本文です。, @taishosha=1, @title=2007年05月18日(金)お知らせ内容のタイトル