ib-ruby 0.5.19 → 0.5.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/HISTORY +4 -0
  2. data/TODO +0 -3
  3. data/VERSION +1 -1
  4. data/bin/contract_details +3 -3
  5. data/bin/depth_of_market +1 -1
  6. data/bin/historic_data +5 -8
  7. data/bin/market_data +2 -2
  8. data/bin/option_data +2 -2
  9. data/lib/ib-ruby/connection.rb +1 -9
  10. data/lib/ib-ruby/extensions.rb +8 -0
  11. data/lib/ib-ruby/messages/abstract_message.rb +89 -0
  12. data/lib/ib-ruby/messages/incoming.rb +415 -487
  13. data/lib/ib-ruby/messages/outgoing.rb +241 -305
  14. data/lib/ib-ruby/models/bar.rb +3 -3
  15. data/lib/ib-ruby/models/contract/bag.rb +1 -5
  16. data/lib/ib-ruby/models/contract.rb +50 -33
  17. data/lib/ib-ruby/models/execution.rb +6 -3
  18. data/lib/ib-ruby/models/order.rb +7 -5
  19. data/lib/ib-ruby/socket.rb +13 -0
  20. data/lib/ib-ruby/symbols/forex.rb +7 -14
  21. data/lib/ib-ruby/symbols/futures.rb +16 -20
  22. data/lib/ib-ruby/symbols/options.rb +6 -4
  23. data/lib/ib-ruby/symbols/stocks.rb +1 -1
  24. data/lib/ib-ruby.rb +1 -0
  25. data/spec/README.md +34 -0
  26. data/spec/ib-ruby/connection_spec.rb +4 -4
  27. data/spec/ib-ruby/messages/incoming_spec.rb +50 -0
  28. data/spec/ib-ruby/messages/outgoing_spec.rb +32 -0
  29. data/spec/ib-ruby/models/contract_spec.rb +27 -25
  30. data/spec/ib-ruby/models/order_spec.rb +56 -23
  31. data/spec/integration/account_info_spec.rb +85 -0
  32. data/spec/integration/contract_info_spec.rb +209 -0
  33. data/spec/integration/depth_data_spec.rb +46 -0
  34. data/spec/integration/historic_data_spec.rb +82 -0
  35. data/spec/integration/market_data_spec.rb +97 -0
  36. data/spec/integration/option_data_spec.rb +96 -0
  37. data/spec/integration/orders/execution_spec.rb +135 -0
  38. data/spec/{ib-ruby/messages → integration/orders}/open_order +9 -205
  39. data/spec/integration/orders/placement_spec.rb +150 -0
  40. data/spec/integration/orders/valid_ids_spec.rb +84 -0
  41. data/spec/integration_helper.rb +110 -0
  42. data/spec/message_helper.rb +13 -18
  43. data/spec/spec_helper.rb +35 -26
  44. metadata +33 -17
  45. data/spec/ib-ruby/messages/README.md +0 -16
  46. data/spec/ib-ruby/messages/account_info_spec.rb +0 -84
  47. data/spec/ib-ruby/messages/just_connect_spec.rb +0 -33
  48. data/spec/ib-ruby/messages/market_data_spec.rb +0 -92
  49. data/spec/ib-ruby/messages/orders_spec.rb +0 -219
  50. data/spec/ib-ruby_spec.rb +0 -0
