ib-symbols 1.0

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.
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This script gets details for specific contract from IB
4
+
5
+ require 'bundler/setup'
6
+ require 'ib/symbols'
7
+ require './contract_samples'
8
+ include IB
9
+ # Definition of what we want market data for. We have to keep track of what ticker id
10
+ # corresponds to what symbol ourselves, because the ticks don't include any other
11
+ # identifying information. The choice of ticker ids is, as far as I can tell, arbitrary.
12
+ contract_definitions = ContractSamples.public_instance_methods
13
+
14
+ # get contracts from contract_samples db
15
+ include ContractSamples
16
+ the_contracts = contract_definitions.map{ | method | self.send( method )}
17
+
18
+
19
+ # Connect to IB TWS.
20
+ ib = Connection.new( :client_id => 11912, :port => 4002 ) do | gw| # 7496 # TWS
21
+ # subscribe to TWS alerts/errors and contract data end marker
22
+ gw.subscribe(:Alert, :ContractDataEnd) { |msg| puts msg.to_human }
23
+
24
+ # subscribe to ContractData incoming events. The code passed in the block
25
+ # will be executed when a message of that type is received, with the received
26
+ # message as its argument. In this case, we just print out the data.
27
+ gw.subscribe(:ContractData, :BondContractData) do |msg|
28
+ puts "------------------> Recieved Contract Confirmation <----------------------------"
29
+ puts msg.contract.to_human + "\n"
30
+ puts "Attributes: "
31
+ puts "\t"+ msg.contract.attributes.map{ |k,v| "#{k} : #{v}" unless v.blank? }.join("\n\t")
32
+ end
33
+ # Set log level
34
+ gw.logger.level = Logger::DEBUG #FATAL
35
+ end
36
+
37
+ ib.wait_for :NextValidOrderId
38
+
39
+
40
+ the_contracts.each do | contract|
41
+ puts "\nRequesting contract data: #{contract_definitions}: #{contract.to_human}"
42
+
43
+ # Request Contract details for the symbols we're interested in. TWS will
44
+ # respond with ContractData messages, which will be processed by the code above.
45
+ ib.send_message :RequestContractData, contract: contract
46
+
47
+ # Wait for IB to respond to our request
48
+ ib.wait_for :ContractDataEnd, 1 #sec
49
+ ib.clear_received :ContractDataEnd
50
+ end
@@ -0,0 +1,716 @@
1
+ #!/usr/bin/env ruby
2
+ # ---------------------------------------------------------------------------------- #
3
+ # C O N T R A C T S A M P L E S #
4
+ #
5
+ # Sample Contracts for ib-ruby with 1:1 comparism to python code
6
+ #
7
+ # based on »ContractSamples.py« (python-implementation of the tws-api)
8
+ # which is protected by the following copyright
9
+ #
10
+ #Copyright (C) 2016 Interactive Brokers LLC. All rights reserved. This code is
11
+ #subject to the terms and conditions of the IB API Non-Commercial License or the
12
+ # IB API Commercial License, as applicable.
13
+ #
14
+ #
15
+
16
+ # This script just generates contracts
17
+ # If called from the command line, it prints a list
18
+
19
+ require 'bundler/setup'
20
+ require 'yaml'
21
+ require 'ib/symbols'
22
+ include IB
23
+
24
+ module ContractSamples
25
+
26
+ """ Usually, the easiest way to define a Stock/CASH contract is through
27
+ these four attributes. """
28
+
29
+ def rEurGbpFx
30
+ Symbols::Forex[:eurgbp]
31
+ end
32
+ =begin
33
+ [cashcontract]
34
+ contract = Contract()
35
+ contract.symbol = "EUR"
36
+ contract.secType = "CASH"
37
+ contract.currency = "GBP"
38
+ contract.exchange = "IDEALPRO"
39
+ =end
40
+
41
+ def rIndex
42
+ Contract.new symbol: 'DAX', sec_type: :index, currency: 'EUR', exchange: 'DTB'
43
+ end
44
+ =begin
45
+ [indcontract]
46
+ contract = Contract()
47
+ contract.symbol = "DAX"
48
+ contract.secType = "IND"
49
+ contract.currency = "EUR"
50
+ contract.exchange = "DTB"
51
+ =end
52
+
53
+
54
+ def rCFD
55
+ Contract.new symbol: 'IBDE30', sec_type: :cfd, currency: 'EUR'
56
+ end
57
+ =begin
58
+ #! [cfdcontract]
59
+ contract = Contract()
60
+ contract.symbol = "IBDE30"
61
+ contract.secType = "CFD"
62
+ contract.currency = "EUR"
63
+ contract.exchange = "SMART"
64
+ =end
65
+
66
+
67
+ def rEuropeanStock
68
+ Stock.new symbol: 'SIE', currency: 'EUR'
69
+ end
70
+ =begin
71
+ contract = Contract()
72
+ contract.symbol = "SIE"
73
+ contract.secType = "STK"
74
+ contract.currency = "EUR"
75
+ contract.exchange = "SMART"
76
+ =end
77
+
78
+ def rOptionAtIse
79
+ Option.new symbol: 'ARGO',
80
+ currency: "USD",
81
+ exchange: "ISE",
82
+ expiry: Symbols::Futures.next_expiry,
83
+ right: :call,
84
+ strike: 10,
85
+ multiplier: 100
86
+ end
87
+ =begin
88
+ contract = Contract()
89
+ contract.symbol = "BPX"
90
+ contract.secType = "OPT"
91
+ contract.currency = "USD"
92
+ contract.exchange = "ISE"
93
+ contract.lastTradeDateOrContractMonth = "20160916"
94
+ contract.right = "C"
95
+ contract.strike = 65
96
+ contract.multiplier = "100"
97
+ =end
98
+
99
+ def rBondWithCusip
100
+ Contract.new symbol: '912828C57', sec_type: :bond, currency: 'USD'
101
+ end
102
+ =begin
103
+ #! [bondwithcusip]
104
+ contract = Contract()
105
+ # enter CUSIP as symbol
106
+ contract.symbol= "912828C57"
107
+ contract.secType = "BOND"
108
+ contract.exchange = "SMART"
109
+ contract.currency = "USD"
110
+ =end
111
+
112
+ def rBond
113
+ Contract.new con_id: 267433416
114
+ end
115
+ =begin
116
+ #! [bond]
117
+ contract = Contract()
118
+ contract.conId = 267433416
119
+ contract.exchange = "SMART"
120
+ =end
121
+
122
+
123
+ def rMutualFund
124
+ Contract.new symbol: 'VINIX', sec_type: :fund, exchange: 'FUNDSERV', currency: 'USD'
125
+ end
126
+ =begin
127
+ #! [fundcontract]
128
+ contract = Contract()
129
+ contract.symbol = "VINIX"
130
+ contract.secType = "FUND"
131
+ contract.exchange = "FUNDSERV"
132
+ contract.currency = "USD"
133
+ =end
134
+
135
+ def rCommodity
136
+ Contract.new symbol: 'XAUUSD', sec_type: :commodity, currency: 'USD'
137
+ end
138
+ =begin
139
+ #! [commoditycontract]
140
+ contract = Contract()
141
+ contract.symbol = "XAUUSD"
142
+ contract.secType = "CMDTY"
143
+ contract.exchange = "SMART"
144
+ contract.currency = "USD"
145
+ =end
146
+
147
+
148
+ def rUSStock
149
+ #In the API side, NASDAQ is always defined as ISLAND in the exchange field
150
+ Stock.new symbol: 'IBKR', exchange: 'ISLAND'
151
+ end
152
+ =begin
153
+ #! [stkcontract]
154
+ contract = Contract()
155
+ contract.symbol = "IBKR"
156
+ contract.secType = "STK"
157
+ contract.currency = "USD"
158
+ contract.exchange = "ISLAND"
159
+ =end
160
+
161
+ def rUSStockWithPrimaryExch
162
+ #Specify the Primary Exchange attribute to avoid contract ambiguity
163
+ #(there is an ambiguity because there is also a MSFT contract with primary exchange = "AEB")
164
+ Stock.new symbol: 'MSFT', primary_exchange: 'ISLAND'
165
+ end
166
+ =begin
167
+ #! [stkcontractwithprimary]
168
+ contract = Contract()
169
+ contract.symbol = "MSFT"
170
+ contract.secType = "STK"
171
+ contract.currency = "USD"
172
+ contract.exchange = "SMART"
173
+ contract.primaryExchange = "ISLAND"
174
+ =end
175
+
176
+ def rUSStockAtSmart
177
+ Stock.new symbol: 'IBKR'
178
+ end
179
+ =begin
180
+ contract = Contract()
181
+ contract.symbol = "IBKR"
182
+ contract.secType = "STK"
183
+ contract.currency = "USD"
184
+ contract.exchange = "SMART"
185
+ return contract
186
+ =end
187
+
188
+ def rUSOptionContract
189
+ Option.new symbol: 'GOOG',
190
+ strike: 1100,
191
+ multiplier: 100,
192
+ right: :call,
193
+ expiry: Symbols::Futures.next_expiry
194
+ end
195
+ =begin
196
+ #! [optcontract_us]
197
+ contract = Contract()
198
+ contract.symbol = "GOOG"
199
+ contract.secType = "OPT"
200
+ contract.exchange = "SMART"
201
+ contract.currency = "USD"
202
+ contract.lastTradeDateOrContractMonth = "20170120"
203
+ contract.strike = 615
204
+ contract.right = "C"
205
+ contract.multiplier = "100"
206
+ =end
207
+
208
+ def rOptionAtBOX
209
+ Option.new symbol: 'GOOG',
210
+ strike: 1200,
211
+ multiplier: 100,
212
+ right: :call,
213
+ expiry: Symbols::Futures.next_expiry ,
214
+ exchange: 'BOX'
215
+ end
216
+ =begin
217
+ #! [optcontract]
218
+ contract = Contract()
219
+ contract.symbol = "GOOG"
220
+ contract.secType = "OPT"
221
+ contract.exchange = "BOX"
222
+ contract.currency = "USD"
223
+ contract.lastTradeDateOrContractMonth = "20170120"
224
+ contract.strike = 615
225
+ contract.right = "C"
226
+ contract.multiplier = "100"
227
+ =end
228
+
229
+ =begin
230
+ """ Option contracts require far more information since there are many
231
+ contracts having the exact same attributes such as symbol, currency,
232
+ strike, etc. This can be overcome by adding more details such as the
233
+ trading class"""
234
+ =end
235
+ def rOptionWithTradingClass
236
+ Option.new symbol: 'SANT',
237
+ exchange: "MEFFRV",
238
+ currency: "EUR",
239
+ expiry: Symbols::Futures.next_expiry,
240
+ strike: 7.5,
241
+ right: :call,
242
+ multiplier: 100,
243
+ trading_class: "SANEU"
244
+ end
245
+ =begin
246
+ #! [optcontract_tradingclass]
247
+ contract = Contract()
248
+ contract.symbol = "SANT"
249
+ contract.secType = "OPT"
250
+ contract.exchange = "MEFFRV"
251
+ contract.currency = "EUR"
252
+ contract.lastTradeDateOrContractMonth = "20190621"
253
+ contract.strike = 7.5
254
+ contract.right = "C"
255
+ contract.multiplier = "100"
256
+ contract.tradingClass = "SANEU"
257
+ =end
258
+
259
+ =begin
260
+ """ Using the contract's own symbol (localSymbol) can greatly simplify a
261
+ contract description """
262
+ =end
263
+
264
+ def rOptionWithLocalSymbol
265
+ #Watch out for the spaces within the local symbol!
266
+ Option.new local_symbol: "C DBK DEC 20 1600",
267
+ exchange: 'DTB',
268
+ currency: 'EUR'
269
+ end
270
+ =begin
271
+ #! [optcontract_localsymbol]
272
+ contract = Contract()
273
+ contract.localSymbol = "C DBK DEC 20 1600"
274
+ contract.secType = "OPT"
275
+ contract.exchange = "DTB"
276
+ contract.currency = "EUR"
277
+ =end
278
+
279
+ =begin
280
+ Dutch Warrants (IOPTs) can be defined using the local symbol or conid
281
+ =end
282
+
283
+ def rDutchWarrant
284
+ Contract.new sec_type: :dutch_option,
285
+ exchange: 'SBF',
286
+ currency: 'EUR',
287
+ local_symbol: 'B881G'
288
+ end
289
+ =begin
290
+ #! [ioptcontract]
291
+ contract = Contract()
292
+ contract.localSymbol = "B881G"
293
+ contract.secType = "IOPT"
294
+ contract.exchange = "SBF"
295
+ contract.currency = "EUR"
296
+ #! [ioptcontract]
297
+ return contract
298
+ =end
299
+
300
+ =begin
301
+ Future contracts also require an expiration date but are less
302
+ complicated than options.
303
+ =end
304
+
305
+ def rSimpleFuture
306
+ Future.new symbol: 'ES', exchange: 'GLOBEX',
307
+ expiry: Symbols::Futures.next_expiry,
308
+ currency: 'USD'
309
+ end
310
+ =begin
311
+ #! [futcontract]
312
+ contract = Contract()
313
+ contract.symbol = "ES"
314
+ contract.secType = "FUT"
315
+ contract.exchange = "GLOBEX"
316
+ contract.currency = "USD"
317
+ contract.lastTradeDateOrContractMonth = "201612"
318
+ =end
319
+
320
+ =begin
321
+ Rather than giving expiration dates we can also provide the local symbol
322
+ attributes such as symbol, currency, strike, etc.
323
+ =end
324
+
325
+ def rFutureWithLocalSymbol
326
+ Future.new symbol: 'ES', exchange: 'GLOBEX',
327
+ currency: 'USD',
328
+ local_symbol: 'ESU8'
329
+ end
330
+ =begin
331
+ #! [futcontract_local_symbol]
332
+ contract = Contract()
333
+ contract.secType = "FUT"
334
+ contract.exchange = "GLOBEX"
335
+ contract.currency = "USD"
336
+ contract.localSymbol = "ESU6"
337
+ =end
338
+
339
+
340
+ def rFutureWithMultiplier
341
+ Future.new symbol: 'DAX', exchange: 'DTB',
342
+ expiry: Symbols::Futures.next_expiry,
343
+ currency: 'EUR',
344
+ multiplier: 5
345
+ end
346
+ =begin
347
+ #! [futcontract_multiplier]
348
+ contract = Contract()
349
+ contract.symbol = "DAX"
350
+ contract.secType = "FUT"
351
+ contract.exchange = "DTB"
352
+ contract.currency = "EUR"
353
+ contract.lastTradeDateOrContractMonth = "201609"
354
+ contract.multiplier = "5"
355
+ =end
356
+
357
+
358
+
359
+ def rFuturesOnOptions
360
+ Contract.new sec_type: :future_option,
361
+ expiry: Symbols::Futures.next_expiry,
362
+ exchange: 'GLOBEX',
363
+ currency: 'USD',
364
+ strike: 1400,
365
+ right: :call,
366
+ multiplier: 250
367
+ end
368
+ =begin
369
+ #! [fopcontract]
370
+ contract = Contract()
371
+ contract.symbol = "SPX"
372
+ contract.secType = "FOP"
373
+ contract.exchange = "GLOBEX"
374
+ contract.currency = "USD"
375
+ contract.lastTradeDateOrContractMonth = "20180315"
376
+ contract.strike = 1025
377
+ contract.right = "C"
378
+ contract.multiplier = "250"
379
+ =end
380
+
381
+ =begin
382
+ It is also possible to define contracts based on their ISIN (IBKR STK sample).
383
+ =end
384
+ def rByISIN
385
+ Stock.new sec_id_type: 'ISIN', sec_id: "US45841N1072"
386
+ end
387
+ =begin
388
+ contract = Contract()
389
+ contract.secIdType = "ISIN"
390
+ contract.secId = "US45841N1072"
391
+ contract.exchange = "SMART"
392
+ contract.currency = "USD"
393
+ contract.secType = "STK"
394
+ =end
395
+
396
+ =begin
397
+ Or their conId (EUR.uSD sample).
398
+ Note: passing a contract containing the conId can cause problems if one of
399
+ the other provided attributes does not match 100% with what is in IB's
400
+ database. This is particularly important for contracts such as Bonds which
401
+ may change their description from one day to another.
402
+ If the conId is provided, it is best not to give too much information as
403
+ in the example below.
404
+ =end
405
+
406
+ def rByConId
407
+ Contract.new sec_type: :forex, con_id: 12087792, exchange: 'IDEALPRO'
408
+ end
409
+ =begin
410
+ contract = Contract()
411
+ contract.secType = "CASH"
412
+ contract.conId = 12087792
413
+ contract.exchange = "IDEALPRO"
414
+ =end
415
+
416
+ =begin
417
+ Ambiguous contracts are great to use with reqContractDetails. This way
418
+ you can query the whole option chain for an underlying. Bear in mind that
419
+ there are pacing mechanisms in place which will delay any further responses
420
+ from the TWS to prevent abuse.
421
+ =end
422
+
423
+ def rOptionForQuery
424
+ Option.new symbol: 'FISV'
425
+ end
426
+ =begin
427
+ #! [optionforquery]
428
+ contract = Contract()
429
+ contract.symbol = "FISV"
430
+ contract.secType = "OPT"
431
+ contract.exchange = "SMART"
432
+ contract.currency = "USD"
433
+ =end
434
+ # def rOptionComboContract
435
+ #
436
+ # Bag.new symbol: 'DBK', currency: 'EUR', exchange: 'DTB', legs:
437
+ # [ ComboLeg.new( con_id: 197397509 , action: :buy, exchange: 'DTB', ratio: 1), #DBK JUN 15 2018 C
438
+ # ComboLeg.new( con_id: 197397584, action: :sell, exchange: 'DTB', ratio: 1 ) ] #DBK JUN 15 2018 P
439
+ # end
440
+
441
+ =begin
442
+ contract = Contract()
443
+ contract.symbol = "DBK"
444
+ contract.secType = "BAG"
445
+ contract.currency = "EUR"
446
+ contract.exchange = "DTB"
447
+
448
+ leg1 = ComboLeg()
449
+ leg1.conId = 197397509 #DBK JUN 15 2018 C
450
+ leg1.ratio = 1
451
+ leg1.action = "BUY"
452
+ leg1.exchange = "DTB"
453
+
454
+
455
+ leg2 = ComboLeg()
456
+ leg2.conId = 197397584 #DBK JUN 15 2018 P
457
+ leg2.ratio = 1
458
+ leg2.action = "SELL"
459
+ leg2.exchange = "DTB"
460
+
461
+ contract.comboLegs = []
462
+ contract.comboLegs.append(leg1)
463
+ contract.comboLegs.append(leg2)
464
+ #! [bagoptcontract]
465
+ return contract
466
+
467
+
468
+ """ STK Combo contract
469
+ Leg 1: 43645865 - IBKR's STK
470
+ Leg 2: 9408 - McDonald's STK """
471
+ #=end
472
+ def rStockComboContract
473
+ Bag.new symbol: 'IBKR,MCD', currency: 'USD', legs:
474
+ [ ComboLeg.new( con_id: 43645865, action: :buy, ratio: 1), # IKBR STK
475
+ ComboLeg.new( con_id: 9408, action: :sell,ratio: 1 ) ] # MCD STK
476
+ end
477
+ #=begin
478
+ #! [bagstkcontract]
479
+ contract = Contract()
480
+ contract.symbol = "IBKR,MCD"
481
+ contract.secType = "BAG"
482
+ contract.currency = "USD"
483
+ contract.exchange = "SMART"
484
+
485
+ leg1 = ComboLeg()
486
+ leg1.conId = 43645865#IBKR STK
487
+ leg1.ratio = 1
488
+ leg1.action = "BUY"
489
+ leg1.exchange = "SMART"
490
+
491
+ leg2 = ComboLeg()
492
+ leg2.conId = 9408#MCD STK
493
+ leg2.ratio = 1
494
+ leg2.action = "SELL"
495
+ leg2.exchange = "SMART"
496
+
497
+ contract.comboLegs = []
498
+ contract.comboLegs.append(leg1)
499
+ contract.comboLegs.append(leg2)
500
+ #! [bagstkcontract]
501
+ return contract
502
+ =end
503
+
504
+
505
+ =begin
506
+
507
+ """ CBOE Volatility Index Future combo contract """
508
+ =end
509
+ # def rFutureComboContract
510
+ # Bag.new symbol: 'VIX', currency: 'USD', exchange: 'CFE', legs:
511
+ # [ ComboLeg.new( con_id: 256038899, action: :buy, exchange: 'CFE', ratio: 1), # VIX FUT 201708
512
+ # ComboLeg.new( con_id: 260564703, action: :sell, exchange: 'CFE', ratio: 1 ) ] # VIX FUT 201709
513
+ # end
514
+ =begin
515
+ #! [bagfutcontract]
516
+ contract = Contract()
517
+ contract.symbol = "VIX"
518
+ contract.secType = "BAG"
519
+ contract.currency = "USD"
520
+ contract.exchange = "CFE"
521
+
522
+ leg1 = ComboLeg()
523
+ leg1.conId = 256038899 # VIX FUT 201708
524
+ leg1.ratio = 1
525
+ leg1.action = "BUY"
526
+ leg1.exchange = "CFE"
527
+
528
+ leg2 = ComboLeg()
529
+ leg2.conId = 260564703 # VIX FUT 201709
530
+ leg2.ratio = 1
531
+ leg2.action = "SELL"
532
+ leg2.exchange = "CFE"
533
+
534
+ contract.comboLegs = []
535
+ contract.comboLegs.append(leg1)
536
+ contract.comboLegs.append(leg2)
537
+ #! [bagfutcontract]
538
+ return contract
539
+
540
+ =end
541
+ # def SmartFutureComboContract()
542
+ # Bag.new symbol: 'WTI', currency: 'USD', exchange: 'SMART', legs:
543
+ # [ ComboLeg.new( con_id: 55928698, action: :buy, exchange: 'IPE', ratio: 1), # WTI future June 2017
544
+ # ComboLeg.new( con_id: 55850663, action: :sell, exchange: 'IPE', ratio: 1 ) ] # COIL future June 2017
545
+ # end
546
+ =begin
547
+ #! [smartfuturespread]
548
+ contract = Contract()
549
+ contract.symbol = "WTI" # WTI,COIL spread. Symbol can be defined as first leg symbol ("WTI") or currency ("USD")
550
+ contract.secType = "BAG"
551
+ contract.currency = "USD"
552
+ contract.exchange = "SMART"
553
+
554
+ leg1 = ComboLeg()
555
+ leg1.conId = 55928698 # WTI future June 2017
556
+ leg1.ratio = 1
557
+ leg1.action = "BUY"
558
+ leg1.exchange = "IPE"
559
+
560
+ leg2 = ComboLeg()
561
+ leg2.conId = 55850663 # COIL future June 2017
562
+ leg2.ratio = 1
563
+ leg2.action = "SELL"
564
+ leg2.exchange = "IPE"
565
+
566
+ contract.comboLegs = []
567
+ contract.comboLegs.append(leg1)
568
+ contract.comboLegs.append(leg2)
569
+ #! [smartfuturespread]
570
+ return contract
571
+ =end
572
+ # def rInterCmdtyFuturesContract()
573
+ # Bag.new symbol: 'CL.BZ', currency: 'USD', exchange: 'NYMEX', legs:
574
+ # [ ComboLeg.new( con_id: 47207310, action: :buy, exchange: 'NYMEX', ratio: 1), # CL Dec'16 @NYMEX
575
+ # ComboLeg.new( con_id: 47195961, action: :sell, exchange: 'NYMEX', ratio: 1 ) ] # #BZ Dec'16 @NYMEX
576
+ # end
577
+ =begin
578
+ #! [intcmdfutcontract]
579
+ #
580
+ contract = Contract()
581
+ contract.symbol = "CL.BZ" #symbol is 'local symbol' of intercommodity spread.
582
+ contract.secType = "BAG"
583
+ contract.currency = "USD"
584
+ contract.exchange = "NYMEX"
585
+
586
+ leg1 = ComboLeg()
587
+ leg1.conId = 47207310 #CL Dec'16 @NYMEX
588
+ leg1.ratio = 1
589
+ leg1.action = "BUY"
590
+ leg1.exchange = "NYMEX"
591
+
592
+ leg2 = ComboLeg()
593
+ leg2.conId = 47195961 #BZ Dec'16 @NYMEX
594
+ leg2.ratio = 1
595
+ leg2.action = "SELL"
596
+ leg2.exchange = "NYMEX"
597
+
598
+ contract.comboLegs = []
599
+ contract.comboLegs.append(leg1)
600
+ contract.comboLegs.append(leg2)
601
+ #! [intcmdfutcontract]
602
+ return contract
603
+
604
+
605
+ @staticmethod
606
+ def NewsFeedForQuery():
607
+ #! [newsfeedforquery]
608
+ contract = Contract()
609
+ contract.secType = "NEWS"
610
+ contract.exchange = "BT" #Briefing Trader
611
+ #! [newsfeedforquery]
612
+ return contract
613
+
614
+
615
+ @staticmethod
616
+ def BTbroadtapeNewsFeed():
617
+ #! [newscontractbt]
618
+ contract = Contract()
619
+ contract.symbol = "BT:BT_ALL" #BroadTape All News
620
+ contract.secType = "NEWS"
621
+ contract.exchange = "BT" #Briefing Trader
622
+ #! [newscontractbt]
623
+ return contract
624
+
625
+
626
+ @staticmethod
627
+ def BZbroadtapeNewsFeed():
628
+ #! [newscontractbz]
629
+ contract = Contract()
630
+ contract.symbol = "BZ:BZ_ALL" #BroadTape All News
631
+ contract.secType = "NEWS"
632
+ contract.exchange = "BZ" #Benzinga Pro
633
+ #! [newscontractbz]
634
+ return contract
635
+
636
+
637
+ @staticmethod
638
+ def FLYbroadtapeNewsFeed():
639
+ #! [newscontractfly]
640
+ contract = Contract()
641
+ contract.symbol = "FLY:FLY_ALL" #BroadTape All News
642
+ contract.secType = "NEWS"
643
+ contract.exchange = "FLY" #Fly on the Wall
644
+ #! [newscontractfly]
645
+ return contract
646
+
647
+
648
+ @staticmethod
649
+ def MTbroadtapeNewsFeed():
650
+ #! [newscontractmt]
651
+ contract = Contract()
652
+ contract.symbol = "MT:MT_ALL" #BroadTape All News
653
+ contract.secType = "NEWS"
654
+ contract.exchange = "MT" #Midnight Trader
655
+ #! [newscontractmt]
656
+ return contract
657
+
658
+ @staticmethod
659
+ def ContFut():
660
+ #! [continuousfuturescontract]
661
+ contract = Contract()
662
+ contract.symbol = "ES"
663
+ contract.secType = "CONTFUT"
664
+ contract.exchange = "GLOBEX"
665
+ #! [continuousfuturescontract]
666
+ return contract
667
+
668
+ @staticmethod
669
+ def ContAndExpiringFut():
670
+ #! [contandexpiringfut]
671
+ contract = Contract()
672
+ contract.symbol = "ES"
673
+ contract.secType = "FUT+CONTFUT"
674
+ contract.exchange = "GLOBEX"
675
+ #! [contandexpiringfut]
676
+ return contract
677
+
678
+ @staticmethod
679
+ def JefferiesContract():
680
+ #! [jefferies_contract]
681
+ contract = Contract()
682
+ contract.symbol = "AAPL"
683
+ contract.secType = "STK"
684
+ contract.exchange = "JEFFALGO"
685
+ contract.currency = "USD"
686
+ #! [jefferies_contract]
687
+ return contract
688
+
689
+ @staticmethod
690
+ def CSFBContract():
691
+ #! [csfb_contract]
692
+ contract = Contract()
693
+ contract.symbol = "IBKR"
694
+ contract.secType = "STK"
695
+ contract.exchange = "CSFBALGO"
696
+ contract.currency = "USD"
697
+ #! [csfb_contract]
698
+ return contract
699
+ =end
700
+
701
+ end # module
702
+
703
+ ## execute if called from OS
704
+ if $0 == __FILE__
705
+
706
+ mod_methods= ContractSamples.public_instance_methods
707
+ include ContractSamples
708
+ any_contracts = mod_methods.map do | method |
709
+ self.send( method )
710
+ end
711
+ puts "Defined Contracts:"
712
+ puts "------------------"
713
+ puts any_contracts.map.with_index{|x,i| i.to_s + ": " + mod_methods[i][1..-1] + "\t->" + x.to_human }.join( "\n" )
714
+
715
+
716
+ end