Class: ClickClient::FX::FxSession

Inherits:
Object
  • Object
show all
Defined in:
lib/clickclient/fx.rb

Overview

FX取引のためのセッションクラス

Client#fx_sessionのブロックの引数として渡されます。詳細はClient#fx_sessionを参照ください。

Instance Method Summary collapse

Constructor Details

#initialize(client, base_uri) ⇒ FxSession

コンストラクタ



164
165
166
167
# File 'lib/clickclient/fx.rb', line 164

def initialize( client, base_uri )
  @client = client
  @base_uri = base_uri
end

Instance Method Details

#cancel_order(order_no) ⇒ Object

注文をキャンセルします。

order_no

注文番号

戻り値

なし



476
477
478
479
# File 'lib/clickclient/fx.rb', line 476

def cancel_order ( order_no )
  result = @client.post( @base_uri + "/ws/fx/chumonTorikeshi.do", "cmk=#{order_no.to_s}")
  ClickClient.parse( result.content )
end

#edit_order(order_no, options) ⇒ Object

注文を変更します。

変更可能な注文とその値は次のとおりです。成り行き注文は変更できません。

  • 通常注文

  • 注文レート

  • 有効期限

  • 有効日時

  • IFD注文

  • 新規注文レート

  • 新規有効期限

  • 新規有効日時

  • 決済注文レート

  • 決済有効期限

  • 決済有効日時

  • OCO注文

  • 注文レート

  • 逆指値レート

  • 有効期限

  • 有効日時

  • IFD-OCO注文

  • 新規注文レート

  • 新規有効期限

  • 新規有効日時

  • 決済注文レート

  • 決済注文逆指値レート

  • 決済有効期限

  • 決済有効日時

order_no

注文番号

options

注文のオプション。注文方法に応じて以下の情報を設定できます。

