Skip to content

Commit 67095c2

Browse files
committed
implement futures orderbook history
1 parent 5905362 commit 67095c2

File tree

3 files changed

+125
-0
lines changed

3 files changed

+125
-0
lines changed

v2/client.go

+11
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ type UserUniversalTransferType string
109109
// UserUniversalTransferStatus define the user universal transfer status
110110
type UserUniversalTransferStatusType string
111111

112+
// FuturesOrderBookHistoryDataType define the futures order book history data types
113+
type FuturesOrderBookHistoryDataType string
114+
112115
// Endpoints
113116
var (
114117
BaseAPIMainURL = "https://api.binance.com"
@@ -287,6 +290,9 @@ const (
287290
UserUniversalTransferStatusTypePending UserUniversalTransferStatusType = "PENDING"
288291
UserUniversalTransferStatusTypeConfirmed UserUniversalTransferStatusType = "CONFIRMED"
289292
UserUniversalTransferStatusTypeFailed UserUniversalTransferStatusType = "FAILED"
293+
294+
FuturesOrderBookHistoryDataTypeTDepth FuturesOrderBookHistoryDataType = "T_DEPTH"
295+
FuturesOrderBookHistoryDataTypeSDepth FuturesOrderBookHistoryDataType = "S_DEPTH"
290296
)
291297

292298
func currentTimestamp() int64 {
@@ -1291,3 +1297,8 @@ func (c *Client) NewSubAccountTransactionStatisticsService() *SubAccountTransact
12911297
func (c *Client) NewSubAccountFuturesAccountV2Service() *SubAccountFuturesAccountV2Service {
12921298
return &SubAccountFuturesAccountV2Service{c: c}
12931299
}
1300+
1301+
// Futures order book history service
1302+
func (c *Client) NewFuturesOrderBookHistoryService() *FuturesOrderBookHistoryService {
1303+
return &FuturesOrderBookHistoryService{c: c}
1304+
}

v2/futures_service.go

+61
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,64 @@ type FuturesTransfer struct {
143143
Timestamp int64 `json:"timestamp"`
144144
Status FuturesTransferStatusType `json:"status"`
145145
}
146+
147+
type FuturesOrderBookHistoryService struct {
148+
c *Client
149+
symbol string
150+
dataType string
151+
startTime int64
152+
endTime int64
153+
}
154+
155+
func (s *FuturesOrderBookHistoryService) Symbol(symbol string) *FuturesOrderBookHistoryService {
156+
s.symbol = symbol
157+
return s
158+
}
159+
160+
func (s *FuturesOrderBookHistoryService) DataType(dataType FuturesOrderBookHistoryDataType) *FuturesOrderBookHistoryService {
161+
s.dataType = string(dataType)
162+
return s
163+
}
164+
165+
func (s *FuturesOrderBookHistoryService) StartTime(startTime int64) *FuturesOrderBookHistoryService {
166+
s.startTime = startTime
167+
return s
168+
}
169+
170+
func (s *FuturesOrderBookHistoryService) EndTime(endTime int64) *FuturesOrderBookHistoryService {
171+
s.endTime = endTime
172+
return s
173+
}
174+
175+
func (s *FuturesOrderBookHistoryService) Do(ctx context.Context, opts ...RequestOption) (res *FuturesOrderBookHistory, err error) {
176+
r := &request{
177+
method: http.MethodGet,
178+
endpoint: "/sapi/v1/futures/histDataLink",
179+
secType: secTypeSigned,
180+
}
181+
r.setParams(params{
182+
"symbol": s.symbol,
183+
"dataType": s.dataType,
184+
"startTime": s.startTime,
185+
"endTime": s.endTime,
186+
})
187+
data, err := s.c.callAPI(ctx, r, opts...)
188+
if err != nil {
189+
return nil, err
190+
}
191+
res = new(FuturesOrderBookHistory)
192+
err = json.Unmarshal(data, &res)
193+
if err != nil {
194+
return nil, err
195+
}
196+
return res, nil
197+
}
198+
199+
type FuturesOrderBookHistoryItem struct {
200+
Day string `json:"day"`
201+
Url string `json:"url"`
202+
}
203+
204+
type FuturesOrderBookHistory struct {
205+
Data []*FuturesOrderBookHistoryItem `json:"data"`
206+
}

v2/futures_service_test.go

+53
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,56 @@ func (s *futuresTransferTestSuite) assertFuturesTransferEqual(e, a FuturesTransf
105105
r.Equal(e.Timestamp, a.Timestamp, "Timestamp")
106106
r.Equal(e.Status, a.Status, "Status")
107107
}
108+
109+
type futuresOrderBookHistoryTestSuite struct {
110+
baseTestSuite
111+
}
112+
113+
func TestFuturesOrderBookHistoryService(t *testing.T) {
114+
suite.Run(t, new(futuresOrderBookHistoryTestSuite))
115+
}
116+
117+
func (s *futuresOrderBookHistoryTestSuite) TestFuturesOrderBookHistory() {
118+
data := []byte(`{
119+
"data": [
120+
{
121+
"day": "2023-06-30",
122+
"url": "https://bin-prod-user-rebate-bucket.s3.ap-northeast-1.amazonaws.com/future-data-symbol-update/2023-06-30/BTCUSDT_T_DEPTH_2023-06-30.tar.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230925T025710Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86399&X-Amz-Credential=AKIAVL364M5ZNFZ74IPP%2F20230925%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Signature=5fffcb390d10f34d71615726f81f99e42d80a11532edeac77b858c51a88cbf59"
123+
}
124+
]
125+
}`)
126+
s.mockDo(data, nil)
127+
defer s.assertDo()
128+
symbol := "BTCUSDT"
129+
dataType := FuturesOrderBookHistoryDataTypeTDepth
130+
startTime := int64(1625040000000)
131+
endTime := int64(1625126399999)
132+
s.assertReq(func(r *request) {
133+
e := newSignedRequest().setParams(params{
134+
"symbol": symbol,
135+
"dataType": "T_DEPTH",
136+
"startTime": startTime,
137+
"endTime": endTime,
138+
})
139+
s.assertRequestEqual(e, r)
140+
})
141+
res, err := s.client.NewFuturesOrderBookHistoryService().Symbol(symbol).
142+
DataType(dataType).StartTime(startTime).EndTime(endTime).Do(newContext())
143+
s.r().NoError(err)
144+
e := &FuturesOrderBookHistory{
145+
Data: []*FuturesOrderBookHistoryItem{
146+
{
147+
Day: "2023-06-30",
148+
Url: "https://bin-prod-user-rebate-bucket.s3.ap-northeast-1.amazonaws.com/future-data-symbol-update/2023-06-30/BTCUSDT_T_DEPTH_2023-06-30.tar.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230925T025710Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86399&X-Amz-Credential=AKIAVL364M5ZNFZ74IPP%2F20230925%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Signature=5fffcb390d10f34d71615726f81f99e42d80a11532edeac77b858c51a88cbf59",
149+
},
150+
},
151+
}
152+
s.assertFuturesOrderBookHistoryEqual(e, res)
153+
}
154+
155+
func (s *futuresOrderBookHistoryTestSuite) assertFuturesOrderBookHistoryEqual(a, e *FuturesOrderBookHistory) {
156+
for index, v := range a.Data {
157+
v.Day = e.Data[index].Day
158+
v.Url = e.Data[index].Url
159+
}
160+
}

0 commit comments

Comments
 (0)