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

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

指値注文、逆指値注文を行うサンプル

荷解きも落ち着いてきたので、ぼちぼちライブラリの実装を再開。以下の機能を実装しました。

  • 指値/逆指値での注文
  • 注文一覧の取得
  • 注文のキャンセル

GitHub - unageanu/sbiclient

以下は、指値/逆指値で注文して即座にキャンセルするサンプルです。なお、SBI証券では注文時に取引パスワード(ログインパスワードとは別)が必要なので、sessionの作成時にそれも渡すように変更しています。

$: << "../lib"

require 'sbiclient'
require 'common'

# ログイン
c = SBIClient::Client.new
c.fx_session( USER, PASS, ORDER_PASS ) {|session|

  # レートを取得
  rates = session.list_rates
  rates.each_pair {|k,v|
    puts "#{k} : #{v.bid_rate} : #{v.ask_rate} : #{v.sell_swap} : #{v.buy_swap}"
  }
  
  ## 指値注文  
  begin
    order_id = session.order( SBIClient::FX::EURJPY, SBIClient::FX::BUY, 1, {
      :rate=>rates[SBIClient::FX::EURJPY].ask_rate - 0.5, # 指値レート
      :execution_expression=>SBIClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER, # 執行条件: 指値 
      :expiration_type=>SBIClient::FX::EXPIRATION_TYPE_TODAY  # 有効期限: 当日限り 
    })
    print_order( session )
  ensure
    session.cancel_order(order_id.order_no)
  end
    
  begin
    order_id = session.order( SBIClient::FX::EURJPY, SBIClient::FX::SELL, 1, {
      :rate=>rates[SBIClient::FX::EURJPY].ask_rate + 0.5, # 指値レート
      :execution_expression=>SBIClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER, # 執行条件: 指値 
      :expiration_type=>SBIClient::FX::EXPIRATION_TYPE_WEEK_END  # 有効期限: 週末まで
    })
    print_order( session )
  ensure
    session.cancel_order(order_id.order_no)
  end
    
  
  # 逆指値注文
  begin
    order_id = session.order( SBIClient::FX::EURJPY, SBIClient::FX::BUY, 1, {
      :rate=>rates[SBIClient::FX::EURJPY].ask_rate + 0.5, # 逆指値レート
      :execution_expression=>SBIClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER, # 執行条件: 逆指値 
      :expiration_type=>SBIClient::FX::EXPIRATION_TYPE_INFINITY  # 有効期限: 無限
    }) 
    print_order( session )
  ensure
    session.cancel_order(order_id.order_no)
  end
    
  begin
    order_id = session.order( SBIClient::FX::EURJPY, SBIClient::FX::SELL, 1, {
      :rate=>rates[SBIClient::FX::EURJPY].ask_rate - 0.5, # 逆指値レート
      :execution_expression=>SBIClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER, # 執行条件: 逆指値 
      :expiration_type=>SBIClient::FX::EXPIRATION_TYPE_SPECIFIED,  # 有効期限: 指定
      :expiration_date=>Date.today+2 # 2日後
    })
    print_order( session )
  ensure
    session.cancel_order(order_id.order_no)
  end
}

実行結果です。

MBPJPY : 147.72 : 147.78 : -2 : 1
HKDJPY : 11.62 : 11.64 : 0 : -10
GBPJPY : 147.72 : 147.78 : -19 : 11
EURUSD : 1.4773 : 1.4777 : -5 : 0
SGDJPY : 64.42 : 64.47 : -8 : 0
SEKJPY : 12.78 : 12.81 : -5 : 1
CNYJPY : 13.2 : 13.22 : -110 : -90
AUDJPY : 81.66 : 81.7 : -75 : 68
MSDJPY : 90.15 : 90.17 : -1 : 0
GBPUSD : 1.6385 : 1.639 : -15 : 10
MZDJPY : 65.02 : 65.07 : -5 : 4
NZDJPY : 65.02 : 65.07 : -50 : 42
AUDUSD : 0.906 : 0.9065 : -75 : 70
MXNJPY : 6.81 : 6.85 : -100 : 50
KRWJPY : 7.57 : 7.62 : 0 : -120
CADJPY : 83.35 : 83.4 : -7 : 0
MURJPY : 133.2 : 133.24 : -1 : 0
NOKJPY : 15.79 : 15.82 : -8 : 4
EURJPY : 133.2 : 133.24 : -13 : 5
PLNJPY : 31.29 : 31.38 : -25 : 15
CHFJPY : 88.2 : 88.27 : 0 : -3
MUDJPY : 81.66 : 81.7 : -8 : 7
TRYJPY : 60.04 : 60.14 : -130 : 80
USDJPY : 90.15 : 90.17 : -4 : 1
MARJPY : 11.42 : 11.46 : -23 : 20
ZARJPY : 11.42 : 11.46 : -230 : 200
---
order_no : 16346938 
trade_type : TRADE_TYPE_NEW
order_type : NORMAL
execution_expression : LIMIT_ORDER 
sell_or_buy : BUY 
pair : EURJPY
count : 1 
rate : 132.74 
order_state : 発注中

---
order_no : 16346940 
trade_type : TRADE_TYPE_NEW
order_type : NORMAL
execution_expression : LIMIT_ORDER 
sell_or_buy : BUY 
pair : EURJPY
count : 1 
rate : 133.74 
order_state : 発注中

---
order_no : 16346941 
trade_type : TRADE_TYPE_NEW
order_type : NORMAL
execution_expression : REVERSE_LIMIT_ORDER 
sell_or_buy : BUY 
pair : EURJPY
count : 1 
rate : 133.74 
order_state : 発注中

---
order_no : 16346944 
trade_type : TRADE_TYPE_NEW
order_type : NORMAL
execution_expression : REVERSE_LIMIT_ORDER 
sell_or_buy : BUY 
pair : EURJPY
count : 1 
rate : 132.74 
order_state : 発注中