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
|