ib-api 972.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +50 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +16 -0
  7. data/Gemfile.lock +105 -0
  8. data/Guardfile +24 -0
  9. data/LICENSE +674 -0
  10. data/README.md +65 -0
  11. data/Rakefile +11 -0
  12. data/VERSION +1 -0
  13. data/api.gemspec +43 -0
  14. data/bin/console +95 -0
  15. data/bin/console.yml +3 -0
  16. data/bin/setup +8 -0
  17. data/changelog.md +7 -0
  18. data/example/README.md +76 -0
  19. data/example/account_info +54 -0
  20. data/example/account_positions +30 -0
  21. data/example/account_summary +88 -0
  22. data/example/cancel_orders +74 -0
  23. data/example/fa_accounts +25 -0
  24. data/example/fundamental_data +40 -0
  25. data/example/historic_data_cli +186 -0
  26. data/example/list_orders +45 -0
  27. data/example/portfolio_csv +81 -0
  28. data/example/scanner_data +62 -0
  29. data/example/template +19 -0
  30. data/example/tick_data +28 -0
  31. data/lib/extensions/class-extensions.rb +87 -0
  32. data/lib/ib-api.rb +7 -0
  33. data/lib/ib/base.rb +103 -0
  34. data/lib/ib/base_properties.rb +160 -0
  35. data/lib/ib/connection.rb +450 -0
  36. data/lib/ib/constants.rb +393 -0
  37. data/lib/ib/errors.rb +44 -0
  38. data/lib/ib/logger.rb +26 -0
  39. data/lib/ib/messages.rb +99 -0
  40. data/lib/ib/messages/abstract_message.rb +101 -0
  41. data/lib/ib/messages/incoming.rb +251 -0
  42. data/lib/ib/messages/incoming/abstract_message.rb +116 -0
  43. data/lib/ib/messages/incoming/account_value.rb +78 -0
  44. data/lib/ib/messages/incoming/alert.rb +34 -0
  45. data/lib/ib/messages/incoming/contract_data.rb +102 -0
  46. data/lib/ib/messages/incoming/delta_neutral_validation.rb +23 -0
  47. data/lib/ib/messages/incoming/execution_data.rb +50 -0
  48. data/lib/ib/messages/incoming/historical_data.rb +84 -0
  49. data/lib/ib/messages/incoming/market_depths.rb +44 -0
  50. data/lib/ib/messages/incoming/next_valid_id.rb +18 -0
  51. data/lib/ib/messages/incoming/open_order.rb +277 -0
  52. data/lib/ib/messages/incoming/order_status.rb +85 -0
  53. data/lib/ib/messages/incoming/portfolio_value.rb +78 -0
  54. data/lib/ib/messages/incoming/real_time_bar.rb +32 -0
  55. data/lib/ib/messages/incoming/scanner_data.rb +54 -0
  56. data/lib/ib/messages/incoming/ticks.rb +268 -0
  57. data/lib/ib/messages/outgoing.rb +437 -0
  58. data/lib/ib/messages/outgoing/abstract_message.rb +88 -0
  59. data/lib/ib/messages/outgoing/account_requests.rb +112 -0
  60. data/lib/ib/messages/outgoing/bar_requests.rb +250 -0
  61. data/lib/ib/messages/outgoing/place_order.rb +209 -0
  62. data/lib/ib/messages/outgoing/request_marketdata.rb +99 -0
  63. data/lib/ib/messages/outgoing/request_tick_data.rb +21 -0
  64. data/lib/ib/model.rb +4 -0
  65. data/lib/ib/models.rb +14 -0
  66. data/lib/ib/server_versions.rb +114 -0
  67. data/lib/ib/socket.rb +185 -0
  68. data/lib/ib/support.rb +160 -0
  69. data/lib/ib/version.rb +6 -0
  70. data/lib/models/ib/account.rb +85 -0
  71. data/lib/models/ib/account_value.rb +33 -0
  72. data/lib/models/ib/bag.rb +55 -0
  73. data/lib/models/ib/bar.rb +31 -0
  74. data/lib/models/ib/combo_leg.rb +105 -0
  75. data/lib/models/ib/condition.rb +245 -0
  76. data/lib/models/ib/contract.rb +415 -0
  77. data/lib/models/ib/contract_detail.rb +108 -0
  78. data/lib/models/ib/execution.rb +67 -0
  79. data/lib/models/ib/forex.rb +13 -0
  80. data/lib/models/ib/future.rb +15 -0
  81. data/lib/models/ib/index.rb +15 -0
  82. data/lib/models/ib/option.rb +78 -0
  83. data/lib/models/ib/option_detail.rb +55 -0
  84. data/lib/models/ib/order.rb +519 -0
  85. data/lib/models/ib/order_state.rb +152 -0
  86. data/lib/models/ib/portfolio_value.rb +64 -0
  87. data/lib/models/ib/stock.rb +16 -0
  88. data/lib/models/ib/underlying.rb +34 -0
  89. data/lib/models/ib/vertical.rb +96 -0
  90. data/lib/requires.rb +12 -0
  91. metadata +203 -0
