Class: Trader::Slope
- Inherits:
-
Object
- Object
- Trader::Slope
- Defined in:
- lib/trade-o-matic/structs/slope.rb
Instance Attribute Summary collapse
-
#pair ⇒ Object
readonly
Returns the value of attribute pair.
Instance Method Summary collapse
- #add_order(_price, _volume) ⇒ Object
- #assess(_amount, _skip_volume = nil) ⇒ Object
-
#initialize(_pair) ⇒ Slope
constructor
A new instance of Slope.
- #price(_skip_volume = nil) ⇒ Object
- #quote(_volume, _skip_volume = nil) ⇒ Object
- #reset ⇒ Object
- #volume_for_price(_price, _skip_volume = nil) ⇒ Object
Constructor Details
#initialize(_pair) ⇒ Slope
Returns a new instance of Slope.
5 6 7 8 |
# File 'lib/trade-o-matic/structs/slope.rb', line 5 def initialize(_pair) @pair = _pair reset end |
Instance Attribute Details
#pair ⇒ Object (readonly)
Returns the value of attribute pair.
3 4 5 |
# File 'lib/trade-o-matic/structs/slope.rb', line 3 def pair @pair end |
Instance Method Details
#add_order(_price, _volume) ⇒ Object
15 16 17 18 19 |
# File 'lib/trade-o-matic/structs/slope.rb', line 15 def add_order(_price, _volume) @orders_sorted = false @orders << Order.new(pair, instruction, _volume, _price) nil end |
#assess(_amount, _skip_volume = nil) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/trade-o-matic/structs/slope.rb', line 61 def assess(_amount, _skip_volume=nil) _amount = pair.quote.unpack _amount _skip_volume = pair.base.unpack _skip_volume, 0.0 total_volume = 0.0 slice(_skip_volume).each do |order, volume| order_quote = order.price.amount * volume if order_quote > _amount total_volume += _amount / order.price.amount break else total_volume += volume _amount -= order_quote end end Price.new pair.base, total_volume end |
#price(_skip_volume = nil) ⇒ Object
21 22 23 24 25 |
# File 'lib/trade-o-matic/structs/slope.rb', line 21 def price(_skip_volume=nil) _skip_volume = pair.base.unpack _skip_volume, 0.0 slice(_skip_volume).first[0].price end |
#quote(_volume, _skip_volume = nil) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/trade-o-matic/structs/slope.rb', line 49 def quote(_volume, _skip_volume=nil) _volume = pair.base.unpack _volume, 0.0 _skip_volume = pair.base.unpack _skip_volume, 0.0 total_price = 0.0 slice(_skip_volume, _volume).each do |order, order_volume| total_price += order_volume * order.price.amount end Price.new pair.quote, total_price end |
#reset ⇒ Object
10 11 12 13 |
# File 'lib/trade-o-matic/structs/slope.rb', line 10 def reset @orders = [] @orders_sorted = false end |
#volume_for_price(_price, _skip_volume = nil) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/trade-o-matic/structs/slope.rb', line 27 def volume_for_price(_price, _skip_volume=nil) _price = pair.quote.unpack _price _skip_volume = pair.base.unpack _skip_volume, 0.0 wt_price = 0.0 r_volume = 0.0 slice(_skip_volume).each do |order, volume| if compare(order.price.amount, _price) == -1 x = (_price - wt_price) * r_volume / (order.price.amount - _price) if x < volume volume = x end end wt_price = (wt_price * r_volume + order.price.amount * volume) / (r_volume + volume) r_volume += volume end Price.new pair.base, r_volume end |