Class: SBISecuritiesPlugin

Inherits:
Object
  • Object
show all
Includes:
JIJI::Plugin::SecuritiesPlugin
Defined in:
lib/jiji_plugin.rb

Overview

SBI証券アクセスプラグイン

Instance Method Summary collapse

Instance Method Details

#commit(position_id, count) ⇒ Object

建玉を決済します。



78
79
80
# File 'lib/jiji_plugin.rb', line 78

def commit( position_id, count )
  @session.settle( position_id, count )
end

#destroy_pluginObject

プラグインを破棄します。



33
34
35
# File 'lib/jiji_plugin.rb', line 33

def destroy_plugin
  @session.close
end

#display_nameObject

プラグインの表示名を返します。



17
18
19
# File 'lib/jiji_plugin.rb', line 17

def display_name
  "SBI Securities"
end

#init_plugin(props, logger) ⇒ Object

プラグインを初期化します。



29
30
31
# File 'lib/jiji_plugin.rb', line 29

def init_plugin( props, logger ) 
  @session = SBISecuritiesPluginSession.new( props, logger )
end

#input_infosObject

「jiji setting」でユーザーに入力を要求するデータの情報を返します。



21
22
23
24
25
26
# File 'lib/jiji_plugin.rb', line 21

def input_infos
  [ Input.new( :user, "Please input a user name of SBI Securities.", false, nil ),
    Input.new( :password, "Please input a password of SBI Securities.", true, nil ),
    Input.new( :trade_password, "Please input a trade password of SBI Securities.", true, nil ),
    Input.new( :proxy, "Please input a proxy. example: http://example.com:80 (default: nil )", false, nil ) ]
end

#list_pairsObject

利用可能な通貨ペア一覧を取得します。



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/jiji_plugin.rb', line 38

def list_pairs
  return ALL_PAIRS.map {|pair|
    count = 10000
    if pair == SBIClient::FX::MSDJPY  || pair == SBIClient::FX::MURJPY || pair == SBIClient::FX::MBPJPY  || pair == SBIClient::FX::MUDJPY || pair == SBIClient::FX::MZDJPY
        count = 1000 
    elsif pair == SBIClient::FX::ZARJPY 
        count = 100000
    end
    Pair.new( pair, count )
  }
end

#list_ratesObject

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



51
52
53
54
55
56
# File 'lib/jiji_plugin.rb', line 51

def list_rates
  @session.list_rates.inject({}) {|r,p|
      r[p[0]] = Rate.new( p[1].bid_rate, p[1].ask_rate, p[1].sell_swap, p[1].buy_swap )
      r
  }
end

#order(pair, sell_or_buy, count) ⇒ Object

成り行きで発注を行います。



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/jiji_plugin.rb', line 59

def order( pair, sell_or_buy, count )
  
  # 建玉一覧を取得
  before = @session.list_positions.inject( Set.new ) {|s,i| s << i[0]; s }
  # 発注
  @session.order( pair, sell_or_buy == :buy ? SBIClient::FX::BUY : SBIClient::FX::SELL,  count )
  # 建玉を特定
  position = nil
  # 10s待っても取得できなければあきらめる
  20.times {|i|
    sleep 0.5
    position = @session.list_positions.find {|i| !before.include?(i[0]) }
    break if position
  }
  raise "order fialed." unless position
  return JIJI::Plugin::SecuritiesPlugin::Position.new( position[1].position_id )
end

#plugin_idObject

プラグインの識別子を返します。



13
14
15
# File 'lib/jiji_plugin.rb', line 13

def plugin_id
  :sbi_securities
end