@@ -0,0 +1,152 @@
1
+ module IB
2
+
3
+ # OrderState represents dynamic (changeable) info about a single Order,
4
+ # isolating these changes and making Order essentially immutable
5
+ class OrderState < IB::Model
6
+ include BaseProperties
7
+
8
+ #p column_names
9
+ belongs_to :order
10
+
11
+ # Properties arriving via OpenOrder message
12
+ prop :init_margin, # Float: The impact the order would have on your initial margin.
13
+ :maint_margin, # Float: The impact the order would have on your maintenance margin.
14
+ :equity_with_loan, # Float: The impact the order would have on your equity
15
+ :commission, # double: Shows the commission amount on the order.
16
+ :min_commission, # The possible min range of the actual order commission.
17
+ :max_commission, # The possible max range of the actual order commission.
18
+ :commission_currency, # String: Shows the currency of the commission.
19
+ :warning_text, # String: Displays a warning message if warranted.
20
+
21
+ :market_cap_price # messages#incomming#orderstae#vers. 11
22
+
23
+ # Properties arriving via OrderStatus message:
24
+ prop :filled, # int
25
+ :remaining, # int
26
+ [:price, :last_fill_price,], # double
27
+ [:average_price, :average_fill_price], # double
28
+ :why_held # String: comma-separated list of reasons for order to be held.
29
+
30
+ # Properties arriving in both messages:
31
+ prop :local_id, # int: Order id associated with client (volatile).
32
+ :perm_id, # int: TWS permanent id, remains the same over TWS sessions.
33
+ :client_id, # int: The id of the client that placed this order.
34
+ :parent_id, # int: The order ID of the parent (original) order, used
35
+ :status => :s # String: one of
36
+ # ApiCancelled, PreSubmitted, PendingCancel, Cancelled, Submitted, Filled,
37
+ # Inactive, PendingSubmit, Unknown, ApiPending,
38
+ #
39
+ # Displays the order status. Possible values include:
40
+ # - PendingSubmit - indicates that you have transmitted the order, but
41
+ # have not yet received confirmation that it has been accepted by the
42
+ # order destination. NOTE: This order status is NOT sent back by TWS
43
+ # and should be explicitly set by YOU when an order is submitted.
44
+ # - PendingCancel - indicates that you have sent a request to cancel
45
+ # the order but have not yet received cancel confirmation from the
46
+ # order destination. At this point, your order cancel is not confirmed.
47
+ # You may still receive an execution while your cancellation request
48
+ # is pending. NOTE: This order status is not sent back by TWS and
49
+ # should be explicitly set by YOU when an order is canceled.
50
+ # - PreSubmitted - indicates that a simulated order type has been
51
+ # accepted by the IB system and that this order has yet to be elected.
52
+ # The order is held in the IB system until the election criteria are
53
+ # met. At that time the order is transmitted to the order destination
54
+ # as specified.
55
+ # - Submitted - indicates that your order has been accepted at the order
56
+ # destination and is working.
57
+ # - Cancelled - indicates that the balance of your order has been
58
+ # confirmed canceled by the IB system. This could occur unexpectedly
59
+ # when IB or the destination has rejected your order.
60
+ # - ApiCancelled - canceled via API
61
+ # - Filled - indicates that the order has been completely filled.
62
+ # - Inactive - indicates that the order has been accepted by the system
63
+ # (simulated orders) or an exchange (native orders) but that currently
64
+ # the order is inactive due to system, exchange or other issues.
65
+ #
66
+
67
+ validates_format_of :status, :without => /\A\z/, :message => 'must not be empty'
68
+ validates_numericality_of :price, :average_price, :allow_nil => true
69
+ validates_numericality_of :local_id, :perm_id, :client_id, :parent_id, :filled,
70
+ :remaining, :only_integer => true, :allow_nil => true
71
+
72
+ def self.valid_status? the_message
73
+ valid_stati = %w( ApiCancelled PreSubmitted PendingCancel Cancelled Submitted Filled
74
+ Inactive PendingSubmit Unknown ApiPending)
75
+ valid_stati.include?( the_message )
76
+ end
77
+
78
+ ## Testing Order state:
79
+
80
+ def new?
81
+ status.empty? || status == 'New'
82
+ end
83
+
84
+ # Order is in a valid, working state on TWS side
85
+ def submitted?
86
+ status =~ /Submit/
87
+ end
88
+
89
+ # Order is in a valid, working state on TWS side
90
+ def pending?
91
+ submitted? || status =~ /Pending/
92
+ end
93
+
94
+ # Order is in invalid state
95
+ def inactive?
96
+ new? || pending? || status =~ /Cancel/
97
+ end
98
+
99
+ def active?
100
+ !inactive? # status == 'Inactive'
101
+ end
102
+
103
+ def complete_fill?
104
+ status == 'Filled' && remaining == 0 # filled >= total_quantity # Manually corrected
105
+ end
106
+
107
+ # Comparison
108
+ def == other
109
+
110
+ super(other) ||
111
+ other.is_a?(self.class) &&
112
+ status == other.status &&
113
+ local_id == other.local_id &&
114
+ perm_id == other.perm_id &&
115
+ client_id == other.client_id &&
116
+ filled == other.filled &&
117
+ remaining == other.remaining &&
118
+ last_fill_price == other.last_fill_price &&
119
+ init_margin == other.init_margin &&
120
+ maint_margin == other.maint_margin &&
121
+ equity_with_loan == other.equity_with_loan &&
122
+ why_held == other.why_held &&
123
+ warning_text == other.warning_text &&
124
+ commission == other.commission
125
+ end
126
+
127
+ def to_human
128
+ "<OrderState: #{status} ##{local_id}/#{perm_id} from #{client_id}" +
129
+ (filled ? " filled #{filled}/#{remaining}" : '') +
130
+ (last_fill_price ? " at #{last_fill_price}/#{average_fill_price}" : '') +
131
+ (init_margin ? " margin #{init_margin}/#{maint_margin}" : '') +
132
+ (equity_with_loan ? " equity #{equity_with_loan}" : '') +
133
+ (commission && commission > 0 ? " fee #{commission}" : "") +
134
+ (why_held ? " why_held #{why_held}" : '') +
135
+ ((warning_text && warning_text != '') ? " warning #{warning_text}" : '') + ">"
136
+ end
137
+
138
+ alias to_s to_human
139
+ =begin
140
+ If an Order is submitted with the :what_if-Flag set, commission and margin are returned
141
+ via the order_state-Object.
142
+ =end
143
+ def forcast
144
+ { :init_margin => init_margin,
145
+ :maint_margin => maint_margin,
146
+ :equity_with_loan => equity_with_loan ,
147
+ :commission => commission,
148
+ :commission_currency=> commission_currency,
149
+ :warning => warning_text }
150
+ end
151
+ end # class Order
152
+ end # module IB
@@ -0,0 +1,64 @@
1
+ module IB
2
+ class PortfolioValue < IB::Model
3
+ include BaseProperties
4
+ # belongs_to :currency
5
+ belongs_to :account
6
+ belongs_to :contract
7
+
8
+ # scope :single, ->(key) { where :schluessel => key } rescue nil
9
+
10
+ prop :position,
11
+ :market_price,
12
+ :market_value,
13
+ :average_cost,
14
+ :unrealized_pnl,
15
+ :realized_pnl
16
+
17
+
18
+ # Order comparison
19
+ def == other
20
+ super(other) ||
21
+ other.is_a?(self.class) &&
22
+ market_price == other.market_price &&
23
+ average_cost == other.average_cost &&
24
+ position == other.position &&
25
+ unrealized_pnl == other.unrealized_pnl &&
26
+ realized_pnl == other.realized_pnl &&
27
+ contract == other.contract
28
+ end
29
+ def to_human
30
+ the_account = if account.present?
31
+ if account.is_a?(String)
32
+ account + " "
33
+ else
34
+ account.account+" "
35
+ end
36
+ else
37
+ ""
38
+ end
39
+
40
+ "<PortfolioValue: "+
41
+ the_account +
42
+ "Pos=#{ position.to_i } @ #{market_price.to_f.round(3)};" +
43
+ "Value=#{market_value.to_f.round(2)};PNL=" +
44
+ ( unrealized_pnl.to_i.zero? ? "": "#{unrealized_pnl} unrealized;") +
45
+ ( realized_pnl.to_i.zero? ? "" : "#{realized_pnl} realized;>" ) +
46
+ contract.to_human
47
+ end
48
+ alias to_s to_human
49
+
50
+
51
+ # def to_invest
52
+ # a=attributes
53
+ # a.delete "created_at"
54
+ # a.delete "updated_at"
55
+ # a.delete "id"
56
+ # a.delete "account_id"
57
+ # a.delete "currency_id"
58
+ # a[:currency] = currency.symbol.presence || currency.name.presence || nil unless currency.nil?
59
+ # a #return_value
60
+ #
61
+ #
62
+ # end
63
+ end # class
64
+ end # module
@@ -0,0 +1,16 @@
1
+ require_relative 'contract'
2
+ module IB
3
+ class Stock < IB::Contract
4
+ validates_format_of :sec_type, :with => /\Astock\z/,
5
+ :message => "should be a Stock"
6
+ def default_attributes
7
+ super.merge :sec_type => :stock, currency:'USD', exchange:'SMART'
8
+ end
9
+
10
+ def to_human
11
+ att = [ symbol, currency, ( exchange == 'SMART' ? nil: exchange ), (primary_exchange.present? && !primary_exchange.empty? ? primary_exchange : nil)].compact
12
+ "<Stock: " + att.join(" ") + ">"
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,34 @@
1
+ module IB
2
+
3
+ # Calculated characteristics of underlying Contract (volatile)
4
+ class Underlying < IB::Model
5
+ include BaseProperties
6
+
7
+ has_one :contract
8
+
9
+ prop :con_id, # Id of the Underlying Contract
10
+ :delta, # double: The underlying stock or future delta.
11
+ :price # double: The price of the underlying.
12
+
13
+ validates_numericality_of :con_id, :delta, :price #, :allow_nil => true
14
+
15
+ def default_attributes
16
+ super.merge :con_id => 0
17
+ end
18
+
19
+ # Serialize under_comp parameters
20
+ def serialize
21
+ [true, con_id, delta, price]
22
+ end
23
+
24
+ # Comparison
25
+ def == other
26
+ super(other) ||
27
+ other.is_a?(self.class) &&
28
+ con_id == other.con_id && delta == other.delta && price == other.price
29
+ end
30
+
31
+ end # class Underlying
32
+ UnderComp = Underlying
33
+
34
+ end # module IB
@@ -0,0 +1,96 @@
1
+ require_relative 'contract'
2
+
3
+
4
+ module IB
5
+ class Vertical < Spread
6
+
7
+ =begin
8
+ Macro-Class to simplify the definition of Vertical-Spreads
9
+
10
+ Initialize with
11
+
12
+ calendar = IB::Vertical.new underlying: Symbols::Index.stoxx,
13
+ buy: 3000, sell: 2900, right: :put
14
+ expiry: 201901, back: 291903
15
+ or
16
+
17
+ master = IB::Option.new symbol: :Estx50, right: :put, multiplier: 10, exchange: 'DTB', currency: 'EUR'
18
+ strike: 3000, expiry: 201812
19
+ calendar = IB::Vertical.new sell: master, buy: 3100
20
+
21
+ =end
22
+
23
+
24
+
25
+ def initialize master=nil, # provides strike, front-month, right, trading-class
26
+ underlying: nil,
27
+ right: :put,
28
+ expiry: IB::Symbols::Futures.next_expiry,
29
+ buy: 0 , # has to be specified
30
+ sell: 0,
31
+ # trading_class: nil,
32
+ **args # trading-class and others
33
+
34
+ master_option, side, msg = if master.present?
35
+ if master.is_a?(IB::Option)
36
+ [ master.essential,-1, nil ]
37
+ else
38
+ [ nil, 0,"First Argument is no IB::Option" ]
39
+ end
40
+ elsif buy.is_a?(IB::Option) && !sell.zero?
41
+ [ buy.essentail,1, nil ]
42
+ elsif sell.is_a?(IB::Option) && !buy.zero?
43
+ [ sell.essential, -1, nil ]
44
+ elsif underlying.present?
45
+ if underlying.is_a?(IB::Contract)
46
+ master = IB::Option.new underlying.attributes.slice( :currency, :symbol, :exchange ).merge(args)
47
+ master.sec_type = 'FOP' if underlying.is_a?(IB::Future)
48
+ master.strike, master.expiry, master.right = buy, expiry, right
49
+ [master, 1, buy.to_i >0 && sell.to_i >0 ? nil : "buy and sell strikes have to be specified"]
50
+ else
51
+ [nil, 0, "Underlying has to be an IB::Contract"]
52
+ end
53
+ else
54
+ [ nil, 0, "Required parameters: Master-Option or Underlying, buy and sell-strikes" ]
55
+ end
56
+
57
+ error msg, :args, nil if msg.present?
58
+ master_option.trading_class = args[:trading_class] if args[:trading_class].present?
59
+ l=[] ; master_option.verify{|x| x.contract_detail = nil; l << x }
60
+ if l.empty?
61
+ error "Invalid Parameters. No Contract found #{master_option.to_human}"
62
+ elsif l.size > 2
63
+ Connection.logger.error "ambigous contract-specification: #{l.map(&:to_human).join(';')}"
64
+ available_trading_classes = l.map( &:trading_class ).uniq
65
+ if available_trading_classes.size >1
66
+ error "Refine Specification with trading_class: #{available_trading_classes.join('; ')} (details in log)"
67
+ else
68
+ error "Respecify expiry, verification reveals #{l.size} contracts (only 2 are allowed) #{master_option.to_human}"
69
+ end
70
+ end
71
+
72
+ master_option.strike = side ==1 ? sell : buy
73
+ master_option.verify{|x| x.contract_detail = nil; l << x }
74
+ error "Two legs are required, \n Verifiying the master-option exposed #{l.size} legs" unless l.size ==2
75
+
76
+ master_option.exchange ||= l.first.exchange
77
+ master_option.currency ||= l.first.currency
78
+
79
+ # i=0 + side = -1 --> -1 sell
80
+ # i=0 + side = 1 --> 1 buy
81
+ # i=1 + side = -1 --> 0 buy
82
+ # i.1 + side = 1 --> 2 sell
83
+ c_l = l.map.with_index{ |l,i| ComboLeg.new con_id: l.con_id, action: i+side ==2 || i+side <0 ? :sell : :buy , exchange: l.exchange, ratio: 1 }
84
+
85
+ super exchange: master_option.exchange,
86
+ symbol: master_option.symbol.to_s,
87
+ currency: master_option.currency,
88
+ legs: l,
89
+ combo_legs: c_l
90
+ end
91
+ def to_human
92
+ x= [ combo_legs.map(&:weight) , legs.map( &:strike )].transpose
93
+ "<Vertical #{symbol} #{legs.first.right}(#{x.map{|w,strike| "#{w} :#{strike} "}.join( '|+|' )} )[#{Date.parse(legs.first.last_trading_day).strftime("%b %Y")}]>"
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,12 @@
1
+ require 'active_support/core_ext/module/attribute_accessors.rb'
2
+ require 'extensions/class-extensions'
3
+
4
+
5
+ require 'ib/version'
6
+ require 'ib/errors'
7
+ require 'ib/constants'
8
+ require 'ib/connection'
9
+
10
+ require 'ib/models'
11
+ require 'ib/messages'
12
+
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ib-api
3
+ version: !ruby/object:Gem::Version
4
+ version: '972.0'
5
+ platform: ruby
6
+ authors:
7
+ - Hartmut Bischoff
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-10-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '6.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '6.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activemodel
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Ruby Implementation of the Interactive Brokers TWS API
84
+ email:
85
+ - topofocus@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".travis.yml"
93
+ - CODE_OF_CONDUCT.md
94
+ - Gemfile
95
+ - Gemfile.lock
96
+ - Guardfile
97
+ - LICENSE
98
+ - README.md
99
+ - Rakefile
100
+ - VERSION
101
+ - api.gemspec
102
+ - bin/console
103
+ - bin/console.yml
104
+ - bin/setup
105
+ - changelog.md
106
+ - example/README.md
107
+ - example/account_info
108
+ - example/account_positions
109
+ - example/account_summary
110
+ - example/cancel_orders
111
+ - example/fa_accounts
112
+ - example/fundamental_data
113
+ - example/historic_data_cli
114
+ - example/list_orders
115
+ - example/portfolio_csv
116
+ - example/scanner_data
117
+ - example/template
118
+ - example/tick_data
119
+ - lib/extensions/class-extensions.rb
120
+ - lib/ib-api.rb
121
+ - lib/ib/base.rb
122
+ - lib/ib/base_properties.rb
123
+ - lib/ib/connection.rb
124
+ - lib/ib/constants.rb
125
+ - lib/ib/errors.rb
126
+ - lib/ib/logger.rb
127
+ - lib/ib/messages.rb
128
+ - lib/ib/messages/abstract_message.rb
129
+ - lib/ib/messages/incoming.rb
130
+ - lib/ib/messages/incoming/abstract_message.rb
131
+ - lib/ib/messages/incoming/account_value.rb
132
+ - lib/ib/messages/incoming/alert.rb
133
+ - lib/ib/messages/incoming/contract_data.rb
134
+ - lib/ib/messages/incoming/delta_neutral_validation.rb
135
+ - lib/ib/messages/incoming/execution_data.rb
136
+ - lib/ib/messages/incoming/historical_data.rb
137
+ - lib/ib/messages/incoming/market_depths.rb
138
+ - lib/ib/messages/incoming/next_valid_id.rb
139
+ - lib/ib/messages/incoming/open_order.rb
140
+ - lib/ib/messages/incoming/order_status.rb
141
+ - lib/ib/messages/incoming/portfolio_value.rb
142
+ - lib/ib/messages/incoming/real_time_bar.rb
143
+ - lib/ib/messages/incoming/scanner_data.rb
144
+ - lib/ib/messages/incoming/ticks.rb
145
+ - lib/ib/messages/outgoing.rb
146
+ - lib/ib/messages/outgoing/abstract_message.rb
147
+ - lib/ib/messages/outgoing/account_requests.rb
148
+ - lib/ib/messages/outgoing/bar_requests.rb
149
+ - lib/ib/messages/outgoing/place_order.rb
150
+ - lib/ib/messages/outgoing/request_marketdata.rb
151
+ - lib/ib/messages/outgoing/request_tick_data.rb
152
+ - lib/ib/model.rb
153
+ - lib/ib/models.rb
154
+ - lib/ib/server_versions.rb
155
+ - lib/ib/socket.rb
156
+ - lib/ib/support.rb
157
+ - lib/ib/version.rb
158
+ - lib/models/ib/account.rb
159
+ - lib/models/ib/account_value.rb
160
+ - lib/models/ib/bag.rb
161
+ - lib/models/ib/bar.rb
162
+ - lib/models/ib/combo_leg.rb
163
+ - lib/models/ib/condition.rb
164
+ - lib/models/ib/contract.rb
165
+ - lib/models/ib/contract_detail.rb
166
+ - lib/models/ib/execution.rb
167
+ - lib/models/ib/forex.rb
168
+ - lib/models/ib/future.rb
169
+ - lib/models/ib/index.rb
170
+ - lib/models/ib/option.rb
171
+ - lib/models/ib/option_detail.rb
172
+ - lib/models/ib/order.rb
173
+ - lib/models/ib/order_state.rb
174
+ - lib/models/ib/portfolio_value.rb
175
+ - lib/models/ib/stock.rb
176
+ - lib/models/ib/underlying.rb
177
+ - lib/models/ib/vertical.rb
178
+ - lib/requires.rb
179
+ homepage: https://github.com/ib-ruby
180
+ licenses: []
181
+ metadata:
182
+ homepage_uri: https://github.com/ib-ruby
183
+ source_code_uri: https://github.com/ib-ruby/ib-api
184
+ post_install_message:
185
+ rdoc_options: []
186
+ require_paths:
187
+ - lib
188
+ required_ruby_version: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ requirements: []
199
+ rubygems_version: 3.0.4
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: Ruby Implementation of the Interactive Brokers TWS API
203
+ test_files: []