ib-ruby 0.5.13 → 0.5.14
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +4 -0
- data/VERSION +1 -1
- data/bin/global_cancel +0 -0
- data/bin/historic_data +4 -8
- data/bin/list_orders +0 -0
- data/bin/place_order +0 -0
- data/lib/ib-ruby/connection.rb +1 -1
- data/lib/ib-ruby/constants.rb +16 -2
- data/lib/ib-ruby/logger.rb +11 -6
- data/lib/ib-ruby/messages/incoming.rb +2 -2
- data/lib/ib-ruby/messages/outgoing.rb +13 -2
- data/lib/ib-ruby/models/order.rb +66 -6
- metadata +119 -109
data/HISTORY
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.14
|
data/bin/global_cancel
CHANGED
File without changes
|
data/bin/historic_data
CHANGED
@@ -10,9 +10,6 @@ require 'rubygems'
|
|
10
10
|
require 'bundler/setup'
|
11
11
|
require 'ib-ruby'
|
12
12
|
|
13
|
-
### Configurable Options
|
14
|
-
QUIET = false # if Quiet == false, status data will be printed to STDERR
|
15
|
-
|
16
13
|
# Definition of what we want data for. We have to keep track of what ticker id
|
17
14
|
# corresponds to what symbol ourselves, because the ticks don't include any other
|
18
15
|
# identifying information. The choice of ticker ids is, as far as I can tell, arbitrary.
|
@@ -34,14 +31,13 @@ ib.subscribe(:Alert) { |msg| puts msg.to_human }
|
|
34
31
|
# Note that we have to look the ticker id of each incoming message
|
35
32
|
# up in local memory to figure out what it's for.
|
36
33
|
ib.subscribe(IB::Messages::Incoming::HistoricalData) do |msg|
|
37
|
-
|
38
|
-
msg.data[:count].to_s + " items:"
|
34
|
+
puts @market[msg.data[:id]].description + ": " +
|
35
|
+
msg.data[:count].to_s + " items:"
|
39
36
|
|
40
37
|
msg.data[:results].each do |datum|
|
41
|
-
|
42
|
-
|
43
|
-
STDERR.puts " " + datum.to_s unless QUIET
|
38
|
+
puts " " + datum.to_s
|
44
39
|
end
|
40
|
+
@last_msg_time = Time.now.to_i
|
45
41
|
end
|
46
42
|
|
47
43
|
# Now we actually request historical data for the symbols we're interested in. TWS will
|
data/bin/list_orders
CHANGED
File without changes
|
data/bin/place_order
CHANGED
File without changes
|
data/lib/ib-ruby/connection.rb
CHANGED
@@ -129,7 +129,7 @@ module IB
|
|
129
129
|
subscriber_id
|
130
130
|
end
|
131
131
|
|
132
|
-
# Remove all subscribers with specific subscriber id
|
132
|
+
# Remove all subscribers with specific subscriber id (TODO: multiple ids)
|
133
133
|
def unsubscribe(subscriber_id)
|
134
134
|
|
135
135
|
subscribers.each do |message_class, message_subscribers|
|
data/lib/ib-ruby/constants.rb
CHANGED
@@ -14,7 +14,21 @@ module IB
|
|
14
14
|
'15 mins', '30 mins', '1 hour', '1 day']
|
15
15
|
|
16
16
|
# Enumeration of data types
|
17
|
-
DATA_TYPES = [:trades,
|
17
|
+
DATA_TYPES = [:trades,
|
18
|
+
:midpoint,
|
19
|
+
:bid,
|
20
|
+
:ask
|
21
|
+
#Determines the nature of data being extracted. Valid values:
|
22
|
+
# � TRADES
|
23
|
+
#� MIDPOINT
|
24
|
+
#� BID
|
25
|
+
#� ASK
|
26
|
+
#� BID_ASK
|
27
|
+
#� HISTORICAL_VOLATILITY
|
28
|
+
#� OPTION_IMPLIED_VOLATILITY
|
29
|
+
#� OPTION_VOLUME
|
30
|
+
#� OPTION_OPEN_INTEREST
|
31
|
+
]
|
18
32
|
|
19
33
|
# Valid security types (sec_type attribute of IB::Contract)
|
20
34
|
SECURITY_TYPES = {:stock => "STK",
|
@@ -79,7 +93,7 @@ module IB
|
|
79
93
|
48 => :rt_volume, # tickGeneric()
|
80
94
|
49 => :halted, # see Note 2 below.
|
81
95
|
50 => :bid_yield, # tickPrice() See Note 3 below
|
82
|
-
51 => :
|
96
|
+
51 => :ask_yield, # tickPrice() See Note 3 below
|
83
97
|
52 => :last_yield, # tickPrice() See Note 3 below
|
84
98
|
53 => :cust_option_computation, # tickOptionComputation()
|
85
99
|
54 => :trade_count, # tickGeneric()
|
data/lib/ib-ruby/logger.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
require "logger"
|
2
2
|
|
3
|
-
#
|
4
|
-
def log
|
5
|
-
@@
|
6
|
-
|
7
|
-
"#{time.strftime('%
|
3
|
+
# Add universally accessible log method/accessor into Object
|
4
|
+
def log *args
|
5
|
+
@@logger ||= Logger.new(STDOUT).tap do |logger|
|
6
|
+
logger.formatter = proc do |level, time, prog, msg|
|
7
|
+
"#{time.strftime('%H:%M:%S.%3N')} #{msg}\n"
|
8
8
|
end
|
9
|
-
|
9
|
+
logger.level = Logger::INFO
|
10
|
+
end
|
11
|
+
|
12
|
+
@@logger.tap do |logger|
|
13
|
+
logger.fatal *args unless args.empty?
|
10
14
|
end
|
11
15
|
end
|
12
16
|
|
@@ -20,3 +24,4 @@ end
|
|
20
24
|
|
21
25
|
|
22
26
|
|
27
|
+
|
@@ -551,8 +551,8 @@ module IB
|
|
551
551
|
[:market_price, :decimal],
|
552
552
|
[:market_value, :decimal],
|
553
553
|
[:average_cost, :decimal],
|
554
|
-
[:unrealized_pnl, :decimal],
|
555
|
-
[:realized_pnl, :decimal],
|
554
|
+
[:unrealized_pnl, :decimal], # TODO: Check for Double.MAX_VALUE
|
555
|
+
[:realized_pnl, :decimal], # TODO: Check for Double.MAX_VALUE
|
556
556
|
[:account_name, :string]
|
557
557
|
end
|
558
558
|
|
@@ -209,7 +209,7 @@ module IB
|
|
209
209
|
|
210
210
|
# @data={:id => int: ticker_id - Must be a unique value. When the market data
|
211
211
|
# returns, it will be identified by this tag,
|
212
|
-
# :contract =>
|
212
|
+
# :contract => Models::Contract, requested contract.
|
213
213
|
# :tick_list => String: comma delimited list of requested tick groups:
|
214
214
|
# Group ID - Description - Requested Tick Types
|
215
215
|
# 100 - Option Volume (currently for stocks) - 29, 30
|
@@ -277,7 +277,18 @@ module IB
|
|
277
277
|
# '30 min'
|
278
278
|
# '1 hour'
|
279
279
|
# '1 day'
|
280
|
-
# :what_to_show => Symbol:
|
280
|
+
# :what_to_show => Symbol:
|
281
|
+
# Determines the nature of data being extracted. Valid values:
|
282
|
+
#one of :trades, :midpoint, :bid, or :ask -
|
283
|
+
# � TRADES
|
284
|
+
#� MIDPOINT
|
285
|
+
#� BID
|
286
|
+
#� ASK
|
287
|
+
#� BID_ASK
|
288
|
+
#� HISTORICAL_VOLATILITY
|
289
|
+
#� OPTION_IMPLIED_VOLATILITY
|
290
|
+
#� OPTION_VOLUME
|
291
|
+
#� OPTION_OPEN_INTEREST
|
281
292
|
# converts to "TRADES," "MIDPOINT," "BID," or "ASK."
|
282
293
|
# :use_rth => int: 0 - all data available during the time span requested
|
283
294
|
# is returned, even data bars covering time intervals where the
|
data/lib/ib-ruby/models/order.rb
CHANGED
@@ -50,22 +50,67 @@ module IB
|
|
50
50
|
:client_id, # int: The id of the client that placed this order.
|
51
51
|
:perm_id, # int: TWS id used to identify orders, remains
|
52
52
|
# the same over TWS sessions.
|
53
|
-
:action, #
|
53
|
+
:action, # String: Identifies the side: BUY/SELL/SSHORT
|
54
54
|
:total_quantity, # int: The order quantity.
|
55
|
+
|
55
56
|
:order_type, # String: Identifies the order type. Valid values are:
|
56
|
-
#
|
57
|
-
#
|
57
|
+
# Limit Risk:
|
58
|
+
# MTL Market-to-Limit
|
59
|
+
# MKT PRT Market with Protection
|
60
|
+
# QUOTE Request for Quote
|
61
|
+
# STP Stop
|
62
|
+
# STP LMT Stop Limit
|
63
|
+
# TRAIL Trailing Stop
|
64
|
+
# TRAIL LIMIT Trailing Stop Limit
|
65
|
+
# TRAIL LIT Trailing Limit if Touched
|
66
|
+
# TRAIL MIT Trailing Market If Touched
|
67
|
+
# Speed of Execution:
|
68
|
+
# MKT Market
|
69
|
+
# MIT Market-if-Touched
|
70
|
+
# MOC Market-on-Close MKTCLSL ?
|
71
|
+
# MOO Market-on-Open
|
72
|
+
# PEG MKT Pegged-to-Market
|
73
|
+
# REL Relative
|
74
|
+
# Price Improvement:
|
75
|
+
# BOX TOP Box Top
|
76
|
+
# LOC Limit-on-Close LMTCLS ?
|
77
|
+
# LOO Limit-on-Open
|
78
|
+
# LIT Limit if Touched
|
79
|
+
# PEG MID Pegged-to-Midpoint
|
80
|
+
# VWAP VWAP-Guaranteed
|
81
|
+
# Advanced Trading:
|
82
|
+
# OCA One-Cancels-All
|
83
|
+
# VOL Volatility
|
84
|
+
# SCALE Scale
|
85
|
+
# Other (no abbreviation):
|
86
|
+
# Bracket
|
87
|
+
# At Auction
|
88
|
+
# Discretionary
|
89
|
+
# Sweep-to-Fill
|
90
|
+
# Price Improvement Auction
|
91
|
+
# Block
|
92
|
+
# Hidden
|
93
|
+
# Iceberg/Reserve
|
94
|
+
# All-or-None
|
95
|
+
# Fill-or-Kill
|
96
|
+
|
58
97
|
:limit_price, # double: This is the LIMIT price, used for limit,
|
59
98
|
# stop-limit and relative orders. In all other cases
|
60
99
|
# specify zero. For relative orders with no limit price,
|
61
100
|
# also specify zero.
|
101
|
+
|
62
102
|
:aux_price, # double: This is the STOP price for stop-limit orders,
|
63
103
|
# and the offset amount for relative orders. In all other
|
64
104
|
# cases, specify zero.
|
65
105
|
#:shares_allocation, # deprecated sharesAllocation field
|
66
106
|
|
67
107
|
# Extended order fields
|
68
|
-
:tif, # String: Time
|
108
|
+
:tif, # String: Time to Market:
|
109
|
+
# DAY
|
110
|
+
# GAT Good-after-Time/Date
|
111
|
+
# GTD Good-till-Date/Time
|
112
|
+
# GTC Good-till-Canceled
|
113
|
+
# IOC Immediate-or-Cancel
|
69
114
|
:oca_group, # String: one cancels all group name
|
70
115
|
:oca_type, # int: Tells how to handle remaining orders in an OCA group
|
71
116
|
# when one order or part of an order executes. Valid values:
|
@@ -249,6 +294,21 @@ module IB
|
|
249
294
|
|
250
295
|
:warning_text # String: Displays a warning message if warranted.
|
251
296
|
|
297
|
+
# IB uses weird String with Java Double.MAX_VALUE to indicate no value here
|
298
|
+
def init_margin= val
|
299
|
+
@init_margin = val == "1.7976931348623157E308" ? nil : val
|
300
|
+
end
|
301
|
+
|
302
|
+
# IB uses weird String with Java Double.MAX_VALUE to indicate no value here
|
303
|
+
def maint_margin= val
|
304
|
+
@maint_margin = val == "1.7976931348623157E308" ? nil : val
|
305
|
+
end
|
306
|
+
|
307
|
+
# IB uses weird String with Java Double.MAX_VALUE to indicate no value here
|
308
|
+
def equity_with_loan= val
|
309
|
+
@equity_with_loan = val == "1.7976931348623157E308" ? nil : val
|
310
|
+
end
|
311
|
+
|
252
312
|
def initialize opts = {}
|
253
313
|
# Assign defaults first!
|
254
314
|
@outside_rth = false
|
@@ -377,8 +437,8 @@ module IB
|
|
377
437
|
end
|
378
438
|
|
379
439
|
def to_human
|
380
|
-
"<Order: #{
|
381
|
-
" #{
|
440
|
+
"<Order: #{order_type} #{tif} #{action} #{total_quantity} #{status} #{limit_price}" +
|
441
|
+
" id: #{id}/#{perm_id} from: #{client_id}/#{account}>"
|
382
442
|
end
|
383
443
|
end # class Order
|
384
444
|
end # module Models
|
metadata
CHANGED
@@ -2,116 +2,125 @@
|
|
2
2
|
name: ib-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.5.
|
5
|
+
version: 0.5.14
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
- Paul Legato
|
9
|
-
- arvicco
|
8
|
+
- Paul Legato
|
9
|
+
- arvicco
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2012-01-
|
15
|
-
default_executable:
|
14
|
+
date: 2012-01-28 00:00:00 Z
|
16
15
|
dependencies:
|
17
|
-
- !ruby/object:Gem::Dependency
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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.20
|
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
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: my_scripts
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
39
49
|
description: Ruby Implementation of the Interactive Brokers TWS API
|
40
50
|
email:
|
41
|
-
- pjlegato@gmail.com
|
42
|
-
- arvitallian@gmail.com
|
51
|
+
- pjlegato@gmail.com
|
52
|
+
- arvitallian@gmail.com
|
43
53
|
executables:
|
44
|
-
- account_info
|
45
|
-
- contract_details
|
46
|
-
- depth_of_market
|
47
|
-
- global_cancel
|
48
|
-
- historic_data
|
49
|
-
- historic_data_cli
|
50
|
-
- list_orders
|
51
|
-
- market_data
|
52
|
-
- option_data
|
53
|
-
- place_order
|
54
|
-
- template
|
55
|
-
- time_and_sales
|
54
|
+
- account_info
|
55
|
+
- contract_details
|
56
|
+
- depth_of_market
|
57
|
+
- global_cancel
|
58
|
+
- historic_data
|
59
|
+
- historic_data_cli
|
60
|
+
- list_orders
|
61
|
+
- market_data
|
62
|
+
- option_data
|
63
|
+
- place_order
|
64
|
+
- template
|
65
|
+
- time_and_sales
|
56
66
|
extensions: []
|
57
67
|
|
58
68
|
extra_rdoc_files: []
|
59
69
|
|
60
70
|
files:
|
61
|
-
- bin/account_info
|
62
|
-
- bin/contract_details
|
63
|
-
- bin/depth_of_market
|
64
|
-
- bin/global_cancel
|
65
|
-
- bin/historic_data
|
66
|
-
- bin/historic_data_cli
|
67
|
-
- bin/list_orders
|
68
|
-
- bin/market_data
|
69
|
-
- bin/option_data
|
70
|
-
- bin/place_order
|
71
|
-
- bin/template
|
72
|
-
- bin/time_and_sales
|
73
|
-
- lib/ib-ruby
|
74
|
-
- lib/ib-ruby/
|
75
|
-
- lib/ib-ruby/
|
76
|
-
- lib/ib-ruby/
|
77
|
-
- lib/ib-ruby/messages
|
78
|
-
- lib/ib-ruby/
|
79
|
-
- lib/ib-ruby/
|
80
|
-
- lib/ib-ruby/
|
81
|
-
- lib/ib-ruby/
|
82
|
-
- lib/ib-ruby/
|
83
|
-
- lib/ib-ruby/
|
84
|
-
- lib/ib-ruby/models/
|
85
|
-
- lib/ib-ruby/models/
|
86
|
-
- lib/ib-ruby/models/
|
87
|
-
- lib/ib-ruby/models.rb
|
88
|
-
- lib/ib-ruby/
|
89
|
-
- lib/ib-ruby/
|
90
|
-
- lib/ib-ruby/
|
91
|
-
- lib/ib-ruby/
|
92
|
-
- lib/ib-ruby/symbols/
|
93
|
-
- lib/ib-ruby/symbols.rb
|
94
|
-
- lib/ib-ruby/
|
95
|
-
- lib/ib-ruby.rb
|
96
|
-
- spec/ib-
|
97
|
-
- spec/
|
98
|
-
- spec/ib-ruby/
|
99
|
-
- spec/ib-ruby/models/
|
100
|
-
- spec/ib-
|
101
|
-
- spec/
|
102
|
-
- tasks/common.rake
|
103
|
-
- tasks/doc.rake
|
104
|
-
- tasks/gem.rake
|
105
|
-
- tasks/git.rake
|
106
|
-
- tasks/spec.rake
|
107
|
-
- tasks/version.rake
|
108
|
-
- Rakefile
|
109
|
-
- README.md
|
110
|
-
- LICENSE
|
111
|
-
- VERSION
|
112
|
-
- HISTORY
|
113
|
-
- .gitignore
|
114
|
-
has_rdoc: true
|
71
|
+
- bin/account_info
|
72
|
+
- bin/contract_details
|
73
|
+
- bin/depth_of_market
|
74
|
+
- bin/global_cancel
|
75
|
+
- bin/historic_data
|
76
|
+
- bin/historic_data_cli
|
77
|
+
- bin/list_orders
|
78
|
+
- bin/market_data
|
79
|
+
- bin/option_data
|
80
|
+
- bin/place_order
|
81
|
+
- bin/template
|
82
|
+
- bin/time_and_sales
|
83
|
+
- lib/ib-ruby.rb
|
84
|
+
- lib/ib-ruby/connection.rb
|
85
|
+
- lib/ib-ruby/constants.rb
|
86
|
+
- lib/ib-ruby/logger.rb
|
87
|
+
- lib/ib-ruby/messages.rb
|
88
|
+
- lib/ib-ruby/models.rb
|
89
|
+
- lib/ib-ruby/socket.rb
|
90
|
+
- lib/ib-ruby/symbols.rb
|
91
|
+
- lib/ib-ruby/version.rb
|
92
|
+
- lib/ib-ruby/messages/incoming.rb
|
93
|
+
- lib/ib-ruby/messages/outgoing.rb
|
94
|
+
- lib/ib-ruby/models/bar.rb
|
95
|
+
- lib/ib-ruby/models/combo_leg.rb
|
96
|
+
- lib/ib-ruby/models/contract.rb
|
97
|
+
- lib/ib-ruby/models/execution.rb
|
98
|
+
- lib/ib-ruby/models/model.rb
|
99
|
+
- lib/ib-ruby/models/order.rb
|
100
|
+
- lib/ib-ruby/models/contract/bag.rb
|
101
|
+
- lib/ib-ruby/models/contract/option.rb
|
102
|
+
- lib/ib-ruby/symbols/forex.rb
|
103
|
+
- lib/ib-ruby/symbols/futures.rb
|
104
|
+
- lib/ib-ruby/symbols/options.rb
|
105
|
+
- lib/ib-ruby/symbols/stocks.rb
|
106
|
+
- spec/ib-ruby_spec.rb
|
107
|
+
- spec/spec_helper.rb
|
108
|
+
- spec/ib-ruby/connection_spec.rb
|
109
|
+
- spec/ib-ruby/models/combo_leg_spec.rb
|
110
|
+
- spec/ib-ruby/models/contract_spec.rb
|
111
|
+
- spec/ib-ruby/models/order_spec.rb
|
112
|
+
- tasks/common.rake
|
113
|
+
- tasks/doc.rake
|
114
|
+
- tasks/gem.rake
|
115
|
+
- tasks/git.rake
|
116
|
+
- tasks/spec.rake
|
117
|
+
- tasks/version.rake
|
118
|
+
- Rakefile
|
119
|
+
- README.md
|
120
|
+
- LICENSE
|
121
|
+
- VERSION
|
122
|
+
- HISTORY
|
123
|
+
- .gitignore
|
115
124
|
homepage: https://github.com/pjlegato/ib-ruby
|
116
125
|
licenses: []
|
117
126
|
|
@@ -119,30 +128,31 @@ post_install_message:
|
|
119
128
|
rdoc_options: []
|
120
129
|
|
121
130
|
require_paths:
|
122
|
-
- lib
|
131
|
+
- lib
|
123
132
|
required_ruby_version: !ruby/object:Gem::Requirement
|
124
133
|
none: false
|
125
134
|
requirements:
|
126
|
-
|
127
|
-
|
128
|
-
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: "0"
|
129
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
139
|
none: false
|
131
140
|
requirements:
|
132
|
-
|
133
|
-
|
134
|
-
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: "0"
|
135
144
|
requirements: []
|
136
145
|
|
137
146
|
rubyforge_project:
|
138
|
-
rubygems_version: 1.
|
147
|
+
rubygems_version: 1.8.15
|
139
148
|
signing_key:
|
140
149
|
specification_version: 3
|
141
150
|
summary: Ruby Implementation of the Interactive Brokers TWS API
|
142
151
|
test_files:
|
143
|
-
- spec/ib-
|
144
|
-
- spec/
|
145
|
-
- spec/ib-ruby/
|
146
|
-
- spec/ib-ruby/models/
|
147
|
-
- spec/ib-
|
148
|
-
- spec/
|
152
|
+
- spec/ib-ruby_spec.rb
|
153
|
+
- spec/spec_helper.rb
|
154
|
+
- spec/ib-ruby/connection_spec.rb
|
155
|
+
- spec/ib-ruby/models/combo_leg_spec.rb
|
156
|
+
- spec/ib-ruby/models/contract_spec.rb
|
157
|
+
- spec/ib-ruby/models/order_spec.rb
|
158
|
+
has_rdoc:
|