orderbook

package module
v0.0.0-...-5b5ab00 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 30, 2021 License: MIT Imports: 7 Imported by: 0

README

orderbook

orderbook for trading match engine 交易撮合引擎订单簿

Installation

go get github.com/san-pang/orderbook

Example:

import github.com/san-pang/orderbook

buyorder := newMyOrder("010", "ord1", decimal.NewFromFloat(12.34), decimal.NewFromInt(300), SIDE_BUY)
sellorder := newMyOrder("030", "ord3", decimal.NewFromFloat(12.36), decimal.NewFromInt(500), SIDE_SELL)
orderbook := NewOrderBook("000776")

// add order
if err := orderbook.AddOrder(buyorder.GetSide(), buyorder); err != nil {
  fmt.Println("add order failed:", err)
}
if err := orderbook.AddOrder(sellorder.GetSide(), sellorder); err != nil {
  fmt.Println("add order failed:", err)
}

// cancel order
if err := orderbook.CancelOrder(buyorder.GetSide(), buyorder.GetClOrdID()); err != nil {
  fmt.Println("cancel order failed:", err)
}

// update order
replaceOrder := *sellorder
replaceOrder.Qty = decimal.NewFromInt(1100)
if err := orderbook.UpdateOrder(replaceOrder.GetSide(), sellorder, &replaceOrder); err != nil {
  fmt.Println("update order failed:", err)
}

more examples can be found in test file.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ERR_ORDER_NOT_EXISTS    = errors.New("order not found")
	ERR_SIDE_INVALID        = errors.New("side is invalid")
	ERR_DULPLICATE_ORDER    = errors.New("order already exists")
	ERR_CANNOT_UPDATE_ORDER = errors.New("price or orderid is not same, not allow to update")
	ERR_PRICELEVEL_NOTFOUND = errors.New("price level not found")
)

Functions

This section is empty.

Types

type Order

type Order interface {
	GetApplID() string         //业务标识
	GetClOrdID() string        //订单号
	GetPrice() decimal.Decimal //委托价格
	GetQty() decimal.Decimal   //委托数量
	String() string            // 订单的字符串打印数据
}

type OrderBook

type OrderBook struct {
	// contains filtered or unexported fields
}

func NewOrderBook

func NewOrderBook(securityID string) *OrderBook

func (*OrderBook) AddOrder

func (ob *OrderBook) AddOrder(side OrderSide, order Order) error

func (*OrderBook) Buys

func (ob *OrderBook) Buys() *OrderTree

func (*OrderBook) CancelOrder

func (ob *OrderBook) CancelOrder(side OrderSide, orderID string) error

func (*OrderBook) GetOrder

func (ob *OrderBook) GetOrder(side OrderSide, orderID string) (*list.Element, error)

func (*OrderBook) SecurityID

func (ob *OrderBook) SecurityID() string

func (*OrderBook) Sells

func (ob *OrderBook) Sells() *OrderTree

func (*OrderBook) UpdateOrder

func (ob *OrderBook) UpdateOrder(side OrderSide, oldOrder Order, newOrder Order) error

type OrderList

type OrderList struct {
	// contains filtered or unexported fields
}

func NewOrderList

func NewOrderList(price decimal.Decimal) *OrderList

func (*OrderList) Head

func (ol *OrderList) Head() *list.Element

func (*OrderList) Len

func (ol *OrderList) Len() int

func (*OrderList) Price

func (ol *OrderList) Price() decimal.Decimal

func (*OrderList) Push

func (ol *OrderList) Push(o Order) *list.Element

func (*OrderList) Qty

func (ol *OrderList) Qty() decimal.Decimal

func (*OrderList) Remove

func (ol *OrderList) Remove(e *list.Element) Order

func (*OrderList) String

func (ol *OrderList) String() string

func (*OrderList) Tail

func (ol *OrderList) Tail() *list.Element

type OrderSide

type OrderSide string

买卖方向,订单簿只设置买入和卖出的委托方向,其它的委托方向例如申购、赎回,需要自己转换成买入和卖出

const SIDE_BUY OrderSide = "1" // 买入
const SIDE_SELL OrderSide = "2" // 卖出

type OrderTree

type OrderTree struct {
	// contains filtered or unexported fields
}

func NewOrderTree

func NewOrderTree() *OrderTree

func (*OrderTree) Add

func (ot *OrderTree) Add(o Order) *list.Element

func (*OrderTree) Depth

func (ot *OrderTree) Depth() int

func (*OrderTree) GreaterEqualThan

func (ot *OrderTree) GreaterEqualThan(price decimal.Decimal) *OrderList

func (*OrderTree) GreaterThan

func (ot *OrderTree) GreaterThan(price decimal.Decimal) *OrderList

func (*OrderTree) Len

func (ot *OrderTree) Len() int

func (*OrderTree) LessEqualThan

func (ot *OrderTree) LessEqualThan(price decimal.Decimal) *OrderList

func (*OrderTree) LessThan

func (ot *OrderTree) LessThan(price decimal.Decimal) *OrderList

func (*OrderTree) MaxPriceOrderList

func (ot *OrderTree) MaxPriceOrderList() *OrderList

func (*OrderTree) MinPriceOrderList

func (ot *OrderTree) MinPriceOrderList() *OrderList

func (*OrderTree) Orders

func (ot *OrderTree) Orders() (orders []*list.Element)

func (*OrderTree) OrdersByPrice

func (ot *OrderTree) OrdersByPrice(price decimal.Decimal) (orders []*list.Element)

func (*OrderTree) Qty

func (ot *OrderTree) Qty() decimal.Decimal

func (*OrderTree) Remove

func (ot *OrderTree) Remove(e *list.Element) Order

func (*OrderTree) String

func (ot *OrderTree) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL