Module: IB::Symbols
- Included in:
- Bonds, CFD, Combo, Commodity, Forex, Futures, Index, Options, Stocks, Unspecified
- Defined in:
- lib/ib/symbols_base.rb,
lib/ib/symbols.rb,
lib/ib/symbols/cfd.rb,
lib/ib/symbols/bonds.rb,
lib/ib/symbols/combo.rb,
lib/ib/symbols/forex.rb,
lib/ib/symbols/index.rb,
lib/ib/symbols/stocks.rb,
lib/ib/symbols/futures.rb,
lib/ib/symbols/options.rb,
lib/ib/symbols/version.rb,
lib/ib/symbols/abstract.rb,
lib/ib/symbols/commodity.rb
Overview
Defined Under Namespace
Modules: Bonds, CFD, Combo, Commodity, Forex, Futures, Index, Options, Stocks, Unspecified
Classes: Error
Constant Summary
collapse
- VERSION =
"1.5"
- @@dir =
set the Pathname to “ib-api/symbols” by default
Pathname.new File.expand_path("../../../../symbols/", __FILE__ )
Class Method Summary
collapse
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *key) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/ib/symbols.rb', line 61
def method_missing(method, *key)
if key.empty?
if contracts.has_key?(method)
contracts[method]
elsif methods.include?(:each) && each.methods.include?(method)
self.each.send method
else
error "contract #{method} not defined. Try »all« for a list of defined Contracts.", :symbol
end
else
error "method missing"
end
end
|
Class Method Details
.allocate_collection(name) ⇒ Object
name might be a string or a symbol
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/ib/symbols/abstract.rb', line 36
def self.allocate_collection name symbol_table = Module.new do
extend Symbols
extend Enumerable
def self.yml_file
@@dir + name.to_s.downcase.split("::").last.concat( ".yml" )
end
def self.each &b
contracts.values.each &b
end
end name = name.to_s.camelize.to_sym
the_collection = if Symbols.send :const_defined?, name
Symbols.send :const_get, name
else
Symbols.const_set name, symbol_table
end
if the_collection.is_a? Symbols
the_collection.send :read_collection if the_collection.all.empty?
the_collection else
error "#{the_collection} is already a Class"
nil
end
end
|
.set_origin(directory) ⇒ Object
29
30
31
32
33
34
|
# File 'lib/ib/symbols/abstract.rb', line 29
def self.set_origin directory
p = Pathname.new directory
@@dir = p if p.directory?
rescue Errno::ENOENT
error "Setting up origin for symbol-files --> Directory (#{directory}) does not exist"
end
|
Instance Method Details
#[](symbol) ⇒ Object
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/ib/symbols.rb', line 88
def [] symbol
if c=contracts[symbol]
return c
else
file = self.to_s.split(/::/).last.downcase
msg = "Unknown symbol :#{symbol}, please pre-define it in lib/ib/symbols/#{file}.rb"
error msg, :symbol
end
end
|
#add_contract(symbol, contract) ⇒ Object
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/ib/symbols/abstract.rb', line 104
def add_contract symbol, contract
if symbol.is_a? String
symbol.to_sym
elsif symbol.is_a? Symbol
symbol
else
symbol.to_i
end
contract.description = contract.to_human[1..-2] if contract.description.nil?
contracts[ symbol ] = contract.essential
store_collection
end
|
#all ⇒ Object
75
76
77
|
# File 'lib/ib/symbols.rb', line 75
def all
contracts.keys.sort rescue contracts.keys
end
|
#bunch(bunch_count = 50, sleeping_time = 1) ⇒ Object
cuts the Collection in ‘bunch_count` pieces. Each bunch is delivered to the block.
Sleeps for ‘sleeping time` between processing bunches
Returns count of created bunches
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/ib/symbols/abstract.rb', line 75
def bunch( bunch_count = 50 , sleeping_time = 1)
en = self.each
the_size = en.size
i = 0
loop do
the_start = i * bunch_count
the_end = the_start + bunch_count
the_end = the_size -1 if the_end >= the_size
it = the_start .. the_end
yield it.map{|x| en.next rescue nil}.compact
break if the_end == the_size -1
i+=1
sleep sleeping_time
end
i -1 end
|
#contracts ⇒ Object
81
82
83
84
85
86
87
|
# File 'lib/ib/symbols.rb', line 81
def contracts
if @contracts.present?
@contracts
else
@contracts = Hash.new
end
end
|
#hardcoded? ⇒ Boolean
58
59
60
|
# File 'lib/ib/symbols.rb', line 58
def hardcoded?
!self.methods.include? :yml_file
end
|
#print_all ⇒ Object
78
79
80
|
# File 'lib/ib/symbols.rb', line 78
def print_all
puts contracts.sort.map{|x,y| [x,y.description].join(" -> ")}.join "\n"
end
|
#purge_collection ⇒ Object
63
64
65
66
|
# File 'lib/ib/symbols/abstract.rb', line 63
def purge_collection
yml_file.delete
@contracts = nil
end
|
#read_collection ⇒ Object
92
93
94
95
96
97
98
|
# File 'lib/ib/symbols/abstract.rb', line 92
def read_collection
if yml_file.exist?
contracts.merge! YAML.load_file yml_file rescue contracts
else
yml_file.open( "w"){}
end
end
|
#remove_contract(symbol) ⇒ Object
119
120
121
122
|
# File 'lib/ib/symbols/abstract.rb', line 119
def remove_contract symbol
@contracts.delete symbol
store_collection
end
|
#store_collection ⇒ Object
100
101
102
|
# File 'lib/ib/symbols/abstract.rb', line 100
def store_collection
yml_file.open( 'w' ){|f| f.write @contracts.to_yaml}
end
|
#to_human ⇒ Object
125
126
127
|
# File 'lib/ib/symbols/abstract.rb', line 125
def to_human
self.to_s.split("::").last
end
|