forked from adshao/binance-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathactions.go
87 lines (80 loc) · 2.11 KB
/
actions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package main
import (
"strconv"
"github.com/adshao/go-binance"
"github.com/juju/errors"
)
func listBalances(assets []string, total bool) error {
return accountsDo(func(account *Account) (interface{}, error) {
err := account.UpdateBalances(assets)
if err != nil {
return nil, errors.Trace(err)
}
return account.Balances, nil
}, func(results map[string]interface{}) (interface{}, error) {
if !total {
return results, nil
}
totalResults := make(map[string]float64)
for _, res := range results {
assets, ok := res.([]binance.Balance)
if !ok {
continue
}
for _, asset := range assets {
free, _ := strconv.ParseFloat(asset.Free, 64)
locked, _ := strconv.ParseFloat(asset.Locked, 64)
totalResults[asset.Asset] += free + locked
}
}
return []interface{}{results, totalResults}, nil
})
}
func listOpenOrders(symbol string) error {
return accountsDo(func(account *Account) (interface{}, error) {
orders, err := account.ListOpenOrders(symbol)
if err != nil {
return nil, errors.Trace(err)
}
return orders, nil
})
}
func listPrices(symbol string) error {
return runOnce(func(account *Account) (interface{}, error) {
prices, err := account.ListPrices(symbol)
if err != nil {
return nil, errors.Trace(err)
}
return prices, nil
})
}
func cancelOrders(symbol string) error {
return accountsDo(
func(account *Account) (interface{}, error) {
var canceledOrders []int64
orders, err := account.ListOpenOrders(symbol)
if err != nil {
return nil, errors.Trace(err)
}
for _, order := range orders {
err = account.CancelOrder(symbol, order.OrderID)
if err != nil {
return nil, errors.Trace(err)
}
canceledOrders = append(canceledOrders, order.OrderID)
}
return canceledOrders, nil
})
}
func createOrder(symbol, side, quantity, price string) error {
return accountsDo(
func(account *Account) (interface{}, error) {
var orderIDs []int64
res, err := account.CreateOrder(symbol, side, quantity, price)
if err != nil {
return nil, errors.Trace(err)
}
orderIDs = append(orderIDs, res.OrderID)
return orderIDs, nil
})
}