Skip to content

Commit 7e17f24

Browse files
committed
Initial commit
0 parents  commit 7e17f24

File tree

5 files changed

+113
-0
lines changed

5 files changed

+113
-0
lines changed

go.mod

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module Study/AntonyGG/cryptoexchange
2+
3+
go 1.20

main.go

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package main
2+
3+
func main() {
4+
5+
}

makefile

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
build:
2+
go build -o bin/exchange
3+
4+
run: build
5+
./bin/exchange
6+
7+
test:
8+
go test -v ./...

orderbook.go

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"time"
6+
)
7+
8+
type Order struct {
9+
Size float64
10+
Bid bool
11+
Limit *Limit
12+
Timestamp int64
13+
}
14+
15+
type Limit struct {
16+
Price float64
17+
Orders []*Order
18+
TotalVolume float64
19+
}
20+
21+
type Orderbook struct {
22+
Asks []*Limit
23+
Bids []*Limit
24+
AskLimits map[float64]*Limit
25+
BidLimits map[float64]*Limit
26+
}
27+
28+
func NewLimit(price float64) *Limit {
29+
return &Limit{
30+
Price: price,
31+
Orders: []*Order{},
32+
}
33+
}
34+
35+
func NewOrder(bid bool, size float64) *Order {
36+
return &Order{
37+
Size: size,
38+
Bid: bid,
39+
Timestamp: time.Now().UnixNano(),
40+
}
41+
}
42+
43+
func (l *Limit) AddOrder(o *Order) {
44+
o.Limit = l
45+
l.Orders = append(l.Orders, o)
46+
l.TotalVolume += o.Size
47+
}
48+
49+
func (o *Order) String() string {
50+
return fmt.Sprintf("size: %2.f", o.Size)
51+
}
52+
53+
func (l *Limit) DeleteOrder(o *Order) {
54+
for i := 0; i < len(l.Orders); i++ {
55+
if l.Orders[i] == o {
56+
l.Orders[i] = l.Orders[len(l.Orders)-1]
57+
l.Orders = l.Orders[:len(l.Orders)-1]
58+
}
59+
}
60+
61+
o.Limit = nil
62+
l.TotalVolume -= o.Size
63+
}
64+
65+
func NewOrderbook() *Orderbook {
66+
return &Orderbook{
67+
Asks: []*Limit{},
68+
Bids: []*Limit{},
69+
AskLimits: make(map[float64]*Limit),
70+
BidLimits: make(map[float64]*Limit),
71+
}
72+
}

orderbook_test.go

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
func TestLimit(t *testing.T) {
9+
l := NewLimit(10000)
10+
buyOrderA := NewOrder(true, 5)
11+
buyOrderB := NewOrder(true, 8)
12+
buyOrderC := NewOrder(true, 10)
13+
14+
l.AddOrder(buyOrderA)
15+
l.AddOrder(buyOrderB)
16+
l.AddOrder(buyOrderC)
17+
18+
l.DeleteOrder(buyOrderB)
19+
20+
fmt.Println(l)
21+
}
22+
23+
func TestOrderbook(t *testing.T) {
24+
ob := NewOrderbook()
25+
}

0 commit comments

Comments
 (0)