clickclient_scrap 0.1.9 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +5 -0
- data/lib/clickclient_scrap.rb +726 -688
- data/lib/jiji_plugin.rb +17 -8
- data/sample/constants.rb +5 -0
- data/sample/sample_get_margin.rb +24 -0
- data/sample/sample_list_open_interests.rb +25 -0
- data/sample/sample_list_orders.rb +28 -0
- data/sample/sample_list_rates.rb +16 -0
- data/sample/sample_market_order.rb +21 -0
- data/sample/sample_oco_order.rb +36 -0
- data/sample/sample_order.rb +64 -0
- data/sample/sample_settle.rb +18 -0
- data/specs/cancel_order_spec.rb +43 -0
- data/specs/common.rb +30 -0
- data/specs/jiji_plugin_spec!.rb +127 -0
- data/specs/limit_order_spec.rb +98 -0
- data/specs/list_orders_spec.rb +28 -0
- data/specs/market_order_spec!.rb +131 -0
- data/specs/oco_order_spec.rb +60 -0
- data/specs/order_error_spec.rb +139 -0
- metadata +27 -6
- data/test/test_FxSession.rb +0 -38
- data/test/test_jiji_plugin.rb +0 -77
    
        data/lib/jiji_plugin.rb
    CHANGED
    
    | @@ -8,24 +8,29 @@ require 'thread' | |
| 8 8 | 
             
            class ClickSecuritiesPlugin
         | 
| 9 9 | 
             
              include JIJI::Plugin::SecuritiesPlugin
         | 
| 10 10 |  | 
| 11 | 
            +
              def initialize( demo=false )
         | 
| 12 | 
            +
                @demo = demo
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
              
         | 
| 11 15 | 
             
              #プラグインの識別子を返します。
         | 
| 12 16 | 
             
              def plugin_id
         | 
| 13 | 
            -
                :click_securities
         | 
| 17 | 
            +
                @demo ? :click_securities_demo : :click_securities
         | 
| 14 18 | 
             
              end
         | 
| 19 | 
            +
              
         | 
| 15 20 | 
             
              #プラグインの表示名を返します。
         | 
| 16 21 | 
             
              def display_name
         | 
| 17 | 
            -
                "CLICK Securities"
         | 
| 22 | 
            +
                @demo ? "CLICK Securities DEMO" : "CLICK Securities"
         | 
| 18 23 | 
             
              end
         | 
| 19 24 | 
             
              #「jiji setting」でユーザーに入力を要求するデータの情報を返します。
         | 
| 20 25 | 
             
              def input_infos
         | 
