ib-ruby 0.5.0 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -258,7 +258,75 @@ module IB
258
258
  super opts
259
259
  end
260
260
 
261
- def serialize_algo(*args)
261
+ # This returns an Array of data from the given order,
262
+ # mixed with data from associated contract. Ugly mix, indeed.
263
+ def serialize_with contract
264
+ [contract.serialize_long(:sec_id),
265
+ action, # main order fields
266
+ total_quantity,
267
+ order_type,
268
+ limit_price,
269
+ aux_price,
270
+ tif, # xtended order fields
271
+ oca_group,
272
+ account,
273
+ open_close,
274
+ origin,
275
+ order_ref,
276
+ transmit,
277
+ parent_id,
278
+ block_order,
279
+ sweep_to_fill,
280
+ display_size,
281
+ trigger_method,
282
+ outside_rth, # was: ignore_rth
283
+ hidden,
284
+ contract.serialize_combo_legs(:long),
285
+ '', # deprecated shares_allocation field
286
+ discretionary_amount,
287
+ good_after_time,
288
+ good_till_date,
289
+ fa_group,
290
+ fa_method,
291
+ fa_percentage,
292
+ fa_profile,
293
+ short_sale_slot, # 0 only for retail, 1 or 2 for institution (Institutional)
294
+ designated_location, # only populate when short_sale_slot == 2 (Institutional)
295
+ oca_type,
296
+ rule_80a,
297
+ settling_firm,
298
+ all_or_none,
299
+ min_quantity || EOL,
300
+ percent_offset || EOL,
301
+ etrade_only,
302
+ firm_quote_only,
303
+ nbbo_price_cap || EOL,
304
+ auction_strategy || EOL,
305
+ starting_price || EOL,
306
+ stock_ref_price || EOL,
307
+ delta || EOL,
308
+ stock_range_lower || EOL,
309
+ stock_range_upper || EOL,
310
+ override_percentage_constraints,
311
+ volatility || EOL, # Volatility orders
312
+ volatility_type || EOL, # Volatility orders
313
+ delta_neutral_order_type, # Volatility orders
314
+ delta_neutral_aux_price || EOL, # Volatility orders
315
+ continuous_update, # Volatility orders
316
+ reference_price_type || EOL, # Volatility orders
317
+ trail_stop_price || EOL, # TRAIL_STOP_LIMIT stop price
318
+ scale_init_level_size || EOL, # Scale Orders
319
+ scale_subs_level_size || EOL, # Scale Orders
320
+ scale_price_increment || EOL, # Scale Orders
321
+ clearing_account,
322
+ clearing_intent,
323
+ not_held,
324
+ contract.serialize_under_comp,
325
+ serialize_algo,
326
+ what_if]
327
+ end
328
+
329
+ def serialize_algo
262
330
  if algo_strategy.empty? || algo_strategy.nil?
263
331
  ['']
264
332
  else
@@ -9,7 +9,7 @@ module IB
9
9
  end
10
10
 
11
11
  def read_string
12
- str = self.gets(EOL).chop
12
+ self.gets(EOL).chop
13
13
  end
14
14
 
15
15
  def read_int
@@ -10,18 +10,18 @@ module IB
10
10
  Options =
11
11
  {:wfc20 => Models::Contract.new(:symbol => "WFC",
12
12
  :exchange => "SMART",
13
- :expiry => "201110",
13
+ :expiry => "201112",
14
14
  :right => "CALL",
15
15
  :strike => 20.0,
16
16
  :sec_type => SECURITY_TYPES[:option],
17
- :description => "Wells Fargo 20 Call 2011-10"),
17
+ :description => "Wells Fargo 20 Call 2011-12"),
18
18
  :z50 => Models::Contract.new(:symbol => "Z",
19
19
  :exchange => "LIFFE",
20
- :expiry => "201110",
20
+ :expiry => "201112",
21
21
  :right => "CALL",
22
22
  :strike => 50.0,
23
23
  :sec_type => SECURITY_TYPES[:option],
24
- :description => " FTSE-100 index 50 Call 2011-10"),
24
+ :description => " FTSE-100 index 50 Call 2011-12"),
25
25
 
26
26
  }
27
27
  end
@@ -2,56 +2,83 @@ require File.join(File.dirname(__FILE__), %w[.. spec_helper])
2
2
 
3
3
  describe IB::Connection do
4
4
 
