The bexchange package is a simple limit order book implemented as a go exercise. Currently limit buys, sells, and order cancellation are all supported.
package main
import (
bx "github.com/bhomnick/bexchange"
)
func main() {
actions := make(chan *bx.Action)
done := make(chan bool)
go bx.ConsoleActionHandler(actions, done)
ob := bx.NewOrderBook(actions)
ob.AddOrder(bx.NewOrder(1, false, 50, 50))
ob.AddOrder(bx.NewOrder(2, false, 45, 25))
ob.AddOrder(bx.NewOrder(3, false, 45, 25))
ob.AddOrder(bx.NewOrder(4, true, 55, 75))
ob.CancelOrder(1)
ob.Done()
<-done
}As the order book receives commands it generates action messages that needed to be handled to ensure durability. Two channels are used in this example:
- The
actionschannel is written to by the order book and read by an action handler. For debugging purposes aConsoleActionHandleris included that simply prints actions to the console as they arrive. - When the
Donecommand is issued the program should block on the action handler to finish processing outstanding actions. Thedonechannel allows this syncrhonization.
- Serialize orderbook reads and writes to add consistency across trader clients
- Add a websocket layer and web interface