forked from bitfinexcom/bitfinex-api-go
/
margin_funding.go
138 lines (107 loc) · 3.39 KB
/
margin_funding.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package bitfinex
import "strconv"
type MarginFundingService struct {
client *Client
}
type MarginOffer struct {
ID int64
Currency string
Rate string
Period int
Direction string
Timestamp string
IsLive bool `json:"is_live"`
IsCancelled bool `json:"is_cancelled"`
OriginalAmount string `json:"original_amount"`
RemainingAmount string `json:"remaining_amount"`
ExecutedAmount string `json:"executed_amount"`
OfferId int
}
func (s *MarginFundingService) new(currency, direction string, amount, rate float64, period int) (MarginOffer, error) {
payload := map[string]interface{}{
"currency": currency,
"amount": strconv.FormatFloat(amount, 'f', -1, 32),
"rate": strconv.FormatFloat(rate, 'f', -1, 32),
"period": period,
"direction": direction,
}
req, err := s.client.newAuthenticatedRequest("POST", "offer/new", payload)
if err != nil {
return MarginOffer{}, err
}
var v MarginOffer
_, err = s.client.do(req, &v)
if err != nil {
return MarginOffer{}, err
}
return v, nil
}
func (s *MarginFundingService) NewLend(currency string, amount, rate float64, period int) (MarginOffer, error) {
return s.new(currency, "lend", amount, rate, period)
}
func (s *MarginFundingService) NewLoan(currency string, amount, rate float64, period int) (MarginOffer, error) {
return s.new(currency, "loan", amount, rate, period)
}
func (s *MarginFundingService) Cancel(offerId int64) (MarginOffer, error) {
payload := map[string]interface{}{"offer_id": offerId}
req, err := s.client.newAuthenticatedRequest("POST", "offer/cancel", payload)
if err != nil {
return MarginOffer{}, err
}
var v MarginOffer
_, err = s.client.do(req, &v)
if err != nil {
return MarginOffer{}, err
}
return v, nil
}
func (s *MarginFundingService) Status(offerId int64) (MarginOffer, error) {
payload := map[string]interface{}{"offer_id": offerId}
req, err := s.client.newAuthenticatedRequest("POST", "offer/status", payload)
if err != nil {
return MarginOffer{}, err
}
var v MarginOffer
_, err = s.client.do(req, &v)
if err != nil {
return MarginOffer{}, err
}
return v, nil
}
type ActiveOffer struct {
ID int64
Currency string
Rate string
Period int
Direction string
Timestamp string
IsLive bool `json:"is_live"`
IsCancelled bool `json:"is_cancelled"`
OriginalAmount string `json:"original_amount"`
RemainingAmount string `json:"remaining_amount"`
ExecutedAmount string `json:"executed_amount"`
}
func (s *MarginFundingService) Credits() ([]ActiveOffer, error) {
req, err := s.client.newAuthenticatedRequest("POST", "credits", nil)
if err != nil {
return nil, err
}
var v []ActiveOffer
_, err = s.client.do(req, &v)
if err != nil {
return nil, err
}
return v, nil
}
func (s *MarginFundingService) Offers() ([]ActiveOffer, error) {
req, err := s.client.newAuthenticatedRequest("POST", "offers", nil)
if err != nil {
return nil, err
}
var v []ActiveOffer
_, err = s.client.do(req, &v)
if err != nil {
return nil, err
}
return v, nil
}