5
- context "new" do
6
- context 'connected by default' do
7
- # THIS depends on TWS|Gateway connectivity
8
- before(:all) { @ib = IB::Connection.new }
9
- after(:all) { @ib.close if @ib}
5
+ context 'when connected to IB Gateway', :connected => true do
6
+ # THIS depends on TWS|Gateway connectivity
7
+ before(:all) { @ib = IB::Connection.new }
8
+ after(:all) { @ib.close if @ib }
9
+
10
+ context 'instantiation with default options' do
10
11
  subject { @ib }
11
12
 
12
13
  it { should_not be_nil }
13
14
  it { should be_connected }
14
15
  its (:server) {should be_a Hash}
15
- its (:subscribers) {should have_at_least(1).hash} # :NextValidID and empty Hashes
16
+ its (:server) {should have_key :reader}
17
+ its (:subscribers) {should have_at_least(1).item} # :NextValidID and empty Hashes
16
18
  its (:next_order_id) {should be_a Fixnum} # Not before :NextValidID arrives
17
19
  end
18
20
 
19
- context 'passing :open => false' do
20
- subject { IB::Connection.new :open => false }
21
+ describe '#send_message', 'sending messages' do
22
+ it 'allows 3 signatures representing IB::Messages::Outgoing' do
23
+ expect {
24
+ @ib.send_message :RequestOpenOrders, :subscribe => true
25
+ }.to_not raise_error
21
26
 
22
- it { should_not be_nil }
23
- it { should_not be_connected }
24
- its (:server) {should be_a Hash}
25
- its (:subscribers) {should be_empty}
26
- its (:next_order_id) {should be_nil}
27
+ expect {
28
+ @ib.send_message IB::Messages::Outgoing::RequestOpenOrders, :subscribe => true
29
+ }.to_not raise_error
30
+
31
+ expect {
32
+ @ib.send_message IB::Messages::Outgoing::RequestOpenOrders.new(:subscribe => true)
33
+ }.to_not raise_error
34
+ end
35
+
36
+ it 'has legacy #dispatch alias' do
37
+ expect { @ib.dispatch :RequestOpenOrders, :subscribe => true
38
+ }.to_not raise_error
39
+ end
27
40
  end
28
- end # instantiation
29
41
 
30
- context "subscriptions" do
31
- before(:all) { @ib = IB::Connection.new :open => false}
42
+ context "subscriptions" do
43
+
44
+ it '#subscribe, adds (multiple) subscribers' do
45
+ @subscriber_id = @ib.subscribe(IB::Messages::Incoming::Alert, :AccountValue) do
46
+ puts "oooooooooo"
47
+ end
48
+
49
+ @subscriber_id.should be_a Fixnum
32
50
 
33
- it '#subscribe, adds (multiple) subscribers' do
34
- @subscriber_id = @ib.subscribe(IB::Messages::Incoming::Alert, :AccountValue) do
35
- puts "oooooooooo"
51
+ @ib.subscribers.should have_key(IB::Messages::Incoming::Alert)
52
+ @ib.subscribers.should have_key(IB::Messages::Incoming::AccountValue)
53
+ @ib.subscribers[IB::Messages::Incoming::Alert].should have_key(@subscriber_id)
54
+ @ib.subscribers[IB::Messages::Incoming::AccountValue].should have_key(@subscriber_id)
55
+ @ib.subscribers[IB::Messages::Incoming::Alert][@subscriber_id].should be_a Proc
56
+ @ib.subscribers[IB::Messages::Incoming::AccountValue][@subscriber_id].should be_a Proc
36
57
  end
37
58
 
38
- @subscriber_id.should be_a Fixnum
59
+ it '#unsubscribe, removes all subscribers at this id' do
60
+ @ib.unsubscribe(@subscriber_id)
39
61
 
40
- @ib.subscribers.should have_key(IB::Messages::Incoming::Alert)
41
- @ib.subscribers.should have_key(IB::Messages::Incoming::AccountValue)
42
- @ib.subscribers[IB::Messages::Incoming::Alert].should have_key(@subscriber_id)
43
- @ib.subscribers[IB::Messages::Incoming::AccountValue].should have_key(@subscriber_id)
44
- @ib.subscribers[IB::Messages::Incoming::Alert][@subscriber_id].should be_a Proc
45
- @ib.subscribers[IB::Messages::Incoming::AccountValue][@subscriber_id].should be_a Proc
46
- end
62
+ @ib.subscribers[IB::Messages::Incoming::Alert].should_not have_key(@subscriber_id)
63
+ @ib.subscribers[IB::Messages::Incoming::AccountValue].should_not have_key(@subscriber_id)
64
+ end
47
65
 