- <b>通常注文</b> ※注文レートが設定されていれば通常取引となります。
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
- <b>OCO注文</b> ※逆指値番号が設定されていればOCO取引となります。
  - <tt>:stop_order_no</tt> .. 逆指値注文番号(必須)
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:stop_order_rate</tt> .. 逆指値レート(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
- <b>IFD注文</b> ※決済取引の指定のみがあればIFD取引となります。
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
  - <tt>:settle</tt> .. 決済取引の指定。マップで指定します。
    - <tt>:order_no</tt> .. 決済注文番号(必須)
    - <tt>:rate</tt> .. 決済取引の注文レート(必須)
    - <tt>:expiration_type</tt> .. 決済取引の有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
    - <tt>:expiration_date</tt> .. 決済取引の有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
- <b>IFD-OCO注文</b> ※決済逆指値注文番号と決済取引の指定があればIFD-OCO取引となります。
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
  - <tt>:settle</tt> .. 決済取引の指定。マップで指定します。
    - <tt>:order_no</tt> .. 決済注文番号(必須)
    - <tt>:stop_order_no</tt> .. 逆指値決済注文番号(必須)
    - <tt>:rate</tt> .. 決済取引の注文レート(必須)
    - <tt>:stop_order_rate</tt> .. 決済取引の逆指値レート(必須)
    - <tt>:expiration_type</tt> .. 決済取引の有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
    - <tt>:expiration_date</tt> .. 決済取引の有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
戻り値

なし



412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
# File 'lib/clickclient/fx.rb', line 412

def edit_order ( order_no, options )
  
  body = ""
  path = nil
  if ( options[:settle] != nil  )
    if ( options[:settle][:stop_order_no] != nil)
      # 決済逆指値注文番号と決済取引の指定があればIFD-OCO取引
      raise "options[:settle][:order_no] is required." if options[:settle][:order_no] == nil
      raise "options[:settle][:rate] is required." if options[:settle][:rate] == nil
      raise "options[:settle][:stop_order_rate] is required." if options[:settle][:stop_order_rate] == nil
      path = "/ws/fx/ifdOcoChumonHenko.do"
      body << "kc.sck=#{options[:settle][:order_no].to_s}"
      body << "&kc.gck=#{options[:settle][:stop_order_no].to_s}"
      body << "&kc.srp=#{options[:settle][:rate].to_s}"
      body << "&kc.grp=#{options[:settle][:stop_order_rate].to_s}"             
    else
      # 決済取引の指定のみがあればIFD取引
      raise "options[:settle][:order_no] is required." if options[:settle][:order_no] == nil
      raise "options[:settle][:rate] is required." if options[:settle][:rate] == nil
      path = "/ws/fx/ifdChumonHenko.do"
      body << "kc.cmk=#{options[:settle][:order_no].to_s}"
      body << "&kc.crp=#{options[:settle][:rate].to_s}"
    end
    raise "options[:rate] is required." if options[:rate] == nil
    raise "options[:expiration_type] is required." if options[:expiration_type] == nil
    body << "&sc.cmk=#{order_no.to_s}"
    body << "&sc.crp=#{options[:rate].to_s}"
    body << "&sc.dat=#{options[:expiration_type].to_s}"
    body << "&sc.ykd=" << options[:expiration_date].strftime( "%Y%m%d%H" ) if options[:expiration_date] != nil

    raise "options[:settle][:rate] is required." if options[:settle][:rate] == nil
    raise "options[:settle][:expiration_type] is required." if options[:expiration_type] == nil
    body << "&kc.dat=#{options[:settle][:expiration_type].to_s}"
    body << "&kc.ykd=" << options[:settle][:expiration_date].strftime( "%Y%m%d%H" ) if options[:settle][:expiration_date] != nil
  elsif ( options[:rate] != nil )
    if ( options[:stop_order_no] != nil )
      # 逆指値番号が指定されていればOCO取引
      path = "/ws/fx/ocoChumonHenko.do"
      body << "sck=#{order_no.to_s}"
      body << "&gck=#{options[:stop_order_no].to_s}"
      body << "&srp=#{options[:rate].to_s}"
      body << "&grp=#{options[:stop_order_rate].to_s}"
    else
      # そうでなければ通常取引
      raise "options[:rate] is required." if options[:rate] == nil
      path = "/ws/fx/tsujoChumonHenko.do"
      body << "cmk=#{order_no.to_s}"
      body << "&crp=#{options[:rate].to_s}"
    end
    raise "options[:expiration_type] is required." if options[:expiration_type] == nil
    body << "&dat=#{options[:expiration_type].to_s}"
    body << "&ykd=" << options[:expiration_date].strftime( "%Y%m%d%H" ) if options[:expiration_date] != nil
  end        
  
  result = @client.post( @base_uri + path, body)
  ClickClient.parse( result.content )
end

#get_marginObject

余力情報を取得します。

戻り値

ClickClient::FX::Margin



586
587
588
589
590
591
# File 'lib/clickclient/fx.rb', line 586

def get_margin
  result = @client.post( @base_uri + "/ws/fx/yoryokuJoho.do")
  list = []
  doc = ClickClient.parse( result.content )
  return Margin.new( doc.root )
end

#list_currency_pairs(currency_pair_codes = nil) ⇒ Object

通貨ペア一覧を取得します。

currency_pair_codes

取得したい通貨ペアのコードの配列。nilの場合、全一覧を取得します。

戻り値

ClickClient::FX::CurrencyPairの配列。



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/clickclient/fx.rb', line 175

def list_currency_pairs( currency_pair_codes=nil )
  post = ""
  i =0
  if currency_pair_codes != nil
    currency_pair_codes.each{ |code|
      post << "tka[#{i}].tkt="<< code.to_s << "&"
      i += 1
    }
    post.chop
  end
  result = @client.post( @base_uri + "/ws/fx/tsukaPairList.do", post)
  list = {}
  doc = ClickClient.parse( result.content )
  doc.elements.each("./tsukaPairListResponse/tsukaPairList/tsukaPairListItem") { |item|
    v = CurrencyPair.new( item )
    list[v.currency_pair_code] = v
  }
  return list
end

#list_execution_results(from, to, trade_type = nil, currency_pair_code = nil) ⇒ Object

約定一覧を取得します。

from

注文日期間開始日。Dateで指定。例) Date.new(2007, 1, 1)

to

注文日期間終了日。Dateで指定。例) Date.new(2007, 1, 1)

trade_type

取引種別

currency_pair_code

通貨ペアコード

戻り値

ClickClient::FX::ExecutionResultの配列



565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
# File 'lib/clickclient/fx.rb', line 565

def list_execution_results( from, to, trade_type=nil, currency_pair_code=nil )
  raise "from is required." if from == nil
  raise "to is required." if to == nil
  body = "yfd=" << from.strftime( "%Y%m%d" )
  body << "&ytd=" << to.strftime( "%Y%m%d" )
  body << "&tkt=" << currency_pair_code.to_s if currency_pair_code != nil
  body << "&tht=" << trade_type.to_s if trade_type != nil
  result = @client.post( @base_uri + "/ws/fx/yakujoList.do", body)
  list = []
  doc = ClickClient.parse( result.content )
  doc.elements.each("./yakujoListResponse/yakujoList/yakujoListItem") { |item|
    list << ExecutionResult.new( item )
  }
  return list
