File tree 5 files changed +113
-0
lines changed
5 files changed +113
-0
lines changed Original file line number Diff line number Diff line change
1
+ module Study/AntonyGG/cryptoexchange
2
+
3
+ go 1.20
Original file line number Diff line number Diff line change
1
+ package main
2
+
3
+ func main () {
4
+
5
+ }
Original file line number Diff line number Diff line change
1
+ build :
2
+ go build -o bin/exchange
3
+
4
+ run : build
5
+ ./bin/exchange
6
+
7
+ test :
8
+ go test -v ./...
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments