Class: Gekko::Order
- Inherits:
-
Object
- Object
- Gekko::Order
- Defined in:
- lib/gekko/order.rb
Overview
Represents a trade order. Trade orders can be either buy (bid) or sell (ask) orders. All orders are identified by an UUID, and must specify a size, and an optional expiration timestamp.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#created_at ⇒ Object
Returns the value of attribute created_at.
-
#expiration ⇒ Object
Returns the value of attribute expiration.
-
#id ⇒ Object
Returns the value of attribute id.
-
#price ⇒ Object
Returns the value of attribute price.
-
#remaining ⇒ Object
Returns the value of attribute remaining.
-
#side ⇒ Object
Returns the value of attribute side.
-
#size ⇒ Object
Returns the value of attribute size.
Instance Method Summary collapse
-
#ask? ⇒ Boolean
Returns
trueif this order is a sell order. -
#bid? ⇒ Boolean
Returns
trueif this order is a buy order. -
#crosses?(limit_order) ⇒ Boolean
Returns
trueif this order can execute againstlimit_order. -
#expired? ⇒ Boolean
Returns
trueif this order is expired. -
#fill_or_kill? ⇒ Boolean
Returns
trueif this order isn’t supposed to stick around in the order book. -
#initialize(side, id, size, expiration = nil) ⇒ Order
constructor
A new instance of Order.
-
#message(type, extra_attrs = {}) ⇒ Hash
Creates a message in order to print it ont the tape.
Constructor Details
#initialize(side, id, size, expiration = nil) ⇒ Order
Returns a new instance of Order.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/gekko/order.rb', line 12 def initialize(side, id, size, expiration = nil) @id = id @side = side && side.to_sym @size = size @remaining = @size @expiration = expiration @created_at = Time.now.to_f raise 'Orders must have an UUID' unless @id && @id.is_a?(UUID) raise 'Side must be either :bid or :ask' unless [:bid, :ask].include?(@side) raise 'Size must be a positive integer' if (@size && (!@size.is_a?(Fixnum) || @size <= 0)) raise 'Expiration must be omitted or be an integer' unless (@expiration.nil? || (@expiration.is_a?(Fixnum) && @expiration > 0)) raise 'The order creation timestamp can''t be nil' if !@created_at end |
Instance Attribute Details
#created_at ⇒ Object
Returns the value of attribute created_at.
10 11 12 |
# File 'lib/gekko/order.rb', line 10 def created_at @created_at end |
#expiration ⇒ Object
Returns the value of attribute expiration.
10 11 12 |
# File 'lib/gekko/order.rb', line 10 def expiration @expiration end |
#id ⇒ Object
Returns the value of attribute id.
10 11 12 |
# File 'lib/gekko/order.rb', line 10 def id @id end |
#price ⇒ Object
Returns the value of attribute price.
10 11 12 |
# File 'lib/gekko/order.rb', line 10 def price @price end |
#remaining ⇒ Object
Returns the value of attribute remaining.
10 11 12 |
# File 'lib/gekko/order.rb', line 10 def remaining @remaining end |
#side ⇒ Object
Returns the value of attribute side.
10 11 12 |
# File 'lib/gekko/order.rb', line 10 def side @side end |
#size ⇒ Object
Returns the value of attribute size.
10 11 12 |
# File 'lib/gekko/order.rb', line 10 def size @size end |
Instance Method Details
#ask? ⇒ Boolean
Returns true if this order is a sell order
73 74 75 |
# File 'lib/gekko/order.rb', line 73 def ask? !bid? end |
#bid? ⇒ Boolean
Returns true if this order is a buy order
66 67 68 |
# File 'lib/gekko/order.rb', line 66 def bid? side == :bid end |
#crosses?(limit_order) ⇒ Boolean
Returns true if this order can execute against limit_order
33 34 35 36 37 38 39 40 41 |
# File 'lib/gekko/order.rb', line 33 def crosses?(limit_order) if limit_order raise 'Can not test againt a market order' unless limit_order.is_a?(LimitOrder) if bid? ^ limit_order.bid? is_a?(MarketOrder) || (bid? && (price >= limit_order.price)) || (ask? && (price <= limit_order.price)) end end end |
#expired? ⇒ Boolean
Returns true if this order is expired
88 89 90 |
# File 'lib/gekko/order.rb', line 88 def expired? expiration && (expiration <= Time.now.to_i) end |
#fill_or_kill? ⇒ Boolean
Returns true if this order isn’t supposed to stick around in the order book
81 82 83 |
# File 'lib/gekko/order.rb', line 81 def fill_or_kill? is_a?(Gekko::MarketOrder) end |
#message(type, extra_attrs = {}) ⇒ Hash
Creates a message in order to print it ont the tape
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/gekko/order.rb', line 52 def (type, extra_attrs = {}) { type: type, order_id: id.to_s, side: side, size: size, remaining: remaining, price: price }.merge(extra_attrs) end |