end

#list_messagesObject

お知らせ一覧を取得します。

戻り値

ClickClient::FX::Messageの配列



598
599
600
601
602
603
604
605
606
# File 'lib/clickclient/fx.rb', line 598

def list_messages
  result = @client.post( @base_uri + "/ws/fx/messageList.do")
  list = []
  doc = ClickClient.parse( result.content )
  doc.elements.each("./messageListResponse/messageList/messageListItem") { |item|
    list << Message.new( item )
  }
  return list
end

#list_open_interests(currency_pair_code = nil) ⇒ Object

建玉一覧を取得します。

currency_pair_code

通貨ペアコード

戻り値

ClickClient::FX::OpenInterestの配列



545
546
547
548
549
550
551
552
553
554
# File 'lib/clickclient/fx.rb', line 545

def list_open_interests( currency_pair_code=nil )
  body = currency_pair_code != nil ? "tkt=#{currency_pair_code.to_s}" : ""
  result = @client.post( @base_uri + "/ws/fx/tategyokuList.do", body)
  list = []
  doc = ClickClient.parse( result.content )
  doc.elements.each("./tategyokuListResponse/tategyokuList/tategyokuListItem") { |item|
    list << OpenInterest.new( item )
  }
  return list
end

#list_orders(order_condition_code, currency_pair_code = nil, from = nil, to = nil) ⇒ Object

注文一覧を取得します。

order_condition_code

注文状況コード(必須)

currency_pair_code

通貨ペアコード

from

注文日期間開始日。Dateで指定。例) Date.new(2007, 1, 1)

to

注文日期間終了日。Dateで指定。例) Date.new(2007, 1, 1)

戻り値

ClickClient::FX::Orderの配列。



220
221
222
223
224
225
226
227
228
229
230
231
232
233
# File 'lib/clickclient/fx.rb', line 220

def list_orders(  order_condition_code, currency_pair_code=nil, from=nil, to=nil )
  body = "cms=" << order_condition_code.to_s
  body << "&tkt=" << currency_pair_code.to_s
  body << "&cfd=" << from.strftime( "%Y%m%d" ) if from != nil
  body << "&ctd=" << to.strftime( "%Y%m%d" ) if to != nil
  result = @client.post( @base_uri + "/ws/fx/chumonList.do", body)
  list = {}
  doc = ClickClient.parse( result.content )
  doc.elements.each("./chumonListResponse/chumonList/chumonListItem/chumon") { |item|
    order = Order.new( item )
    list[order.order_no] = order
  }
  return list
end

#list_ratesObject

現在のレートの一覧を取得します。

戻り値

ClickClient::FX::Rateの配列。



200
201
202
203
204
205
206
207
208
209
# File 'lib/clickclient/fx.rb', line 200

def list_rates(  )
  result = @client.post( @base_uri + "/ws/fx/rateList.do")
  list = {}
  doc = ClickClient.parse( result.content )
  doc.elements.each("./rateListResponse/rateList/rateListItem") { |item|
    v = Rate.new( item )
    list[v.currency_pair_code] = v
  }
  return list
end

#order(currency_pair_code, sell_or_buy, unit, options = {}) ⇒ Object

注文を行います。

currency_pair_code

通貨ペアコード(必須)

sell_or_buy

売買区分。ClickClient::FX::BUY,ClickClient::FX::SELLのいずれかを指定します。(必須)

unit

取引数量(必須)

options

注文のオプション。注文方法に応じて以下の情報を設定できます。

- <b>成り行き注文</b>
  - <tt>:slippage</tt> .. スリッページ (オプション)
  - <tt>:slippage_base_rate</tt> .. スリッページの基準となる取引レート(スリッページが指定された場合、必須。)