@@ -1,219 +0,0 @@
1
- require 'message_helper'
2
-
3
- describe IB::Messages do
4
-
5
- context "Orders", :connected => true do
6
-
7
- before(:all) do
8
- @eur = IB::Symbols::Forex[:eurusd]
9
- @eur_order = IB::Models::Order.new :total_quantity => 20000,
10
- :limit_price => 1,
11
- :action => 'SELL',
12
- :order_type => 'LMT'
13
- @wfc = IB::Symbols::Stocks[:wfc]
14
- @wfc_order = IB::Models::Order.new :total_quantity => 100,
15
- :action => 'BUY',
16
- :order_type => 'LMT'
17
- end
18
-
19
- context "Placing wrong order" do
20
-
21
- before(:all) do
22
- connect_and_receive :NextValidID, :Alert, :OpenOrder, :OrderStatus
23
- wait_for { received? :NextValidID }
24
-
25
- @wfc_order.limit_price = 9.131313 # Set weird non-acceptable price
26
- @order_id_before = @ib.next_order_id
27
- @order_id_placed = @ib.place_order @wfc_order, @wfc
28
-
29
- wait_for 2
30
- end
31
-
32
- after(:all) do
33
- @ib.cancel_order @order_id_placed # Just in case...
34
- close_connection
35
- end
36
-
37
- it 'does not place new Order' do
38
- @received[:OpenOrder].should be_empty
39
- @received[:OrderStatus].should be_empty
40
- end
41
-
42
- it 'still changes client`s next_order_id' do
43
- @order_id_placed = @order_id_before
44
- @ib.next_order_id.should == @order_id_before + 1
45
- end
46
-
47
- context 'received :Alert message' do
48
- subject { @received[:Alert].last }
49
-
50
- it { should be_an IB::Messages::Incoming::Alert }
51
- it { should be_error }
52
- its(:code) { should be_a Integer }
53
- its(:message) { should =~ /The price does not conform to the minimum price variation for this contract/ }
54
- end
55
-
56
- end # Placing wrong order
57
-
58
- context "Off-market order" do
59
- before(:all) do
60
- connect_and_receive :NextValidID, :Alert, :OpenOrder, :OrderStatus
61
- wait_for { received? :NextValidID }
62
-
63
- @wfc_order.limit_price = 9.13 # Set acceptable price
64
- @order_id_before = @ib.next_order_id
65
- @order_id_placed = @ib.place_order @wfc_order, @wfc
66
-
67
- wait_for(2) { @received[:OpenOrder].size > 1 && @received[:OpenOrder].size > 1 }
68
- end
69
-
70
- after(:all) do
71
- #pp @received[:OpenOrder]
72
- @ib.cancel_order @order_id_placed # Just in case...
73
- close_connection
74
- end
75
-
76
- context "Placing" do
77
-
78
- after(:all) { clean_connection } # Clear logs and message collector
79
-
80
- it 'changes client`s next_order_id' do
81
- @order_id_placed = @order_id_before
82
- @ib.next_order_id.should == @order_id_before + 1
83
- end
84
-
85
- context 'received :OpenOrder messages' do
86
- subject { @received[:OpenOrder] }
87
-
88
- it { should have_at_least(1).message }
89
-
90
- it 'receives (optional) Order confirmation first' do
91
- if subject.size > 1
92
- msg = subject.first
93
- msg.should be_an IB::Messages::Incoming::OpenOrder
94
- msg.contract.should == @wfc
95
- msg.order.should == @wfc_order
96
- msg.order.order_id.should == @order_id_placed
97
- msg.order.status.should == 'PreSubmitted'
98
- else
99
- puts 'Warning: Confirmation was skipped!'
100
- end
101
- end
102
-
103
- it 'receives Order submission then' do
104
- msg = subject.last
105
- msg.should be_an IB::Messages::Incoming::OpenOrder
106
- msg.contract.should == @wfc
107
- msg.order.should == @wfc_order
108
- msg.order.order_id.should == @order_id_placed
109
- msg.order.status.should == 'Submitted'
110
- end
111
- end
112
-
113
- context 'received :OrderStatus messages' do
114
- subject { @received[:OrderStatus] }
115
-
116
- it { should have_at_least(1).message }
117
-
118
- it 'receives (optional) Order confirmation first' do
119
- if subject.size > 1
120
- msg = subject.first
121
- msg.should be_an IB::Messages::Incoming::OrderStatus
122
- msg.id.should == @order_id_placed
123
- msg.perm_id.should be_an Integer
124
- msg.client_id.should == 1111
125
- msg.parent_id.should == 0
126
- #msg.order_id.should == @order_id_placed
127
- msg.status.should == 'PreSubmitted'
128
- msg.filled.should == 0
129
- msg.remaining.should == 100
130
- msg.average_fill_price.should == 0
131
- msg.last_fill_price.should == 0
132
- msg.why_held.should == ''
133
- else
134
- puts 'Warning: Confirmation was skipped!'
135
- end
136
- end
137
-
138
- it 'receives Order submission then' do
139
- msg = subject.last
140
- msg.should be_an IB::Messages::Incoming::OrderStatus
141
- msg.id.should == @order_id_placed
142
- #msg.order_id.should == @order_id_placed
143
- msg.perm_id.should be_an Integer
144
- msg.client_id.should == 1111
145
- msg.parent_id.should == 0
146
- msg.status.should == 'Submitted'
147
- msg.filled.should == 0
148
- msg.remaining.should == 100
149
- msg.average_fill_price.should == 0
150
- msg.last_fill_price.should == 0
151
- msg.why_held.should == ''
152
- end
153
- end
154
- end # Placing
155
-
156
- context "Cancelling placed order" do
157
- before(:all) do
158
- @ib.cancel_order @order_id_placed
159
-
160
- wait_for(2) { received?(:OrderStatus) && received?(:Alert) }
161
- end
162
-
163
- after(:all) { clean_connection } # Clear logs and message collector
164
-
165
- it 'does not increase client`s next_order_id further' do
166
- @ib.next_order_id.should == @order_id_before + 1
167
- end
168
-
169
- it { @received[:OrderStatus].should have_exactly(1).status_message }
170
-
171
- it { @received[:Alert].should have_exactly(1).alert_message }
172
-
173
- it 'receives Order cancellation status' do
174
- msg = @received[:OrderStatus].first
175
- msg.should be_an IB::Messages::Incoming::OrderStatus
176
- msg.id.should == @order_id_placed
177
- #msg.order_id.should == @order_id_placed
178
- msg.perm_id.should be_an Integer
179
- msg.client_id.should == 1111
180
- msg.parent_id.should == 0
181
- msg.status.should == 'Cancelled'
182
- msg.filled.should == 0
183
- msg.remaining.should == 100
184
- msg.average_fill_price.should == 0
185
- msg.last_fill_price.should == 0
186
- msg.why_held.should == ''
187
- end
188
-
189
- it 'receives Order cancelled Alert' do
190
- alert = @received[:Alert].first
191
- alert.should be_an IB::Messages::Incoming::Alert
192
- alert.message.should =~ /Order Canceled - reason:/
193
- end
194
- end # Cancelling
195
-
196
- context "Cancelling wrong order" do
197
- before(:all) do
198
- @ib.cancel_order rand(99999999)
199
-
200
- wait_for(2) { received?(:Alert) }
201
- end
202
-
203
- it { @received[:Alert].should have_exactly(1).alert_message }
204
-
205
- it 'does not increase client`s next_order_id further' do
206
- @ib.next_order_id.should == @order_id_before + 1
207
- end
208
-
209
- it 'receives unable to find Order Alert' do
210
- alert = @received[:Alert].first
211
- alert.should be_an IB::Messages::Incoming::Alert
212
- alert.message.should =~ /Can't find order with id =/
213
- end
214
- end # Cancelling
215
- end # Off-market order
216
-
217
-
218
- end # Orders
219
- end # describe IB::Messages::Incomming
data/spec/ib-ruby_spec.rb DELETED
File without changes