OKGroup: Fix unmarshalling issues after API update (#288)

This commit is contained in:
Adrian Gallagher
2019-05-02 12:10:29 +10:00
committed by GitHub
parent 6e2cba566f
commit 5ea82f163a
2 changed files with 76 additions and 10 deletions

View File

@@ -3,6 +3,7 @@ package okex
import (
"fmt"
"net/http"
"strconv"
"time"
"github.com/thrasher-/gocryptotrader/common"
@@ -176,9 +177,66 @@ func (o *OKEX) GetFuturesContractInformation() (resp []okgroup.GetFuturesContrac
}
// GetFuturesOrderBook List all contracts. This request does not support pagination. The full list will be returned for a request.
func (o *OKEX) GetFuturesOrderBook(request okgroup.GetFuturesOrderBookRequest) (resp okgroup.GetFuturesOrderBookResponse, _ error) {
func (o *OKEX) GetFuturesOrderBook(request okgroup.GetFuturesOrderBookRequest) (resp okgroup.GetFuturesOrderBookResponse, err error) {
requestURL := fmt.Sprintf("%v/%v/%v%v", okgroup.OKGroupInstruments, request.InstrumentID, okgroup.OKGroupGetSpotOrderBook, okgroup.FormatParameters(request))
return resp, o.SendHTTPRequest(http.MethodGet, okGroupFuturesSubsection, requestURL, nil, &resp, true)
type tempOB struct {
Bids [][]string `json:"bids"`
Asks [][]string `json:"asks"`
Timestamp time.Time `json:"timestamp"`
}
var tmpOB tempOB
err = o.SendHTTPRequest(http.MethodGet, okGroupFuturesSubsection, requestURL, nil, &tmpOB, true)
if err != nil {
return resp, err
}
processOB := func(ob [][]string) ([]okgroup.FuturesOrderbookItem, error) {
var processedOB []okgroup.FuturesOrderbookItem
for x := range ob {
price, convErr := strconv.ParseFloat(ob[x][0], 64)
if err != nil {
return nil, convErr
}
size, convErr := strconv.ParseInt(ob[x][1], 10, 64)
if err != nil {
return nil, convErr
}
liqOrders, convErr := strconv.ParseInt(ob[x][2], 10, 64)
if err != nil {
return nil, convErr
}
numOrders, convErr := strconv.ParseInt(ob[x][3], 10, 64)
if err != nil {
return nil, convErr
}
processedOB = append(processedOB, okgroup.FuturesOrderbookItem{
Price: price,
Size: size,
ForceLiquidatedOrders: liqOrders,
NumberOrders: numOrders,
})
}
return processedOB, nil
}
resp.Bids, err = processOB(tmpOB.Bids)
if err != nil {
return
}
resp.Asks, err = processOB(tmpOB.Asks)
if err != nil {
return
}
resp.Timestamp = tmpOB.Timestamp
return resp, nil
}
// GetAllFuturesTokenInfo Get the last traded price, best bid/ask price, 24 hour trading volume and more info of all contracts.

View File

@@ -682,11 +682,19 @@ type GetFuturesOrderBookRequest struct {
Size int64 `url:"size,omitempty"` // [optional] The size of the price range (max: 200)
}
// FuturesOrderbookItem stores an individual futures orderbook item
type FuturesOrderbookItem struct {
Price float64
Size int64
ForceLiquidatedOrders int64 // Number of force liquidated orders
NumberOrders int64 // Number of orders on the price
}
// GetFuturesOrderBookResponse response data for GetFuturesOrderBook
type GetFuturesOrderBookResponse struct {
Asks [][]float64 `json:"asks"` // [[0: Price, 1: Size price, 2: number of force liquidated orders, 3: number of orders on the price]]
Bids [][]float64 `json:"bids"` // [[0: Price, 1: Size price, 2: number of force liquidated orders, 3: number of orders on the price]]
Timestamp time.Time `json:"timestamp"`
Asks []FuturesOrderbookItem
Bids []FuturesOrderbookItem
Timestamp time.Time
}
// GetFuturesTokenInfoResponse response data for GetFuturesOrderBook
@@ -782,7 +790,7 @@ type GetFuturesCurrentPriceLimitResponse struct {
// GetFuturesCurrentMarkPriceResponse response data for GetFuturesCurrentMarkPrice
type GetFuturesCurrentMarkPriceResponse struct {
MarkPrice float64 `json:"mark_price"`
MarkPrice float64 `json:"mark_price,string"`
InstrumentID string `json:"instrument_id"`
Timestamp time.Time `json:"timestamp"`
}
@@ -798,12 +806,12 @@ type GetFuturesForceLiquidatedOrdersRequest struct {
// GetFuturesForceLiquidatedOrdersResponse response data for GetFuturesForceLiquidatedOrders
type GetFuturesForceLiquidatedOrdersResponse struct {
Loss float64 `json:"loss"`
Size int64 `json:"size"`
Price float64 `json:"price"`
Loss float64 `json:"loss,string"`
Size int64 `json:"size,string"`
Price float64 `json:"price,string"`
CreatedAt string `json:"created_at"`
InstrumentID string `json:"instrument_id"`
Type int64 `json:"type"`
Type int64 `json:"type,string"`
}
// GetFuturesTagPriceResponse response data for GetFuturesTagPrice