- <b>通常注文</b> ※注文レートが設定されていれば通常取引となります。
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:execution_expression</tt> .. 執行条件。ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER等を指定します(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
- <b>OCO注文</b> ※逆指値レートが設定されていればOCO取引となります。
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:stop_order_rate</tt> .. 逆指値レート(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
- <b>IFD注文</b> ※決済取引の指定があればIFD取引となります。
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:execution_expression</tt> .. 執行条件。ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER等を指定します(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
  - <tt>:settle</tt> .. 決済取引の指定。マップで指定します。
    - <tt>:unit</tt> .. 決済取引の取引数量(必須)
    - <tt>:sell_or_buy</tt> .. 決済取引の売買区分。ClickClient::FX::BUY,ClickClient::FX::SELLのいずれかを指定します。(必須)
    - <tt>:rate</tt> .. 決済取引の注文レート(必須)
    - <tt>:execution_expression</tt> .. 決済取引の執行条件。ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER等を指定します(必須)
    - <tt>:expiration_type</tt> .. 決済取引の有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
    - <tt>:expiration_date</tt> .. 決済取引の有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
- <b>IFD-OCO注文</b> ※決済取引の指定と逆指値レートの指定があればIFD-OCO取引となります。
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:execution_expression</tt> .. 執行条件。ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER等を指定します(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
  - <tt>:settle</tt> .. 決済取引の指定。マップで指定します。
    - <tt>:unit</tt> .. 決済取引の取引数量(必須)
    - <tt>:sell_or_buy</tt> .. 決済取引の売買区分。ClickClient::FX::BUY,ClickClient::FX::SELLのいずれかを指定します。(必須)
    - <tt>:rate</tt> .. 決済取引の注文レート(必須)
    - <tt>:stop_order_rate</tt> .. 決済取引の逆指値レート(必須)
    - <tt>:expiration_type</tt> .. 決済取引の有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
    - <tt>:expiration_date</tt> .. 決済取引の有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
戻り値

ClickClient::FX::OrderResult



281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
# File 'lib/clickclient/fx.rb', line 281

def order ( currency_pair_code, sell_or_buy, unit, options={} )
  path = nil
  body = "tkt=#{currency_pair_code.to_s}"
  if ( options[:settle] != nil  )
    if ( options[:settle][:stop_order_rate] != nil)
       # 逆指値レートと決済取引の指定があればIFD-OCO取引
       raise "options[:settle][:rate] is required." if options[:settle][:rate] == nil
       path = "/ws/fx/ifdOcoChumon.do"
       body << "&kc.grp=#{options[:settle][:stop_order_rate].to_s}"
       body << "&kc.srp=#{options[:settle][:rate].to_s}"
    else
       # 決済取引の指定のみがあればIFD取引
       raise "options[:settle][:rate] is required." if options[:settle][:rate] == nil
       raise "options[:settle][:execution_expression] is required." if options[:settle][:execution_expression] == nil
       path = "/ws/fx/ifdChumon.do"
       body << "&kc.crp=#{options[:settle][:rate].to_s}"
       body << "&kc.sjt=#{options[:settle][:execution_expression].to_s}"
    end
    raise "options[:rate] is required." if options[:rate] == nil
    raise "options[:execution_expression] is required." if options[:execution_expression] == nil
    raise "options[:expiration_type] is required." if options[:expiration_type] == nil
    body << "&sc.bbt=#{sell_or_buy.to_s}"
    body << "&sc.crp=#{options[:rate].to_s}"
    body << "&sc.sjt=#{options[:execution_expression].to_s}"
    body << "&sc.thn=#{unit.to_s}"
    body << "&sc.dat=#{options[:expiration_type].to_s}"
    body << "&sc.ykd=" << options[:expiration_date].strftime( "%Y%m%d%H" ) if options[:expiration_date] != nil

    raise "options[:settle][:rate] is required." if options[:settle][:rate] == nil
    raise "options[:settle][:sell_or_buy] is required." if options[:settle][:sell_or_buy] == nil
    raise "options[:settle][:unit] is required." if options[:settle][:unit] == nil
    raise "options[:settle][:expiration_type] is required." if options[:expiration_type] == nil
    body << "&kc.bbt=#{options[:settle][:sell_or_buy].to_s}"
    body << "&kc.dat=#{options[:settle][:expiration_type].to_s}"
    body << "&kc.thn=#{options[:settle][:unit].to_s}"
    body << "&kc.ykd=" << options[:settle][:expiration_date].strftime( "%Y%m%d%H" ) if options[:settle][:expiration_date] != nil
  elsif ( options[:rate] != nil )
    if ( options[:stop_order_rate] != nil )
      # 逆指値レートが指定されていればOCO取引
      path = "/ws/fx/ocoChumon.do"
      body << "&srp=#{options[:rate].to_s}"
      body << "&grp=#{options[:stop_order_rate].to_s}"
    else
      # そうでなければ通常取引
      raise "options[:execution_expression] is required." if options[:execution_expression] == nil
      path = "/ws/fx/tsujoChumon.do"
      body << "&crp=#{options[:rate].to_s}"
      body << "&sjt=#{options[:execution_expression].to_s}"
    end
    raise "options[:expiration_type] is required." if options[:expiration_type] == nil
    body << "&bbt=#{sell_or_buy.to_s}"
    body << "&thn=#{unit.to_s}"
    body << "&dat=#{options[:expiration_type].to_s}"
    body << "&ykd=" << options[:expiration_date].strftime( "%Y%m%d%H" ) if options[:expiration_date] != nil
  else
    # 成り行き
    path = "/ws/fx/nariyukiChumon.do"
    body << "&bbt=#{sell_or_buy.to_s}&thn=#{unit.to_s}"
    if ( options[:slippage] != nil )
      raise "if you use a slippage,  options[:slippage_base_rate] is required." if options[:slippage_base_rate] == nil
      body << "&slp=#{options[:slippage].to_s}&gnp=#{options[:slippage_base_rate].to_s}"
    end
  end
  result = @client.post( @base_uri + path, body)
  doc = ClickClient.parse( result.content )
  return OrderResult.new( doc.root )
end

#settle(open_interest_no, unit, options = {}) ⇒ Object

決済注文を行います。

open_interest_no

決済する建玉番号

unit

取引数量

options

決済注文のオプション。注文方法に応じて以下の情報を設定できます。

- <b>成り行き注文</b>
  - <tt>:slippage</tt> .. スリッページ (オプション)
  - <tt>:slippage_base_rate</tt> .. スリッページの基準となる取引レート(スリッページが指定された場合、必須。)
- <b>通常注文</b> ※注文レートが設定されていれば通常取引となります。
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:execution_expression</tt> .. 執行条件。ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER等を指定します(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
- <b>OCO注文</b> ※注文レートと逆指値レートが設定されていればOCO取引となります。
  - <tt>:rate</tt> .. 注文レート(必須)
  - <tt>:stop_order_rate</tt> .. 逆指値レート(必須)
  - <tt>:expiration_type</tt> .. 有効期限。ClickClient::FX::EXPIRATION_TYPE_TODAY等を指定します(必須)
  - <tt>:expiration_date</tt> .. 有効期限が「日付指定(ClickClient::FX::EXPIRATION_TYPE_SPECIFIED)」の場合の有効期限をDateで指定します。(有効期限が「日付指定」の場合、必須)
戻り値

ClickClient::FX::SettleResult



502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
# File 'lib/clickclient/fx.rb', line 502

def settle ( open_interest_no, unit, options={} )
  path = nil
  body = "tga[0].tgk=#{open_interest_no.to_s}&tga[0].thn=#{unit.to_s}"
  if ( options[:rate] != nil && options[:stop_order_rate] != nil )
    # レートと逆指値レートが指定されていればOCO取引
    path = "/ws/fx/ocoKessaiChumon.do"
    raise "options[:expiration_type] is required." if options[:expiration_type] == nil
    body << "&srp=#{options[:rate].to_s}"
    body << "&grp=#{options[:stop_order_rate].to_s}"
    body << "&dat=#{options[:expiration_type].to_s}"
    body << "&ykd=" << options[:expiration_date].strftime( "%Y%m%d%H" ) if options[:expiration_date] != nil
  elsif ( options[:rate] != nil )
    # レートが指定されていれば通常取引
    path = "/ws/fx/tsujoKessaiChumon.do"
    raise "options[:execution_expression] is required." if options[:execution_expression] == nil
    raise "options[:expiration_type] is required." if options[:expiration_type] == nil
    body << "&crp=#{options[:rate].to_s}"
    body << "&sjt=#{options[:execution_expression].to_s}"
    body << "&dat=#{options[:expiration_type].to_s}"
    body << "&ykd=" << options[:expiration_date].strftime( "%Y%m%d%H" ) if options[:expiration_date] != nil
  else
    # 成り行き
    path = "/ws/fx/nariyukiKessaiChumon.do"
    if ( options[:slippage] != nil )
      raise "if you use a slippage,  options[:slippage_base_rate] is required." if options[:slippage_base_rate] == nil
      body << "&slp=#{options[:slippage].to_s}&gnp=#{options[:slippage_base_rate].to_s}"
    end
  end
  result = @client.post( @base_uri + path, body)
  doc = ClickClient.parse( result.content )
  elms = doc.get_elements("./*/kessaiChumonList/kessaiChumonListItem")
  if ( elms == nil || elms.length <= 0 )
    elms = doc.get_elements("./*/ocoKessaiChumonList/ocoKessaiChumonListItem")
  end
  return SettleResult.new( elms[0] )
end