Documentation ¶
Index ¶
- Variables
- type Order
- type OrderBook
- func (ob *OrderBook) CancelOrder(orderID string) *Order
- func (ob *OrderBook) ProcessLimitOrder(side Side, orderID string, quantity, price decimal.Decimal) (done []*Order, partial *Order, err error)
- func (ob *OrderBook) ProcessMarketOrder(side Side, quantity decimal.Decimal) (done []*Order, partial *Order, quantityLeft decimal.Decimal, err error)
- func (ob *OrderBook) String() string
- type OrderQueue
- func (oq *OrderQueue) Append(o *Order) *list.Element
- func (oq *OrderQueue) Head() *list.Element
- func (oq *OrderQueue) Len() int
- func (oq *OrderQueue) Price() decimal.Decimal
- func (oq *OrderQueue) Remove(e *list.Element) *Order
- func (oq *OrderQueue) String() string
- func (oq *OrderQueue) Tail() *list.Element
- func (oq *OrderQueue) Update(e *list.Element, o *Order) *list.Element
- func (oq *OrderQueue) Volume() decimal.Decimal
- type OrderSide
- func (ot *OrderSide) Append(o *Order) *list.Element
- func (ot *OrderSide) Depth() int
- func (ot *OrderSide) Len() int
- func (ot *OrderSide) MaxPriceQueue() *OrderQueue
- func (ot *OrderSide) MinPriceQueue() *OrderQueue
- func (ot *OrderSide) Remove(e *list.Element) *Order
- func (ot *OrderSide) String() string
- type Side
Constants ¶
This section is empty.
Variables ¶
var ( ErrInvalidQuantity = errors.New("orderbook: invalid order quantity") ErrInvalidPrice = errors.New("orderbook: invalid order price") ErrOrderExists = errors.New("orderbook: order already exists") ErrOrderNotExists = errors.New("orderbook: order does not exist") )
OrderBook erros
Functions ¶
This section is empty.
Types ¶
type Order ¶
type Order struct {
// contains filtered or unexported fields
}
Order strores information about request
func NewOrder ¶
func NewOrder(orderID string, side Side, quantity, price decimal.Decimal, timestamp time.Time) *Order
NewOrder creates new constant object Order
func (*Order) Quantity ¶
Quantity returns quantity field copy
type OrderBook ¶
type OrderBook struct {
// contains filtered or unexported fields
}
OrderBook implements standard matching algorithm
func (*OrderBook) CancelOrder ¶
CancelOrder removes order with given ID from the order book
func (*OrderBook) ProcessLimitOrder ¶
func (ob *OrderBook) ProcessLimitOrder(side Side, orderID string, quantity, price decimal.Decimal) (done []*Order, partial *Order, err error)
ProcessLimitOrder places new order to the OrderBook Arguments:
side - what do you want to do (ob.Sell or ob.Buy) orderID - unique order ID in depth quantity - how much quantity you want to sell or buy price - no more expensive (or cheaper) this price * to create new decimal number you should use decimal.New() func read more at https://github.com/shopspring/decimal
Return:
error - not nil if quantity (or price) is less or equal 0. Or if order with given ID is exists done - not nil if your order produse ends of anoter order, this order will add to the "done" slice. If your order have done too, it will be places to this array too partial - not nil if your order has done but top order is not fully done. Or if your order is partial done and placed to the orderbook without full quantity - partial will contain your order with quantity to left
func (*OrderBook) ProcessMarketOrder ¶
func (ob *OrderBook) ProcessMarketOrder(side Side, quantity decimal.Decimal) (done []*Order, partial *Order, quantityLeft decimal.Decimal, err error)
ProcessMarketOrder immediately gets definite quantity from the order book with market price Arguments:
side - what do you want to do (ob.Sell or ob.Buy) quantity - how much quantity you want to sell or buy * to create new decimal number you should use decimal.New() func read more at https://github.com/shopspring/decimal
Return:
error - not nil if price is less or equal 0 done - not nil if your market order produse ends of anoter orders, this order will add to the "done" slice partial - not nil if your order has done but top order is not fully done quantityLeft - more than zero if it is not enought orders to process all quantity
type OrderQueue ¶
type OrderQueue struct {
// contains filtered or unexported fields
}
OrderQueue stores and manage chain of orders
func NewOrderQueue ¶
func NewOrderQueue(price decimal.Decimal) *OrderQueue
NewOrderQueue creates and initialize OrderQueue object
func (*OrderQueue) Append ¶
func (oq *OrderQueue) Append(o *Order) *list.Element
Append adds order to tail of the queue
func (*OrderQueue) Head ¶
func (oq *OrderQueue) Head() *list.Element
Head returns top order in queue
func (*OrderQueue) Price ¶
func (oq *OrderQueue) Price() decimal.Decimal
Price returns price level of the queue
func (*OrderQueue) Remove ¶
func (oq *OrderQueue) Remove(e *list.Element) *Order
Remove removes order from the queue and link order chain
func (*OrderQueue) String ¶
func (oq *OrderQueue) String() string
func (*OrderQueue) Tail ¶
func (oq *OrderQueue) Tail() *list.Element
Tail returns bottom order in queue
func (*OrderQueue) Update ¶
Update sets up new order to list value
func (*OrderQueue) Volume ¶
func (oq *OrderQueue) Volume() decimal.Decimal
Volume returns total orders volume
type OrderSide ¶
type OrderSide struct {
// contains filtered or unexported fields
}
OrderSide implements facade to operations with order queue
func (*OrderSide) Append ¶
Append appends order to definite price level
func (*OrderSide) MaxPriceQueue ¶
func (ot *OrderSide) MaxPriceQueue() *OrderQueue
MaxPriceQueue returns maximal level of price
func (*OrderSide) MinPriceQueue ¶
func (ot *OrderSide) MinPriceQueue() *OrderQueue
MinPriceQueue returns maximal level of price
func (*OrderSide) Remove ¶
Remove removes order from definite price level