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

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

通常注文のキャンセル機能を実装

通常注文のキャンセル機能を実装しました
Github - unageanu / clickclient_scrap
また、注文APIの戻り値として注文番号を返す処理も実装しました。注文→(返された注文番号を引数として)注文をキャンセル、が可能です。なお、通常注文以外の注文(成り行き/OCO注文..etc..)のキャンセルには未対応です。

サンプル

以下は、指値・逆指値で注文を行い、即座にキャンセルするサンプルです。

$: << "../lib"

require 'clickclient_scrap'
require 'constants'

# ログイン
c = ClickClient::Client.new
c.fx_session( USER, 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}"
  }
  
  order_ids = []
  
  ## 指値注文
  order_ids << session.order( ClickClient::FX::EURJPY, ClickClient::FX::BUY, 1, {
    :rate=>rates[ClickClient::FX::EURJPY].ask_rate - 0.5, # 指値レート
    :execution_expression=>ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER, # 執行条件: 指値 
    :expiration_type=>ClickClient::FX::EXPIRATION_TYPE_TODAY  # 有効期限: 当日限り 
  })
  order_ids << session.order( ClickClient::FX::EURJPY, ClickClient::FX::SELL, 1, {
    :rate=>rates[ClickClient::FX::EURJPY].ask_rate + 0.5, # 指値レート
    :execution_expression=>ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER, # 執行条件: 指値 
    :expiration_type=>ClickClient::FX::EXPIRATION_TYPE_WEEK_END  # 有効期限: 週末まで
  })

  # 逆指値注文
  order_ids << session.order( ClickClient::FX::EURJPY, ClickClient::FX::BUY, 1, {
    :rate=>rates[ClickClient::FX::EURJPY].ask_rate + 0.5, # 逆指値レート
    :execution_expression=>ClickClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER, # 執行条件: 逆指値 
    :expiration_type=>ClickClient::FX::EXPIRATION_TYPE_INFINITY  # 有効期限: 無限
  }) 
  order_ids << session.order( ClickClient::FX::EURJPY, ClickClient::FX::SELL, 1, {
    :rate=>rates[ClickClient::FX::EURJPY].ask_rate - 0.5, # 逆指値レート
    :execution_expression=>ClickClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER, # 執行条件: 逆指値 
    :expiration_type=>ClickClient::FX::EXPIRATION_TYPE_SPECIFIED,  # 有効期限: 指定
    :expiration_date=>Date.today+2 # 2日後
  })

  # 注文一覧を取得
  orders = session.list_orders
  orders.each_pair {|k,v|
   puts <<-STR
---
order_no : #{v.order_no} 
trade_type : #{v.trade_type}
order_type : #{v.order_type}
execution_expression : #{v.execution_expression} 
sell_or_buy : #{v.sell_or_buy} 
pair : #{v.pair}
count : #{v.count} 
rate : #{v.rate} 
order_state : #{v.order_state}

STR
  }
  
  # すべての注文をキャンセル
  order_ids.each{|id| session.cancel_order(id.order_no) }
}

実行結果です。

EURCHF : 1.5062 : 1.5066 : -7 : 4
CHFJPY : 88.5 : 88.53 : -10 : 7
GBPCHF : 1.6747 : 1.6752 : -8 : 2
USDJPY : 97.98 : 97.99 : -22 : 18
ZARJPY : 11.75 : 11.79 : -270 : 240
USDCHF : 1.1068 : 1.1071 : -6 : 3
GBPJPY : 148.25 : 148.28 : -37 : 31
EURUSD : 1.3608 : 1.361 : -17 : 14
EURJPY : 133.33 : 133.35 : -31 : 27
AUDJPY : 74.96 : 74.98 : -54 : 50
GBPUSD : 1.513 : 1.5133 : 6 : -9
NZDJPY : 59.37 : 59.41 : -31 : 27
AUDUSD : 0.765 : 0.7654 : -46 : 43
CADJPY : 85.12 : 85.15 : -15 : 11
---
order_no : 10047354533 
trade_type : 新規
order_type : 21
execution_expression : 指値 
sell_or_buy : 1 
pair : EURJPY
count : 1 
rate : 133.75 
order_state : 取消済

---
order_no : 10047358010 
trade_type : 新規
order_type : 01
execution_expression : 逆指値 
sell_or_buy : 0 
pair : EURJPY
count : 1 
rate : 133.85 
order_state : 受付済

---
order_no : 10047357993 
trade_type : 新規
order_type : 01
execution_expression : 指値 
sell_or_buy : 1 
pair : EURJPY
count : 1 
rate : 133.85 
order_state : 受付済

---
order_no : 10047357983 
trade_type : 新規
order_type : 01
execution_expression : 指値 
sell_or_buy : 0 
pair : EURJPY
count : 1 
rate : 132.85 
order_state : 受付済

---
order_no : 10047358025 
trade_type : 新規
order_type : 01
execution_expression : 逆指値 
sell_or_buy : 1 
pair : EURJPY
count : 1 
rate : 132.85 
order_state : 受付済


さて、久々にclickclient_scrapのコードに触ったわけですが、WWW::Mechanizeの使い方をすっかり忘れてしまっている・・。orz。リハビリが必要ですなー。