https://github.com/bhomnick/bexchange
A simple limit order book implemented in Go
https://github.com/bhomnick/bexchange
exchanges go golang trading
Last synced: 2 months ago
JSON representation
A simple limit order book implemented in Go
- Host: GitHub
- URL: https://github.com/bhomnick/bexchange
- Owner: bhomnick
- License: mit
- Created: 2017-10-19T08:25:21.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-10-29T08:04:06.000Z (over 8 years ago)
- Last Synced: 2024-06-20T11:45:55.491Z (almost 2 years ago)
- Topics: exchanges, go, golang, trading
- Language: Go
- Homepage:
- Size: 9.77 KB
- Stars: 24
- Watchers: 5
- Forks: 9
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# bexchange
[](https://travis-ci.org/bhomnick/bexchange)
The `bexchange` package is a simple limit order book implemented as a go exercise. Currently limit buys, sells, and order cancellation are all supported.
## Example
```go
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 `actions` channel is written to by the order book and read by an action handler. For debugging purposes a `ConsoleActionHandler` is included that simply prints actions to the console as they arrive.
- When the `Done` command is issued the program should block on the action handler to finish processing outstanding actions. The `done` channel allows this syncrhonization.
## Future features
- Serialize orderbook reads and writes to add consistency across trader clients
- Add a websocket layer and web interface