ib-symbols 1.3 → 1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 783f7b8ef15bf87574fbf9f8f10a0e1f45ce5fd62ea4613d0b2c06d05f5773db
4
- data.tar.gz: 27a437d6c07ec60828a6153eb343a02f44a71e9801b6be49d0bb1b8c13c25a40
3
+ metadata.gz: 3d1bc9c86251e8f43c4459fbeb43235be7321bd250b62cea5313efb666065a51
4
+ data.tar.gz: 35f69664c447f09ce44914f3ea959f0ced46df15b1569e365f14dd9fc6796075
5
5
  SHA512:
6
- metadata.gz: 8f3bf5c3953c26a0b2d4526e77310c598ae2ad1ab20a87a2e5b46b9449fa4f04184797b793b833edcb8b7bce3698177623790fb57ee439bdb836fb1c10863c20
7
- data.tar.gz: 3bd3a8fc68924ad4eb645b952d085397367566e79185070ad0c57fca6b20648c5aa7efe7d01a37ef30ce97e6c64c6030b7e0b3a0856bae32a084fa0f54373f40
6
+ metadata.gz: '058b8b0bcc0d4de69ba2ae7a647dd2347b7c3425374b603641427b8f68d410a6fa37b4247be9eb2cd59c5856bfeebb042d426936393e6b5e3f4f8971ca9a166b'
7
+ data.tar.gz: 742fec12dabf7f6c6f85649fd738e42edd86b9e87faf8488e0904cd8043cb5815e55e5c012c1c41aacede24faf519c7c280d2bff9c6265e56819713bb91a4e5f
data/README.md CHANGED
@@ -5,10 +5,7 @@ __Documentation: [https://ib-ruby.github.io/ib-doc/](https://ib-ruby.github.io/i
5
5
 
6
6
  __Questions, Contributions, Remarks: [Discussions are opened in ib-api](https://github.com/ib-ruby/ib-api/discussions)__
7
7
 
8
- __Note: In July 2022 IB changed the exchange for german (and swiss) assets to »EUREX«.__ (Version 1.2)
9
-
10
8
  ---
11
-
12
9
  __Predefined symbols and watchlists for contracts__
13
10
 
14
11
  To activate use
@@ -25,6 +22,42 @@ in your script
25
22
 
26
23
  ---
27
24
 
25
+ ## Handy Templates
26
+
27
+ `IB::Symbols::Index`, `IB::Symbols::Futures` and `IB::Symbols::Options` contain most popular contracts.
28
+
29
+ To list the predefined contracts use
30
+ ```ruby
31
+ Symbols::Options.all.each{|y| puts [y,Symbols::Options.send(y).to_human].join( "\t")}
32
+ aapl <Option: AAPL 202303 call 130.0 SMART USD>
33
+ ge <Option: GE 202303 call 7.0 SMART USD>
34
+ goog100 <Option: GOOG 202303 call 100.0 USD>
35
+ ibm <Option: IBM 202303 put 0.0 SMART >
36
+ ibm_lazy_expiry <Option: IBM put 140.0 SMART >
37
+ ibm_lazy_strike <Option: IBM 202303 put 0.0 SMART >
38
+ ...
39
+
40
+ Symbols::Futures.all.each{|y| puts [y ,Symbols::Futures.send(y).verify.to_human].join "\t" }
41
+ dax <Future: DAX 20230317 EUR>
42
+ es <Future: ES 20230317 USD>
43
+ eur <Future: EUR 20230313 USD>
44
+ gbp <Future: GBP 20230313 USD>
45
+ hsi <Future: HSI 20230330 HKD>
46
+ jpy <Future: JPY 20230313 USD>
47
+ ...
48
+
49
+ ```
50
+ The expiry is set to the next monthly or quaterly option/future expiration date. Most options are defined
51
+ without a strike. To specify a »real« contract use the merge method:
52
+
53
+ ```ruby
54
+ stoxx_option = IB::Symbols::Option.stoxx.merge( expiry: 202306, strike: 3950, right: :call )
55
+ ```
56
+
57
+
58
+ ## Watchlists
59
+
60
+
28
61
  The GUI-Version of the TWS organizes symbols in different pages (Watchlists).
29
62
 
30
63
  **`IB-Ruby`** uses the same concept to organize and optimize operational issues and to support research and systematic trading efforts. The lists are organized as `Enumerator`, which extents its use. This feature lives entirely in the filesystem, no database is required, no further dependency is involved.
@@ -38,7 +71,7 @@ By default, Watchlists reside in the `symbols`-directory of `ib-symbols`. This c
38
71
  ```
39
72
 
40
73
 
41
- ## Symbol Collections
74
+ ### Symbol Collections
42
75
  Everything is kept elementary simple: Collections are stored as editable files. The format is YAML.
43
76
 
44
77
  The CRUD Cycle
@@ -62,46 +95,8 @@ head :012 > IB::Symbols::Demo.all
62
95
  => []
63
96
  ```
64
97
 
65
- ## Predefined Collections
66
98
 
67
- Most popular `Stocks`, `Options`, `Futures`, `Indices` and `Forex-pairs` are hard-coded.
68
- ```ruby
69
- > IB::Symbols::Index.all
70
- => [:a_d, :asx, :dax, :hsi, :minihsi, :spx, :stoxx, :tick, :trin, :vasx, :vdax, :vhsi, :vix, :volume, :vstoxx]
71
- > puts IB::Symbols::Index.contracts.values &.to_human
72
- <Index: DAX EUR (DAX Performance Index.) >
73
- <Index: AP AUD (ASX 200 Index) >
74
- <Index: HSI HKD (Hang Seng Index) >
75
- (...)
76
- <Index: AD-NYSE (NYSE Advance Decline Index) >
77
-
78
- > Symbols::Forex.eurusd.to_human
79
- => "<Contract: EUR forex IDEALPRO USD>"
80
- # this contract is valid and can be verified, but the opposide is not supported by IB
81
- > Symbols::Forex.usdeur.verify
82
- TWS Error 200: No security definition has been found for the request
83
- Not a valid Contract :: <Contract: USD forex IDEALPRO EUR>
84
99
  ```
85
100
 
86
- ## Pattern based Contract retrieval
87
-
88
- To specify a specific Option can be a boaring job.
89
- You might spend hours searching for a simple error, like a forgotten `:currency` oder `:exchange` entry.
90
-
91
- Symbol-Collections can be used as template for everyday searches.
92
-
93
- > Example: Customize a Index-Option with quaterly expiry.
94
- >
95
- > The hard coded `Symbols::Options.stoxx` template ensures the retrieval of only one option.
96
- > A simple merge with customized attributes returns a fully qualified ContractRecord.
97
-
98
-
99
- ```ruby
100
- > IB::Symbols.Options.stoxx.to_human
101
- => "<Option: ESTX50 202012 put 3000.0 DTB EUR>"
102
- > Symbols::Options.stoxx.merge( strike: 3300, right: :call).to_human
103
- => "<Option: ESTX50 202012 call 3300.0 DTB EUR>"
104
-
105
- ```
106
101
 
107
102
 
@@ -8,41 +8,41 @@ module IB
8
8
  def self.contracts
9
9
 
10
10
  @contracts ||= { #super.merge(
11
- stoxx_straddle: IB::Straddle.build( from: IB::Symbols::Index.stoxx, strike: 3000,
12
- expiry: IB::Symbols::Futures.next_expiry, trading_class: 'OESX') ,
13
- stoxx_calendar: IB::Calendar.build( from: IB::Symbols::Index.stoxx, strike: 3000, back: '2m' ,
14
- front: IB::Symbols::Futures.next_expiry, trading_class: 'OESX'),
15
- stoxx_butterfly: IB::Butterfly.fabricate( Symbols::Options.stoxx.merge( strike: 3300), front: 3250, back: 3350 ),
16
- stoxx_vertical: IB::Vertical.build( from: IB::Symbols::Index.stoxx, sell: 3000, buy: 3500, right: :put,
17
- expiry: IB::Symbols::Futures.next_expiry, trading_class: 'OESX'),
18
- zn_calendar: IB::Calendar.fabricate( IB::Symbols::Futures.zn, '3m') ,
11
+ stoxx_straddle: IB::Straddle.build( from: IB::Symbols::Index.stoxx, strike: 4000,
12
+ expiry: IB::Symbols::Futures.next_expiry, trading_class: 'OESX') ,
13
+ stoxx_calendar: IB::Calendar.build( from: IB::Symbols::Index.stoxx, strike: 4000, back: '2m' ,
14
+ front: IB::Symbols::Futures.next_expiry, trading_class: 'OESX'),
15
+ stoxx_butterfly: IB::Butterfly.fabricate( Symbols::Options.stoxx.merge( strike: 3900), front: 3500, back: 4300 ),
16
+ stoxx_vertical: IB::Vertical.build( from: IB::Symbols::Index.stoxx, sell: 3500, buy: 4000, right: :put,
17
+ expiry: IB::Symbols::Futures.next_expiry, trading_class: 'OESX'),
18
+ zn_calendar: IB::Calendar.fabricate( IB::Symbols::Futures.zn, '3m') ,
19
19
 
20
- dbk_straddle: Bag.new( symbol: 'DBK', currency: 'EUR', exchange: 'EUREX', combo_legs:
21
- [ ComboLeg.new( con_id: 270581032 , action: :buy, exchange: 'DTB', ratio: 1), #DBK Dez20 2018 C
20
+ dbk_straddle: Bag.new( symbol: 'DBK', currency: 'EUR', exchange: 'EUREX', combo_legs:
21
+ [ ComboLeg.new( con_id: 270581032 , action: :buy, exchange: 'DTB', ratio: 1), #DBK Dez20 2018 C
22
22
  ComboLeg.new( con_id: 270580382, action: :buy, exchange: 'DTB', ratio: 1 ) ], #DBK Dez 20 2018 P
23
23
  description: 'Option Straddle: Deutsche Bank(20)[Dez 2018]'
24
- ),
25
- ib_mcd: Bag.new( symbol: 'IBKR,MCD', currency: 'USD', combo_legs:
24
+ ),
25
+ ib_mcd: Bag.new( symbol: 'IBKR,MCD', currency: 'USD', combo_legs:
26
26
  [ ComboLeg.new( con_id: 43645865, action: :buy, ratio: 1), # IKBR STK
27
27
  ComboLeg.new( con_id: 9408, action: :sell,ratio: 1 ) ], # MCD STK
28
28
  description: 'Stock Spread: Buy Interactive Brokers, sell Mc Donalds'
29
- ),
29
+ ),
30
30
 
31
31
  vix_calendar: Bag.new( symbol: 'VIX', currency: 'USD', exchange: 'CFE', combo_legs:
32
32
  [ ComboLeg.new( con_id: 256038899, action: :buy, exchange: 'CFE', ratio: 1), # VIX FUT 201708
33
33
  ComboLeg.new( con_id: 260564703, action: :sell, exchange: 'CFE', ratio: 1 ) ], # VIX FUT 201709
34
34
  description: 'VixFuture Calendar-Spread August - September 2017'
35
- ),
35
+ ),
36
36
  wti_coil: Bag.new( symbol: 'WTI', currency: 'USD', exchange: 'SMART', combo_legs:
37
- [ ComboLeg.new( con_id: 55928698, action: :buy, exchange: 'IPE', ratio: 1), # WTI future June 2017
37
+ [ ComboLeg.new( con_id: 55928698, action: :buy, exchange: 'IPE', ratio: 1), # WTI future June 2017
38
38
  ComboLeg.new( con_id: 55850663, action: :sell, exchange: 'IPE', ratio: 1 ) ], # COIL future June 2017
39
39
  description: 'Smart Future Spread WTI - COIL (June 2017) '
40
- ),
40
+ ),
41
41
  wti_brent: Bag.new( symbol: 'CL.BZ', currency: 'USD', exchange: 'NYMEX', combo_legs:
42
42
  [ ComboLeg.new( con_id: 47207310, action: :buy, exchange: 'NYMEX', ratio: 1), # CL Dec'16 @NYMEX
43
43
  ComboLeg.new( con_id: 47195961, action: :sell, exchange: 'NYMEX', ratio: 1 ) ], #BZ Dec'16 @NYMEX
44
44
  description: ' WTI - Brent Spread (Dez. 2016)'
45
- )
45
+ )
46
46
  }
47
47
  # )
48
48
  end
@@ -58,7 +58,7 @@ module IB
58
58
  def self.contracts
59
59
  @contracts.presence ||( super.merge :ym => IB::Future.new(:symbol => "YM",
60
60
  :expiry => next_expiry,
61
- :exchange => "ECBOT",
61
+ :exchange => "CBOT",
62
62
  :currency => "USD",
63
63
  :description => "Mini-DJIA future"),
64
64
  :nq => IB::Future.new(:symbol => "NQ",
@@ -87,13 +87,13 @@ module IB
87
87
  :description => "Micro E-Mini S&P 500 future"),
88
88
  :russell => IB::Future.new(:symbol => "RTY",
89
89
  :expiry => next_expiry,
90
- :exchange => "CME
90
+ :exchange => "CME",
91
91
  :currency => "USD",
92
- :multiplier => 5,
92
+ :multiplier => 50,
93
93
  :description => "Micro E-Mini Russell 2000 future"),
94
94
  :micro_russell => IB::Future.new(:symbol => "M2K",
95
95
  :expiry => next_expiry,
96
- :exchange => "CME
96
+ :exchange => "CME",
97
97
  :currency => "USD",
98
98
  :multiplier => 5,
99
99
  :description => "Micro E-Mini Russell 2000 future"),
@@ -101,44 +101,49 @@ module IB
101
101
  expiry: next_expiry,
102
102
  currency: 'USD',
103
103
  multiplier: 1000,
104
- exchange: 'ECBOT',
104
+ exchange: 'CBOT',
105
105
  description: 'US Treasury Note -- 10 Years'),
106
106
  :zb => IB::Future.new( symbol: 'ZB',
107
107
  expiry: next_expiry,
108
108
  currency: 'USD',
109
109
  multiplier: 1000,
110
- exchange: 'ECBOT',
110
+ exchange: 'CBOT',
111
111
  description: 'US Treasury Note -- 30 Years'),
112
- :mini_dax => IB::Future.new( symbol: 'DAX', exchange: 'EUREX',
112
+ :mini_dax => IB::Future.new( symbol: 'DAX', exchange: 'EUREX',
113
113
  expiry: next_expiry,
114
114
  currency: 'EUR',
115
115
  multiplier: 5,
116
116
  description: 'Mini DAX-Future'),
117
- :dax => IB::Future.new( symbol: 'DAX', exchange: 'EUREX',
117
+ :dax => IB::Future.new( symbol: 'DAX', exchange: 'EUREX',
118
118
  expiry: next_expiry,
119
119
  currency: 'EUR',
120
120
  multiplier: 25,
121
121
  description: 'DAX-Future'),
122
- :stoxx=> IB::Future.new( symbol: 'ESTX50', exchange: 'EUREX',
122
+ :stoxx=> IB::Future.new( symbol: 'ESTX50', exchange: 'EUREX',
123
123
  expiry: next_expiry,
124
124
  currency: 'EUR',
125
125
  multiplier: 10,
126
126
  description: 'EuroStoxx 50 -Future'),
127
+ :mini_stoxx=> IB::Future.new( symbol: 'ESTX50', exchange: 'EUREX',
128
+ expiry: next_expiry,
129
+ currency: 'EUR',
130
+ multiplier: 1,
131
+ description: 'Mini EuroStoxx 50 -Future'),
127
132
  :gbp => IB::Future.new(:symbol => "GBP",
128
133
  :expiry => next_expiry,
129
- :exchange => "GLOBEX",
134
+ :exchange => "CME",
130
135
  :currency => "USD",
131
136
  :multiplier => 62500,
132
137
  :description => "British Pounds future"),
133
138
  :eur => IB::Future.new(:symbol => "EUR",
134
139
  :expiry => next_expiry,
135
- :exchange => "GLOBEX",
140
+ :exchange => "CME",
136
141
  :currency => "USD",
137
- :multiplier => 12500,
142
+ :multiplier => 125000,
138
143
  :description => "Euro FX future"),
139
144
  :jpy => IB::Future.new(:symbol => "JPY",
140
145
  :expiry => next_expiry,
141
- :exchange => "GLOBEX",
146
+ :exchange => "CME",
142
147
  :currency => "USD",
143
148
  :multiplier => 12500000,
144
149
  :description => "Japanese Yen future"),
@@ -150,11 +155,9 @@ module IB
150
155
  :description => "Hang Seng Index future"),
151
156
  :vix => IB::Future.new(:symbol => "VIX",
152
157
  :expiry => next_expiry,
153
- :exchange => "CFE", #"ECBOT",
158
+ :exchange => "CFE",
154
159
  :currency => "USD",
155
160
  :description => "CBOE Volatility Index future"))
156
-
157
-
158
161
  end
159
162
  end
160
163
  end
@@ -21,7 +21,7 @@ module IB
21
21
  :vhsi => IB::Index.new( symbol: 'VHSI', exchange: 'HKFE',
22
22
  :description => "Hang Seng Volatility Index"),
23
23
  :vasx => IB::Index.new( symbol: 'XVI', exchange: 'ASX',
24
- :description => "ASX 200 Volatility Index") ,
24
+ :description => "ASX 200 Volatility Index") ,
25
25
  :vstoxx => IB::Index.new(:symbol => "V2TX", :currency => "EUR", exchange: 'EUREX',
26
26
  :description => "VSTOXX Volatility Index"),
27
27
  :vdax => IB::Index.new(:symbol => "VDAX", exchange: 'EUREX',
@@ -6,75 +6,88 @@ module IB
6
6
  module Options
7
7
  extend Symbols
8
8
 
9
-
10
- ## usage: IB::Symbols::Options.stoxx.merge( strike: 3300 )
9
+ ## usage: IB::Symbols::Options.stoxx.merge( strike: 3300, expiry: 202304 )
11
10
  def self.contracts
12
11
  @contracts ||= {
13
- stoxx: IB::Option.new( symbol: :ESTX50, strike: 3000,
14
- expiry: IB::Symbols::Futures.next_expiry ,
15
- right: :put,
16
- trading_class: 'OESX',
17
- currency: 'EUR', exchange: 'EUREX',
18
- description: "ESTX50 Put Option quarterly"),
19
- :ge => IB::Option.new(:symbol => "GE",
20
- :expiry => IB::Symbols::Futures.next_expiry,
21
- :right => "CALL",
22
- :strike => 7,
23
- :multiplier => 100,
24
- :exchange => 'SMART',
25
- :currency => 'USD',
26
- :description => "General Electric 7 Call"),
27
- :aapl => IB::Option.new(:symbol => "AAPL", exchange: 'SMART',
28
- :expiry => IB::Symbols::Futures.next_expiry,
29
- :right => "C",
30
- :strike => 130,
31
- :currency => 'USD',
32
- :description => "Apple Call 130"),
33
- :z750 => IB::Option.new(:symbol => "Z",
34
- :exchange => "ICEEU",
35
- :expiry => "201903",
36
- :right => "CALL",
37
- :strike => 7000.0,
38
- :description => " FTSE-100 index 750 Call 2019-03"),
12
+ stoxx: IB::Option.new(symbol: :ESTX50,
13
+ expiry: IB::Symbols::Futures.next_expiry ,
14
+ right: :put,
15
+ trading_class: 'OESX',
16
+ currency: 'EUR',
17
+ exchange: 'EUREX',
18
+ description: "Monthly settled ESTX50 Options"),
19
+ spx: IB::Option.new( symbol: :SPX,
20
+ expiry: IB::Symbols::Futures.next_expiry ,
21
+ right: :put,
22
+ trading_class: 'SPX',
23
+ currency: 'USD',
24
+ exchange: 'SMART',
25
+ description: "Monthly settled SPX options"),
26
+ spxw: IB::Option.new( symbol: :SPX,
27
+ expiry: IB::Symbols::Futures.next_expiry ,
28
+ right: :put,
29
+ trading_class: 'SPXW',
30
+ currency: 'USD', exchange: 'SMART',
31
+ description: "Daily settled SPX options"),
32
+ :spy => IB::Option.new( :symbol => :SPY,
33
+ :expiry => IB::Symbols::Futures.next_expiry,
34
+ :right => :put,
35
+ :currency => "USD",
36
+ :exchange => 'SMART',
37
+ :description => "SPY Put next expiration"),
38
+ :rut => IB::Option.new( :symbol => :RUT,
39
+ :expiry => IB::Symbols::Futures.next_expiry,
40
+ :right => :put,
41
+ :currency => "USD",
42
+ :exchange => 'SMART',
43
+ description: "Monthly settled RUT options"),
44
+ :rutw => IB::Option.new( :symbol => :RUT,
45
+ :expiry => IB::Symbols::Futures.next_expiry,
46
+ :right => :put,
47
+ :currency => "USD",
48
+ :exchange => 'SMART',
49
+ description: "Weekly settled RUT options"),
50
+ :russell => IB::Option.new( :symbol => :RUT, # :russell == :rut !
51
+ :expiry => IB::Symbols::Futures.next_expiry,
52
+ :right => :put,
53
+ :currency => "USD",
54
+ :exchange => 'SMART',
55
+ description: "Monthly settled RUT options"),
56
+ :mini_russell => IB::Option.new( :symbol => :MRUT,
57
+ :expiry => IB::Symbols::Futures.next_expiry,
58
+ :right => :put,
59
+ :currency => "USD",
60
+ :exchange => 'SMART',
61
+ :description => "Weekly settled Mini-Russell2000 options"),
62
+ :ge => IB::Option.new( :symbol => "GE",
63
+ :expiry => IB::Symbols::Futures.next_expiry,
64
+ :right => "CALL",
65
+ :strike => 7,
66
+ :multiplier => 100,
67
+ :exchange => 'SMART',
68
+ :currency => 'USD',
69
+ :description => "General Electric 7 Call"),
70
+ :aapl => IB::Option.new( :symbol => "AAPL", exchange: 'SMART',
71
+ :expiry => IB::Symbols::Futures.next_expiry,
72
+ :right => "C",
73
+ :strike => 130,
74
+ :currency => 'USD',
75
+ :description => "Apple Call 130"),
76
+
77
+ :ibm => IB::Option.new( symbol: 'IBM', exchange: 'SMART', right: :put, expiry: IB::Symbols::Futures.next_expiry ,
78
+ description: 'IBM-Option Chain ( quarterly expiry)'),
39
79
  :ibm_lazy_expiry => IB::Option.new( symbol: 'IBM', right: :put, strike: 140, exchange: 'SMART',
40
80
  description: 'IBM-Option Chain with strike 140'),
41
81
  :ibm_lazy_strike => IB::Option.new( symbol: 'IBM', exchange: 'SMART', right: :put, expiry: IB::Symbols::Futures.next_expiry ,
42
82
  description: 'IBM-Option Chain ( quarterly expiry)'),
43
83
 
44
- :goog1100 => IB::Option.new( symbol: 'GOOG',
84
+ :goog100 => IB::Option.new( symbol: 'GOOG',
45
85
  currency: 'USD',
46
- strike: 1100,
86
+ strike: 100,
47
87
  multiplier: 100,
48
88
  right: :call,
49
89
  expiry: IB::Symbols::Futures.next_expiry,
50
- description: 'Google Call Option with quarterly expiry'),
51
- :argo_ise => Option.new( symbol: 'ARGO',
52
- currency: "USD",
53
- exchange: "ISE",
54
- expiry: IB::Symbols::Futures.next_expiry,
55
- right: :call,
56
- strike: 10,
57
- multiplier: 100,
58
- description: 'Adecoagro Options @ ISE'),
59
- :san_eu => IB::Option.new( symbol: 'SAN1',
60
- exchange: "MEFFRV",
61
- currency: "EUR",
62
- expiry: IB::Symbols::Futures.next_expiry,
63
- strike: 4.5,
64
- right: :call,
65
- # multiplier: 100, ## non standard multiplier: 102
66
- trading_class: "SANEU",
67
- description: 'Santanter Option specified via Trading-Class'),
68
- :spy => IB::Option.new(:symbol => 'SPY',
69
- :expiry => IB::Symbols::Futures.next_expiry,
70
- :right => "P",
71
- :currency => "USD",
72
- :exchange => 'SMART',
73
- :strike => 350,
74
- :description => "SPY 350 Put next expiration"),
75
- # :spy270 => IB::Option.new(:osi => 'SPY 190315P002700000'),
76
- # :vix20 => IB::Option.new(:osi => 'VIX 181121C00020000'),
77
- # :vxx40 => IB::Option.new(:osi => 'VXX 181117C00040000'),
90
+ description: 'Google Call Option with quarterly expiry')
78
91
  }
79
92
  end
80
93
  end
@@ -1,5 +1,5 @@
1
1
  module IB
2
2
  module Symbols
3
- VERSION = "1.3"
3
+ VERSION = "1.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ib-symbols
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.3'
4
+ version: '1.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hartmut Bischoff