48
- it '#unsubscribe, removes all subscribers at this id' do
49
- @ib.unsubscribe(@subscriber_id)
66
+ end # subscriptions
67
+ end # connected
50
68
 
51
- @ib.subscribers[IB::Messages::Incoming::Alert].should_not have_key(@subscriber_id)
52
- @ib.subscribers[IB::Messages::Incoming::AccountValue].should_not have_key(@subscriber_id)
53
- end
69
+ context 'not connected to IB Gateway' do
70
+ before(:all) { @ib = IB::Connection.new :connect => false, :reader => false }
54
71
 
55
- end # subscriptions
72
+ context 'instantiation passing :connect => false' do
73
+ subject { @ib }
74
+
75
+ it { should_not be_nil }
76
+ it { should_not be_connected }
77
+ its (:server) {should be_a Hash}
78
+ its (:server) {should_not have_key :reader}
79
+ its (:subscribers) {should be_empty}
80
+ its (:next_order_id) {should be_nil}
81
+ end
56
82
 
83
+ end # not connected
57
84
  end # describe IB::Connection
@@ -194,12 +194,12 @@ describe IB::Models::Contract do
194
194
  subject { stock = IB::Models::Contract.new properties }
195
195
 
196
196
  it "serializes long" do
197
- subject.serialize(:long).should ==
197
+ subject.serialize_long.should ==
198
198
  ["TEST", IB::SECURITY_TYPES[:stock], "200609", 1234, "PUT", 123, "SMART", nil, "USD", "baz"]
199
199
  end
200
200
 
201
201
  it "serializes short" do
202
- subject.serialize(:short).should ==
202
+ subject.serialize_short.should ==
203
203
  ["TEST", IB::SECURITY_TYPES[:stock], "200609", 1234, "PUT", 123, "SMART", "USD", "baz"]
204
204
  end
205
205
  end #serialization
metadata CHANGED
@@ -2,139 +2,139 @@
2
2
  name: ib-ruby
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.0
5
+ version: 0.5.2
6
6
  platform: ruby
7
7
  authors:
8
- - arvicco
8
+ - arvicco
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-10-29 00:00:00 +04:00
13
+ date: 2011-12-12 00:00:00 -08:00
14
14
  default_executable:
15
15
  dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: bundler
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
20
- none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: 1.0.13
25
- type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
- prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
31
- none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: 2.5.0
36
- type: :development
37
- version_requirements: *id002
16
+ - !ruby/object:Gem::Dependency
17
+ name: bundler
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 1.0.13
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 2.5.0
36
+ type: :development
37
+ version_requirements: *id002
38
38
  description: Ruby Implementation of the Interactive Broker' TWS API
39
39
  email: arvitallian@gmail.com
40
40
  executables:
41
- - account_info
42
- - contract_details
43
- - depth_of_market
44
- - historic_data
45
- - historic_data_cli
46
- - market_data
47
- - option_data
48
- - template
49
- - time_and_sales
41
+ - account_info
42
+ - contract_details
43
+ - depth_of_market
44
+ - historic_data
45
+ - historic_data_cli
46
+ - market_data
47
+ - option_data
48
+ - template
49
+ - time_and_sales
50
50
  extensions: []
51
51
 
52
52
  extra_rdoc_files:
53
- - LICENSE
54
- - HISTORY
55
- - README.rdoc
53
+ - LICENSE
54
+ - HISTORY
55
+ - README.rdoc
56
56
  files:
