Module: IB::StockSpread

Extended by:
SpreadPrototype
Defined in:
lib/ib/spread_prototypes/stock-spread.rb

Class Method Summary collapse

Methods included from SpreadPrototype

build, defaults, initialize_spread, optional, parameters, requirements

Class Method Details

.fabricate(*underlying, ratio: [1,-1], **args) ⇒ Object

Fabricate a StockSpread from Scratch

-----------------------------------------

 Call with 
 IB::StockSpread.fabricate  'GE','F', ratio:[1,-2]

 or
 IB::StockSpread.fabricate  IB::Stock.new(symbol:'GE'), 'F', ratio:[1,-2]


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/ib/spread_prototypes/stock-spread.rb', line 19

def  fabricate *underlying,  ratio: [1,-1], **args
	#
	are_stocks =  ->(l){ l.all?{|y| y.is_a? IB::Stock} }
	legs = underlying.map{|y| y.is_a?( IB::Stock ) ? y.merge(**args) : IB::Stock.new( symbol: y ).merge(**args)}
	error "only spreads with two underyings of type »IB::Stock« are supported" unless legs.size==2 && are_stocks[legs]
	initialize_spread( legs.first ) do | the_spread |
		c_l = legs.zip(ratio).map do |l,r| 
		action = r >0 ?  :buy : :sell
		the_spread.add_leg  l,  action: action,  ratio: r.abs 
	end
	the_spread.description =  the_description( the_spread )
	the_spread.symbol = legs.map( &:symbol ).sort.join(",")  # alphabetical order

	end
end

.order_requirementsObject

always route a order as NonGuaranteed



42
43
44
# File 'lib/ib/spread_prototypes/stock-spread.rb', line 42

def order_requirements
	{	combo_params:  ['NonGuaranteed', true] }
end

.the_description(spread) ⇒ Object



35
36
37
38
39
# File 'lib/ib/spread_prototypes/stock-spread.rb', line 35

def the_description spread
	info=  spread.legs.map( &:symbol ).zip(spread.combo_legs.map( &:weight ))
	"<StockSpread #{info.map{|c| c.join(":")}.join(" , ")} (#{spread.currency} )>"

end