| 21 | 
            -
                [ Input.new( :user, "Please input a user name of CLICK Securities.", false, nil ),
         | 
| 22 | 
            -
                  Input.new( :password, "Please input a password of CLICK Securities.", true, nil ),
         | 
| 26 | 
            +
                [ Input.new( :user, "Please input a user name of CLICK Securities#{ @demo ? " DEMO" : "" }.", false, nil ),
         | 
| 27 | 
            +
                  Input.new( :password, "Please input a password of CLICK Securities#{ @demo ? " DEMO" : "" }.", true, nil ),
         | 
| 23 28 | 
             
                  Input.new( :proxy, "Please input a proxy. example: http://example.com:80 (default: nil )", false, nil ) ]
         | 
| 24 29 | 
             
              end
         | 
| 25 30 |  | 
| 26 31 | 
             
              #プラグインを初期化します。
         | 
| 27 32 | 
             
              def init_plugin( props, logger ) 
         | 
| 28 | 
            -
                @session = ClickSecuritiesPluginSession.new( props, logger )
         | 
| 33 | 
            +
                @session = ClickSecuritiesPluginSession.new( props, logger, @demo )
         | 
| 29 34 | 
             
              end
         | 
| 30 35 | 
             
              #プラグインを破棄します。
         | 
| 31 36 | 
             
              def destroy_plugin
         | 
| @@ -85,10 +90,11 @@ private | |
| 85 90 | 
             
            end
         | 
| 86 91 |  | 
| 87 92 | 
             
            class ClickSecuritiesPluginSession
         | 
| 88 | 
            -
              def initialize( props, logger ) 
         | 
| 93 | 
            +
              def initialize( props, logger, demo=false ) 
         | 
| 89 94 | 
             
                @props = props
         | 
| 90 95 | 
             
                @logger = logger
         | 
| 91 96 | 
             
                @m = Mutex.new
         | 
| 97 | 
            +
                @demo = demo
         | 
| 92 98 | 
             
              end
         | 
| 93 99 | 
             
              def method_missing( name, *args )
         | 
| 94 100 | 
             
                @m.synchronize { 
         | 
| @@ -117,7 +123,7 @@ class ClickSecuritiesPluginSession | |
| 117 123 | 
             
                  if @props.key?(:proxy) && @props[:proxy] != nil && @props[:proxy].length > 0
         | 
| 118 124 | 
             
                    proxy = @props[:proxy]
         | 
| 119 125 | 
             
                  end
         | 
| 120 | 
            -
                  @client ||= ClickClientScrap::Client.new( proxy )
         | 
| 126 | 
            +
                  @client ||= ClickClientScrap::Client.new( proxy, @demo )
         | 
| 121 127 | 
             
                  @session ||= @client.fx_session( @props[:user], @props[:password] )
         | 
| 122 128 | 
             
                rescue
         | 
| 123 129 | 
             
                  @logger.error $!
         | 
| @@ -130,4 +136,7 @@ end | |
| 130 136 | 
             
            JIJI::Plugin.register( 
         | 
| 131 137 | 
             
              JIJI::Plugin::SecuritiesPlugin::FUTURE_NAME, 
         | 
| 132 138 | 
             
              ClickSecuritiesPlugin.new )
         | 
| 133 | 
            -
             | 
| 139 | 
            +
              
         | 
| 140 | 
            +
            JIJI::Plugin.register( 
         | 
| 141 | 
            +
              JIJI::Plugin::SecuritiesPlugin::FUTURE_NAME, 
         | 
| 142 | 
            +
              ClickSecuritiesPlugin.new( true ) )
         | 
    
        data/sample/constants.rb
    ADDED
    
    
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            $: << "../lib"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'clickclient_scrap'
         | 
| 5 | 
            +
            require 'constants'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # ログイン
         | 
| 8 | 
            +
            c = ClickClientScrap::Client.new
         | 
| 9 | 
            +
            c.fx_session( USER, PASS ) {|session|
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              # 与力を取得
         | 
| 12 | 
            +
              margin = session.get_margin
         | 
| 13 | 
            +
              puts <<-STR
         | 
| 14 | 
            +
            時価評価の総額 : #{margin.market_value}
         | 
| 15 | 
            +
            建玉の評価損益 : #{margin.appraisal_profit_or_loss_of_open_interest}
         | 
| 16 | 
            +
            口座残高 : #{margin.balance_in_account}
         | 
| 17 | 
            +
            証拠金の維持率 : #{margin.guarantee_money_maintenance_ratio}
         | 
| 18 | 
            +
            余力 : #{margin.margin}
         | 
| 19 | 
            +
            拘束されている証拠金 : #{margin.freezed_guarantee_money}
         | 
| 20 | 
            +
            必要な証拠金 : #{margin.required_guarantee_money}
         | 
| 21 | 
            +
            注文中の証拠金 : #{margin.ordered_guarantee_money}
         | 
| 22 | 
            +
            振替可能額  : #{margin.transferable_money_amount}
         | 
| 23 | 
            +
            STR
         | 
| 24 | 
            +
            }
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            $: << "../lib"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'clickclient_scrap'
         | 
| 5 | 
            +
            require 'constants'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # ログイン
         | 
| 8 | 
            +
            c = ClickClientScrap::Client.new
         | 
| 9 | 
            +
            c.fx_session( USER, PASS ) {|session|
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              # 建玉一覧を取得
         | 
| 12 | 
            +
              list = session.list_open_interests
         | 
| 13 | 
            +
              list.each_pair {|k,v|
         | 
| 14 | 
            +
               puts <<-STR
         | 
| 15 | 
            +
            ---
         | 
| 16 | 
            +
            open_interest_id : #{v.open_interest_id} 
         | 
| 17 | 
            +
            sell_or_buy : #{v.sell_or_buy} 
         | 
| 18 | 
            +
            pair : #{v.pair}
         | 
| 19 | 
            +
            count : #{v.count} 
         | 
| 20 | 
            +
            rate : #{v.rate} 
         | 
| 21 | 
            +
            profit or loss : #{v.profit_or_loss}
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            STR
         | 
| 24 | 
            +
              }
         | 
| 25 | 
            +
            }
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            $: << "../lib"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'clickclient_scrap'
         | 
| 5 | 
            +
            require 'constants'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # ログイン
         | 
| 8 | 
            +
            c = ClickClientScrap::Client.new
         | 
| 9 | 
            +
            c.fx_session( USER, PASS ) {|session|
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              # 注文一覧を取得
         | 
| 12 | 
            +
              orders = session.list_orders
         | 
| 13 | 
            +
              orders.each_pair {|k,v|
         | 
| 14 | 
            +
               puts <<-STR
         | 
| 15 | 
            +
            ---
         | 
| 16 | 
            +
            order_no : #{v.order_no} 
         | 
| 17 | 
            +
            trade_type : #{v.trade_type}
         | 
| 18 | 
            +
            order_type : #{v.order_type}
         | 
| 19 | 
            +
            execution_expression : #{v.execution_expression} 
         | 
| 20 | 
            +
            sell_or_buy : #{v.sell_or_buy} 
         | 
| 21 | 
            +
            pair : #{v.pair}
         | 
| 22 | 
            +
            count : #{v.count} 
         | 
| 23 | 
            +
            rate : #{v.rate} 
         | 
| 24 | 
            +
            order_state : #{v.order_state}
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            STR
         | 
| 27 | 
            +
              }
         | 
| 28 | 
            +
            }
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            $: << "../lib"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'clickclient_scrap'
         | 
| 5 | 
            +
            require 'constants'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # ログイン
         | 
| 8 | 
            +
            c = ClickClientScrap::Client.new
         | 
| 9 | 
            +
            c.fx_session( USER, PASS ) {|session|
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              # レート一覧を取得
         | 
| 12 | 
            +
              rates = session.list_rates
         | 
| 13 | 
            +
              rates.each_pair {|k,v|
         | 
| 14 | 
            +
                puts "#{k} : #{v.bid_rate} : #{v.ask_rate} : #{v.sell_swap} : #{v.buy_swap}"
         | 
| 15 | 
            +
              }
         | 
| 16 | 
            +
            }
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            $: << "../lib"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'clickclient_scrap'
         | 
| 5 | 
            +
            require 'constants'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # ログイン
         | 
| 8 | 
            +
            c = ClickClientScrap::Client.new
         | 
| 9 | 
            +
            c.fx_session( USER, PASS ) {|session|
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              #成り行き注文
         | 
| 12 | 
            +
              session.order( ClickClientScrap::FX::USDJPY, ClickClientScrap::FX::BUY, 1)
         | 
| 13 | 
            +
              session.order( ClickClientScrap::FX::USDJPY, ClickClientScrap::FX::SELL, 1)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              # 建玉一覧を取得
         | 
| 16 | 
            +
              list = session.list_open_interests
         | 
| 17 | 
            +
              list.each_pair {|k,v|
         | 
| 18 | 
            +
                # すべて決済
         | 
| 19 | 
            +
                session.settle( v.open_interest_id, v.count )
         | 
| 20 | 
            +
              }
         | 
| 21 | 
            +
            }
         | 
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            $: << "../lib"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'clickclient_scrap'
         | 
| 5 | 
            +
            require 'constants'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # ログイン
         | 
| 8 | 
            +
            c = ClickClientScrap::Client.new
         | 
| 9 | 
            +
            c.fx_session( USER, PASS ) {|session|
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              # レートを取得
         | 
| 12 | 
            +
              rates = session.list_rates
         | 
| 13 | 
            +
              rates.each_pair {|k,v|
         | 
| 14 | 
            +
                puts "#{k} : #{v.bid_rate} : #{v.ask_rate} : #{v.sell_swap} : #{v.buy_swap}"
         | 
| 15 | 
            +
              }
         | 
| 16 | 
            +
              
         | 
| 17 | 
            +
              order_ids = []
         | 
| 18 | 
            +
              
         | 
| 19 | 
            +
              ##OCO注文
         | 
| 20 | 
            +
              order_ids << session.order( ClickClientScrap::FX::EURJPY, ClickClientScrap::FX::BUY, 1, {
         | 
| 21 | 
            +
                :rate=>rates[ClickClientScrap::FX::EURJPY].ask_rate - 0.5, # 指値レート
         | 
| 22 | 
            +
                :stop_order_rate=>rates[ClickClientScrap::FX::EURJPY].ask_rate + 0.5, # 逆指値レート
         | 
| 23 | 
            +
                :execution_expression=>ClickClientScrap::FX::EXECUTION_EXPRESSION_LIMIT_ORDER, # 執行条件: 指値 
         | 
| 24 | 
            +
                :expiration_type=>ClickClientScrap::FX::EXPIRATION_TYPE_TODAY  # 有効期限: 当日限り 
         | 
| 25 | 
            +
              })
         | 
| 26 | 
            +
              order_ids << session.order( ClickClientScrap::FX::EURJPY, ClickClientScrap::FX::SELL, 1, {
         | 
| 27 | 
            +
                :rate=>rates[ClickClientScrap::FX::EURJPY].ask_rate + 0.5, # 指値レート
         | 
| 28 | 
            +
                :stop_order_rate=>rates[ClickClientScrap::FX::EURJPY].ask_rate - 0.5, # 逆指値レート
         | 
| 29 | 
            +
                :execution_expression=>ClickClientScrap::FX::EXECUTION_EXPRESSION_LIMIT_ORDER, # 執行条件: 指値 
         | 
| 30 | 
            +
                :expiration_type=>ClickClientScrap::FX::EXPIRATION_TYPE_SPECIFIED,  # 有効期限: 指定
         | 
| 31 | 
            +
                :expiration_date=>Date.today+2 # 2日後
         | 
| 32 | 
            +
              })
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              # すべての注文をキャンセル
         | 
| 35 | 
            +
              order_ids.each{|id| session.cancel_order(id.order_no) }
         | 
| 36 | 
            +
            }
         | 
| @@ -0,0 +1,64 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            $: << "../lib"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'clickclient_scrap'
         | 
| 5 | 
            +
            require 'constants'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # ログイン
         | 
| 8 | 
            +
            c = ClickClientScrap::Client.new
         | 
| 9 | 
            +
            c.fx_session( USER, PASS ) {|session|
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              # レートを取得
         | 
| 12 | 
            +
              rates = session.list_rates
         | 
| 13 | 
            +
              rates.each_pair {|k,v|
         | 
| 14 | 
            +
                puts "#{k} : #{v.bid_rate} : #{v.ask_rate} : #{v.sell_swap} : #{v.buy_swap}"
         | 
| 15 | 
            +
              }
         | 
| 16 | 
            +
              
         | 
| 17 | 
            +
              order_ids = []
         | 
| 18 | 
            +
              
         | 
| 19 | 
            +
              ## 指値注文
         | 
| 20 | 
            +
              order_ids << session.order( ClickClientScrap::FX::EURJPY, ClickClientScrap::FX::BUY, 1, {
         | 
| 21 | 
            +
                :rate=>rates[ClickClientScrap::FX::EURJPY].ask_rate - 0.5, # 指値レート
         | 
| 22 | 
            +
                :execution_expression=>ClickClientScrap::FX::EXECUTION_EXPRESSION_LIMIT_ORDER, # 執行条件: 指値 
         | 
| 23 | 
            +
                :expiration_type=>ClickClientScrap::FX::EXPIRATION_TYPE_TODAY  # 有効期限: 当日限り 
         | 
| 24 | 
            +
              })
         | 
| 25 | 
            +
              order_ids << session.order( ClickClientScrap::FX::EURJPY, ClickClientScrap::FX::SELL, 1, {
         | 
| 26 | 
            +
                :rate=>rates[ClickClientScrap::FX::EURJPY].ask_rate + 0.5, # 指値レート
         | 
| 27 | 
            +
                :execution_expression=>ClickClientScrap::FX::EXECUTION_EXPRESSION_LIMIT_ORDER, # 執行条件: 指値 
         | 
| 28 | 
            +
                :expiration_type=>ClickClientScrap::FX::EXPIRATION_TYPE_WEEK_END  # 有効期限: 週末まで
         | 
| 29 | 
            +
              })
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              # 逆指値注文
         | 
| 32 | 
            +
              order_ids << session.order( ClickClientScrap::FX::EURJPY, ClickClientScrap::FX::BUY, 1, {
         | 
| 33 | 
            +
                :rate=>rates[ClickClientScrap::FX::EURJPY].ask_rate + 0.5, # 逆指値レート
         | 
| 34 | 
            +
                :execution_expression=>ClickClientScrap::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER, # 執行条件: 逆指値 
         | 
| 35 | 
            +
                :expiration_type=>ClickClientScrap::FX::EXPIRATION_TYPE_INFINITY  # 有効期限: 無限
         | 
| 36 | 
            +
              }) 
         | 
| 37 | 
            +
              order_ids << session.order( ClickClientScrap::FX::EURJPY, ClickClientScrap::FX::SELL, 1, {
         | 
| 38 | 
            +
                :rate=>rates[ClickClientScrap::FX::EURJPY].ask_rate - 0.5, # 逆指値レート
         | 
| 39 | 
            +
                :execution_expression=>ClickClientScrap::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER, # 執行条件: 逆指値 
         | 
| 40 | 
            +
                :expiration_type=>ClickClientScrap::FX::EXPIRATION_TYPE_SPECIFIED,  # 有効期限: 指定
         | 
| 41 | 
            +
                :expiration_date=>Date.today+2 # 2日後
         | 
| 42 | 
            +
              })
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              # 注文一覧を取得
         | 
| 45 | 
            +
              orders = session.list_orders
         | 
| 46 | 
            +
              orders.each_pair {|k,v|
         | 
| 47 | 
            +
               puts <<-STR
         | 
| 48 | 
            +
            ---
         | 
| 49 | 
            +
            order_no : #{v.order_no} 
         | 
| 50 | 
            +
            trade_type : #{v.trade_type}
         | 
| 51 | 
            +
            order_type : #{v.order_type}
         | 
| 52 | 
            +
            execution_expression : #{v.execution_expression} 
         | 
| 53 | 
            +
            sell_or_buy : #{v.sell_or_buy} 
         | 
| 54 | 
            +
            pair : #{v.pair}
         | 
| 55 | 
            +
            count : #{v.count} 
         | 
| 56 | 
            +
            rate : #{v.rate} 
         | 
| 57 | 
            +
            order_state : #{v.order_state}
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            STR
         | 
| 60 | 
            +
              }
         | 
| 61 | 
            +
              
         | 
| 62 | 
            +
              # すべての注文をキャンセル
         | 
| 63 | 
            +
              order_ids.each{|id| session.cancel_order(id.order_no) }
         | 
| 64 | 
            +
            }
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            $: << "../lib"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'clickclient_scrap'
         | 
| 5 | 
            +
            require 'constants'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # ログイン
         | 
| 8 | 
            +
            c = ClickClientScrap::Client.new
         | 
| 9 | 
            +
            c.fx_session( USER, PASS ) {|session|
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              # 建玉一覧を取得
         | 
| 12 | 
            +
              list = session.list_open_interests
         | 
| 13 | 
            +
              list.each_pair {|k,v|
         | 
| 14 | 
            +
                # すべて決済
         | 
| 15 | 
            +
                session.settle( v.open_interest_id, v.count )
         | 
| 16 | 
            +
              }
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
            }
         | 
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            $: << "../lib"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'clickclient_scrap'
         | 
| 4 | 
            +
            require 'common'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            describe "cancel_order" do
         | 
| 7 | 
            +
              include TestBase
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              it "複数のページがあってもキャンセルできる" do
         | 
| 10 | 
            +
                do_test {|s|
         | 
| 11 | 
            +
                  10.times{|i|
         | 
| 12 | 
            +
                    @order_ids << @s.order( ClickClientScrap::FX::USDJPY, ClickClientScrap::FX::BUY, 1, {
         | 
| 13 | 
            +
                      :rate=>@rates[ClickClientScrap::FX::USDJPY].ask_rate - 0.5,
         | 
| 14 | 
            +
                      :execution_expression=>ClickClientScrap::FX::EXECUTION_EXPRESSION_LIMIT_ORDER,
         | 
| 15 | 
            +
                      :expiration_type=>ClickClientScrap::FX::EXPIRATION_TYPE_TODAY
         | 
| 16 | 
            +
                    })
         | 
| 17 | 
            +
                  }
         | 
| 18 | 
            +
                 10.times{|i|
         | 
| 19 | 
            +
                    @order_ids << @s.order( ClickClientScrap::FX::EURJPY, ClickClientScrap::FX::BUY, 1, {
         | 
| 20 | 
            +
                      :rate=>@rates[ClickClientScrap::FX::EURJPY].ask_rate - 0.5, 
         | 
| 21 | 
            +
                      :stop_order_rate=>@rates[ClickClientScrap::FX::EURJPY].ask_rate + 0.5,
         | 
| 22 | 
            +
                      :expiration_type=>ClickClientScrap::FX::EXPIRATION_TYPE_TODAY
         | 
| 23 | 
            +
                    })
         | 
| 24 | 
            +
                  }
         | 
| 25 | 
            +
                  
         | 
| 26 | 
            +
                  # 末尾から消していき、すべて削除できればOK。
         | 
| 27 | 
            +
                  @order_ids.reverse.each {|id| 
         | 
| 28 | 
            +
                    @s.cancel_order(id.order_no)
         | 
| 29 | 
            +
                    @order_ids.pop
         | 
| 30 | 
            +
                  }
         | 
| 31 | 
            +
                  @s.list_orders(ClickClientScrap::FX::ORDER_CONDITION_ON_ORDER).size.should == 0
         | 
| 32 | 
            +
                }
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
              
         | 
| 35 | 
            +
              it "削除対象が存在しない" do
         | 
| 36 | 
            +
                do_test {|s|
         | 
| 37 | 
            +
                  proc {
         | 
| 38 | 
            +
                    @s.cancel_order("not found")
         | 
| 39 | 
            +
                  }.should raise_error( RuntimeError, "illegal order_no. order_no=not found" )
         | 
| 40 | 
            +
                }
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
              
         | 
| 43 | 
            +
            end
         | 
    
        data/specs/common.rb
    ADDED
    
    | @@ -0,0 +1,30 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            # ※「../etc」ディレクトリにuser,passファイルを作成し、
         | 
| 3 | 
            +
            #    ユーザー名,パスワードを設定しておくこと。
         | 
| 4 | 
            +
            USER=IO.read("../etc/user")
         | 
| 5 | 
            +
            PASS=IO.read("../etc/pass")
         | 
| 6 | 
            +
            DEMO_USER=IO.read("../etc/demo_user")
         | 
| 7 | 
            +
            DEMO_PASS=IO.read("../etc/demo_pass")
         | 
| 8 | 
            +
             | 
| 9 | 
            +
             | 
| 10 | 
            +
            # ベース
         | 
| 11 | 
            +
            module TestBase
         | 
| 12 | 
            +
              # 通常/デモのそれぞれのセッションでブロックを実行する。
         | 
| 13 | 
            +
              def do_test 
         | 
| 14 | 
            +
                [{:c=>ClickClientScrap::Client.new, :p=>PASS, :u=>USER },
         | 
| 15 | 
            +
                 {:c=>ClickClientScrap::Client.new(nil, true), :p=>DEMO_PASS, :u=>DEMO_USER }].each {|i| 
         | 
| 16 | 
            +
                  @s = i[:c].fx_session( i[:u], i[:p] )
         | 
| 17 | 
            +
                  @rates = @s.list_rates
         | 
| 18 | 
            +
                  @order_ids = []
         | 
| 19 | 
            +
                  begin
         | 
| 20 | 
            +
                    yield @s
         | 
| 21 | 
            +
                  ensure
         | 
| 22 | 
            +
                    begin 
         | 
| 23 | 
            +
                      @order_ids.each {|order| @s.cancel_order(order.order_no) } if @s
         | 
| 24 | 
            +
                    ensure
         | 
| 25 | 
            +
                      @s.logout if @s 
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                }
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -0,0 +1,127 @@ | |
| 1 | 
            +
            #!/usr/bin/ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            $: << "../lib"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require "rubygems"
         | 
| 6 | 
            +
            require "logger"
         | 
| 7 | 
            +
            require 'clickclient_scrap'
         | 
| 8 | 
            +
            require "common"
         | 
| 9 | 
            +
            require 'jiji/plugin/plugin_loader'
         | 
| 10 | 
            +
            require 'jiji/plugin/securities_plugin'
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            # jijiプラグインのテスト
         | 
| 13 | 
            +
            # ※実際に取引を行うので注意!
         | 
| 14 | 
            +
            describe "market order" do
         | 
| 15 | 
            +
              before(:all) {
         | 
| 16 | 
            +
                # ロード
         | 
| 17 | 
            +
                JIJI::Plugin::Loader.new.load
         | 
| 18 | 
            +
                @logger = Logger.new STDOUT
         | 
| 19 | 
            +
              } 
         | 
| 20 | 
            +
              it "jiji pluginのテスト(DEMO)" do
         | 
| 21 | 
            +
                plugins = JIJI::Plugin.get( JIJI::Plugin::SecuritiesPlugin::FUTURE_NAME )
         | 
| 22 | 
            +
                plugin = plugins.find {|i| i.plugin_id == :click_securities_demo }
         | 
| 23 | 
            +
                
         | 
| 24 | 
            +
                plugin.should_not be_nil
         | 
| 25 | 
            +
                plugin.display_name.should == "CLICK Securities DEMO"
         | 
| 26 | 
            +
                
         | 
| 27 | 
            +
                begin
         | 
| 28 | 
            +
                  plugin.init_plugin( {:user=>DEMO_USER, :password=>DEMO_PASS}, @logger )
         | 
| 29 | 
            +
                  
         | 
| 30 | 
            +
                  # 利用可能な通貨ペア一覧とレート
         | 
| 31 | 
            +
                  pairs = plugin.list_pairs
         | 
| 32 | 
            +
                  rates = plugin.list_rates
         | 
| 33 | 
            +
                  pairs.each {|p|
         | 
| 34 | 
            +
                    # 利用可能とされたペアのレートが取得できていることを確認
         | 
| 35 | 
            +
                    p.name.should_not be_nil
         | 
| 36 | 
            +
                    p.trade_unit.should_not be_nil
         | 
| 37 | 
            +
                    rates[p.name].should_not be_nil
         | 
| 38 | 
            +
                    rates[p.name].bid.should_not be_nil
         | 
| 39 | 
            +
                    rates[p.name].ask.should_not be_nil
         | 
| 40 | 
            +
                    rates[p.name].sell_swap.should_not be_nil
         | 
| 41 | 
            +
                    rates[p.name].buy_swap.should_not be_nil
         | 
| 42 | 
            +
                  }
         | 
| 43 | 
            +
                  sleep 1
         | 
| 44 | 
            +
                  
         | 
| 45 | 
            +
                  3.times {
         | 
| 46 | 
            +
                    rates =  plugin.list_rates
         | 
| 47 | 
            +
                    pairs.each {|p|
         | 
| 48 | 
            +
                      # 利用可能とされたペアのレートが取得できていることを確認
         | 
| 49 | 
            +
                      p.name.should_not be_nil
         | 
| 50 | 
            +
                      p.trade_unit.should_not be_nil
         | 
| 51 | 
            +
                      rates[p.name].should_not be_nil
         | 
| 52 | 
            +
                      rates[p.name].bid.should_not be_nil
         | 
| 53 | 
            +
                      rates[p.name].ask.should_not be_nil
         | 
| 54 | 
            +
                      rates[p.name].sell_swap.should_not be_nil
         | 
| 55 | 
            +
                      rates[p.name].buy_swap.should_not be_nil
         | 
| 56 | 
            +
                    }
         | 
| 57 | 
            +
                    sleep 3
         | 
| 58 | 
            +
                  }
         | 
| 59 | 
            +
                  
         | 
| 60 | 
            +
                  # 売り/買い
         | 
| 61 | 
            +
                  sell = plugin.order( :EURJPY, :sell, 1 )      
         | 
| 62 | 
            +
                  buy  = plugin.order( :EURJPY, :buy, 1 ) 
         | 
| 63 | 
            +
                  sell.position_id.should_not be_nil
         | 
| 64 | 
            +
                  buy.position_id.should_not be_nil
         | 
| 65 | 
            +
                  
         | 
| 66 | 
            +
                  # 約定
         | 
| 67 | 
            +
                  plugin.commit sell.position_id, 1 
         | 
| 68 | 
            +
                  plugin.commit buy.position_id, 1
         | 
| 69 | 
            +
                ensure
         | 
| 70 | 
            +
                  plugin.destroy_plugin
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
              
         | 
| 74 | 
            +
              it "jiji pluginのテスト" do
         | 
| 75 | 
            +
                plugins = JIJI::Plugin.get( JIJI::Plugin::SecuritiesPlugin::FUTURE_NAME )
         | 
| 76 | 
            +
                plugin = plugins.find {|i| i.plugin_id == :click_securities }
         | 
| 77 | 
            +
                
         | 
| 78 | 
            +
                plugin.should_not be_nil
         | 
| 79 | 
            +
                plugin.display_name.should == "CLICK Securities"
         | 
| 80 | 
            +
                
         | 
| 81 | 
            +
                begin
         | 
| 82 | 
            +
                  plugin.init_plugin( {:user=>USER, :password=>PASS}, @logger )
         | 
| 83 | 
            +
                  
         | 
| 84 | 
            +
                  # 利用可能な通貨ペア一覧とレート
         | 
| 85 | 
            +
                  pairs = plugin.list_pairs
         | 
| 86 | 
            +
                  rates = plugin.list_rates
         | 
| 87 | 
            +
                  pairs.each {|p|
         | 
| 88 | 
            +
                    # 利用可能とされたペアのレートが取得できていることを確認
         | 
| 89 | 
            +
                    p.name.should_not be_nil
         | 
| 90 | 
            +
                    p.trade_unit.should_not be_nil
         | 
| 91 | 
            +
                    rates[p.name].should_not be_nil
         | 
| 92 | 
            +
                    rates[p.name].bid.should_not be_nil
         | 
| 93 | 
            +
                    rates[p.name].ask.should_not be_nil
         | 
| 94 | 
            +
                    rates[p.name].sell_swap.should_not be_nil
         | 
| 95 | 
            +
                    rates[p.name].buy_swap.should_not be_nil
         | 
| 96 | 
            +
                  }
         | 
| 97 | 
            +
                  sleep 1
         | 
| 98 | 
            +
                  
         | 
| 99 | 
            +
                  3.times {
         | 
| 100 | 
            +
                    rates =  plugin.list_rates
         | 
| 101 | 
            +
                    pairs.each {|p|
         | 
| 102 | 
            +
                      # 利用可能とされたペアのレートが取得できていることを確認
         | 
| 103 | 
            +
                      p.name.should_not be_nil
         | 
| 104 | 
            +
                      p.trade_unit.should_not be_nil
         | 
| 105 | 
            +
                      rates[p.name].should_not be_nil
         | 
| 106 | 
            +
                      rates[p.name].bid.should_not be_nil
         | 
| 107 | 
            +
                      rates[p.name].ask.should_not be_nil
         | 
| 108 | 
            +
                      rates[p.name].sell_swap.should_not be_nil
         | 
| 109 | 
            +
                      rates[p.name].buy_swap.should_not be_nil
         | 
| 110 | 
            +
                    }
         | 
| 111 | 
            +
                    sleep 3
         | 
| 112 | 
            +
                  }
         | 
| 113 | 
            +
                  
         | 
| 114 | 
            +
                  # 売り/買い
         | 
| 115 | 
            +
                  sell = plugin.order( :EURJPY, :sell, 1 )      
         | 
| 116 | 
            +
                  buy  = plugin.order( :EURJPY, :buy, 1 ) 
         | 
| 117 | 
            +
                  sell.position_id.should_not be_nil
         | 
| 118 | 
            +
                  buy.position_id.should_not be_nil
         | 
| 119 | 
            +
                  
         | 
| 120 | 
            +
                  # 約定
         | 
| 121 | 
            +
                  plugin.commit sell.position_id, 1 
         | 
| 122 | 
            +
                  plugin.commit buy.position_id, 1
         | 
| 123 | 
            +
                ensure
         | 
| 124 | 
            +
                  plugin.destroy_plugin
         | 
| 125 | 
            +
                end
         | 
| 126 | 
            +
              end
         | 
| 127 | 
            +
            end
         |