57
- - bin/account_info
58
- - bin/contract_details
59
- - bin/depth_of_market
60
- - bin/historic_data
61
- - bin/historic_data_cli
62
- - bin/market_data
63
- - bin/option_data
64
- - bin/template
65
- - bin/time_and_sales
66
- - lib/ib-ruby.rb
67
- - lib/version.rb
68
- - lib/ib-ruby/connection.rb
69
- - lib/ib-ruby/constants.rb
70
- - lib/ib-ruby/messages.rb
71
- - lib/ib-ruby/models.rb
72
- - lib/ib-ruby/socket.rb
73
- - lib/ib-ruby/symbols.rb
74
- - lib/ib-ruby/messages/incoming.rb
75
- - lib/ib-ruby/messages/outgoing.rb
76
- - lib/ib-ruby/models/bar.rb
77
- - lib/ib-ruby/models/contract.rb
78
- - lib/ib-ruby/models/execution.rb
79
- - lib/ib-ruby/models/model.rb
80
- - lib/ib-ruby/models/order.rb
81
- - lib/ib-ruby/symbols/forex.rb
82
- - lib/ib-ruby/symbols/futures.rb
83
- - lib/ib-ruby/symbols/options.rb
84
- - lib/ib-ruby/symbols/stocks.rb
85
- - spec/ib-ruby_spec.rb
86
- - spec/spec_helper.rb
87
- - spec/ib-ruby/connection_spec.rb
88
- - spec/ib-ruby/models/contract_spec.rb
89
- - spec/ib-ruby/models/order_spec.rb
90
- - tasks/common.rake
91
- - tasks/doc.rake
92
- - tasks/gem.rake
93
- - tasks/git.rake
94
- - tasks/spec.rake
95
- - tasks/version.rake
96
- - Rakefile
97
- - README.rdoc
98
- - LICENSE
99
- - VERSION
100
- - HISTORY
101
- - .gitignore
57
+ - bin/account_info
58
+ - bin/contract_details
59
+ - bin/depth_of_market
60
+ - bin/historic_data
61
+ - bin/historic_data_cli
62
+ - bin/market_data
63
+ - bin/option_data
64
+ - bin/template
65
+ - bin/time_and_sales
66
+ - lib/ib-ruby/connection.rb
67
+ - lib/ib-ruby/constants.rb
68
+ - lib/ib-ruby/messages/incoming.rb
69
+ - lib/ib-ruby/messages/outgoing.rb
70
+ - lib/ib-ruby/messages.rb
71
+ - lib/ib-ruby/models/bar.rb
72
+ - lib/ib-ruby/models/contract.rb
73
+ - lib/ib-ruby/models/execution.rb
74
+ - lib/ib-ruby/models/model.rb
75
+ - lib/ib-ruby/models/order.rb
76
+ - lib/ib-ruby/models.rb
77
+ - lib/ib-ruby/socket.rb
78
+ - lib/ib-ruby/symbols/forex.rb
79
+ - lib/ib-ruby/symbols/futures.rb
80
+ - lib/ib-ruby/symbols/options.rb
81
+ - lib/ib-ruby/symbols/stocks.rb
82
+ - lib/ib-ruby/symbols.rb
83
+ - lib/ib-ruby.rb
84
+ - lib/version.rb
85
+ - spec/ib-ruby/connection_spec.rb
86
+ - spec/ib-ruby/models/contract_spec.rb
87
+ - spec/ib-ruby/models/order_spec.rb
88
+ - spec/ib-ruby_spec.rb
89
+ - spec/spec_helper.rb
90
+ - tasks/common.rake
91
+ - tasks/doc.rake
92
+ - tasks/gem.rake
93
+ - tasks/git.rake
94
+ - tasks/spec.rake
95
+ - tasks/version.rake
96
+ - Rakefile
97
+ - README.rdoc
98
+ - LICENSE
99
+ - VERSION
100
+ - HISTORY
101
+ - .gitignore
102
102
  has_rdoc: true
103
103
  homepage: http://github.com/arvicco/ib-ruby
104
104
  licenses: []
105
105
 
106
106
  post_install_message:
107
107
  rdoc_options:
108
- - --charset
109
- - UTF-8
110
- - --main
111
- - README.rdoc
112
- - --title
113
- - mix
108
+ - --charset
109
+ - UTF-8
110
+ - --main
111
+ - README.rdoc
112
+ - --title
113
+ - mix
114
114
  require_paths:
115
- - lib
115
+ - lib
116
116
  required_ruby_version: !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
- - - ">="
120
- - !ruby/object:Gem::Version
121
- version: "0"
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: "0"
122
122
  required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  none: false
124
124
  requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- version: "0"
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: "0"
128
128
  requirements: []
129
129
 
130
130
  rubyforge_project:
131
- rubygems_version: 1.5.1
131
+ rubygems_version: 1.6.2
132
132
  signing_key:
133
133
  specification_version: 3
134
134
  summary: Ruby Implementation of the Interactive Broker' TWS API
135
135
  test_files:
136
- - spec/ib-ruby_spec.rb
137
- - spec/spec_helper.rb
138
- - spec/ib-ruby/connection_spec.rb
139
- - spec/ib-ruby/models/contract_spec.rb
140
- - spec/ib-ruby/models/order_spec.rb
136
+ - spec/ib-ruby/connection_spec.rb
137
+ - spec/ib-ruby/models/contract_spec.rb
138
+ - spec/ib-ruby/models/order_spec.rb
139
+ - spec/ib-ruby_spec.rb
140
+ - spec/spec_helper.rb