diff --git a/exchanges/gateio/gateio_types.go b/exchanges/gateio/gateio_types.go index 2153f3e1..7d34ff0d 100644 --- a/exchanges/gateio/gateio_types.go +++ b/exchanges/gateio/gateio_types.go @@ -124,11 +124,12 @@ type SpotNewOrderRequestParams struct { // SpotNewOrderResponse Order response type SpotNewOrderResponse struct { - OrderNumber int64 `json:"orderNumber"` // OrderID number - Price float64 `json:"rate,string"` // Order price - LeftAmount float64 `json:"leftAmount,string"` // The remaining amount to fill - FilledAmount float64 `json:"filledAmount,string"` // The filled amount - Filledrate float64 `json:"filledRate,string"` // FilledPrice + OrderNumber int64 `json:"orderNumber"` // OrderID number + Price float64 `json:"rate,string"` // Order price + LeftAmount float64 `json:"leftAmount,string"` // The remaining amount to fill + FilledAmount float64 `json:"filledAmount,string"` // The filled amount + Filledrate interface{} `json:"filledRate"` // FilledPrice. if we send a market order, the exchange returns float64. + // if we set a limit order, which will remain in the order book, the exchange will return the string } // OpenOrdersResponse the main response from GetOpenOrders diff --git a/exchanges/gateio/gateio_wrapper.go b/exchanges/gateio/gateio_wrapper.go index 100240fc..68864f30 100644 --- a/exchanges/gateio/gateio_wrapper.go +++ b/exchanges/gateio/gateio_wrapper.go @@ -224,7 +224,7 @@ func (g *Gateio) SubmitOrder(p currency.Pair, side exchange.OrderSide, _ exchang response, err := g.SpotNewOrder(spotNewOrderRequestParams) if response.OrderNumber > 0 { - submitOrderResponse.OrderID = fmt.Sprintf("%v", response) + submitOrderResponse.OrderID = fmt.Sprintf("%v", response.OrderNumber) } if err == nil { @@ -371,6 +371,7 @@ func (g *Gateio) GetActiveOrders(getOrdersRequest *exchange.GetOrdersRequest) ([ OrderSide: side, Exchange: g.Name, CurrencyPair: symbol, + Status: resp.Orders[i].Status, }) } diff --git a/exchanges/huobi/huobi_wrapper.go b/exchanges/huobi/huobi_wrapper.go index df86bea6..7e77ca64 100644 --- a/exchanges/huobi/huobi_wrapper.go +++ b/exchanges/huobi/huobi_wrapper.go @@ -422,18 +422,22 @@ func (h *HUOBI) GetActiveOrders(getOrdersRequest *exchange.GetOrdersRequest) ([] } for i := range resp { - orderDate := time.Unix(resp[i].CreatedAt, 0) + orderDetail := exchange.OrderDetail{ + ID: fmt.Sprintf("%v", resp[i].ID), + Price: resp[i].Price, + Amount: resp[i].Amount, + CurrencyPair: c, + Exchange: h.Name, + ExecutedAmount: resp[i].FilledAmount, + OrderDate: time.Unix(resp[i].CreatedAt, 0), + Status: resp[i].State, + AccountID: strconv.FormatFloat(resp[i].AccountID, 'f', -1, 64), + Fee: resp[i].FilledFees, + } - orders = append(orders, exchange.OrderDetail{ - ID: fmt.Sprintf("%v", resp[i].ID), - Exchange: h.Name, - Amount: resp[i].Amount, - Price: resp[i].Price, - OrderDate: orderDate, - ExecutedAmount: resp[i].FilledAmount, - RemainingAmount: (resp[i].Amount - resp[i].FilledAmount), - CurrencyPair: c, - }) + setOrderSideAndType(resp[i].Type, &orderDetail) + + orders = append(orders, orderDetail) } } @@ -466,16 +470,22 @@ func (h *HUOBI) GetOrderHistory(getOrdersRequest *exchange.GetOrdersRequest) ([] } for i := range resp { - orderDate := time.Unix(resp[i].CreatedAt, 0) + orderDetail := exchange.OrderDetail{ + ID: fmt.Sprintf("%v", resp[i].ID), + Price: resp[i].Price, + Amount: resp[i].Amount, + CurrencyPair: c, + Exchange: h.Name, + ExecutedAmount: resp[i].FilledAmount, + OrderDate: time.Unix(resp[i].CreatedAt, 0), + Status: resp[i].State, + AccountID: strconv.FormatFloat(resp[i].AccountID, 'f', -1, 64), + Fee: resp[i].FilledFees, + } - orders = append(orders, exchange.OrderDetail{ - ID: fmt.Sprintf("%v", resp[i].ID), - Exchange: h.Name, - Amount: resp[i].Amount, - Price: resp[i].Price, - OrderDate: orderDate, - CurrencyPair: c, - }) + setOrderSideAndType(resp[i].Type, &orderDetail) + + orders = append(orders, orderDetail) } } @@ -484,3 +494,20 @@ func (h *HUOBI) GetOrderHistory(getOrdersRequest *exchange.GetOrdersRequest) ([] return orders, nil } + +func setOrderSideAndType(requestType string, orderDetail *exchange.OrderDetail) { + switch SpotNewOrderRequestParamsType(requestType) { + case SpotNewOrderRequestTypeBuyMarket: + orderDetail.OrderSide = exchange.BuyOrderSide + orderDetail.OrderType = exchange.MarketOrderType + case SpotNewOrderRequestTypeSellMarket: + orderDetail.OrderSide = exchange.SellOrderSide + orderDetail.OrderType = exchange.MarketOrderType + case SpotNewOrderRequestTypeBuyLimit: + orderDetail.OrderSide = exchange.BuyOrderSide + orderDetail.OrderType = exchange.LimitOrderType + case SpotNewOrderRequestTypeSellLimit: + orderDetail.OrderSide = exchange.SellOrderSide + orderDetail.OrderType = exchange.LimitOrderType + } +} diff --git a/exchanges/okgroup/okgroup_wrapper.go b/exchanges/okgroup/okgroup_wrapper.go index 0d6c4e7b..1465360d 100644 --- a/exchanges/okgroup/okgroup_wrapper.go +++ b/exchanges/okgroup/okgroup_wrapper.go @@ -364,9 +364,13 @@ func (o *OKGroup) GetActiveOrders(getOrdersRequest *exchange.GetOrdersRequest) ( } for i := range spotOpenOrders { resp = append(resp, exchange.OrderDetail{ + ID: spotOpenOrders[i].OrderID, + Price: spotOpenOrders[i].Price, Amount: spotOpenOrders[i].Size, CurrencyPair: currency, Exchange: o.Name, + OrderSide: exchange.OrderSide(spotOpenOrders[i].Side), + OrderType: exchange.OrderType(spotOpenOrders[i].Type), ExecutedAmount: spotOpenOrders[i].FilledSize, OrderDate: spotOpenOrders[i].Timestamp, Status: spotOpenOrders[i].Status, diff --git a/exchanges/poloniex/poloniex.go b/exchanges/poloniex/poloniex.go index 21c24ca8..8d1c4cd5 100644 --- a/exchanges/poloniex/poloniex.go +++ b/exchanges/poloniex/poloniex.go @@ -53,6 +53,8 @@ const ( poloniexAuthRate = 6 poloniexUnauthRate = 6 + + poloniexDateLayout = "2006-01-02 15:04:05" ) // Poloniex is the overarching type across the poloniex package @@ -477,20 +479,14 @@ func (p *Poloniex) GetAuthenticatedTradeHistory(start, end, limit int64) (Authen } values.Set("currencyPair", "all") - var result interface{} + var result AuthenticatedTradeHistoryAll - err := p.SendAuthenticatedHTTPRequest(http.MethodPost, poloniexTradeHistory, values, &result) + err := p.SendAuthenticatedHTTPRequest(http.MethodPost, poloniexTradeHistory, values, &result.Data) if err != nil { return AuthenticatedTradeHistoryAll{}, err } - // If there are no orders, Poloniex returns an empty array - switch r := result.(type) { - case AuthenticatedTradeHistoryAll: - return r, nil - default: - return AuthenticatedTradeHistoryAll{}, nil - } + return result, nil } // PlaceOrder places a new order on the exchange @@ -878,6 +874,7 @@ func (p *Poloniex) SendAuthenticatedHTTPRequest(method, endpoint string, values } else { p.Nonce.Inc() } + values.Set("nonce", p.Nonce.String()) values.Set("command", endpoint) diff --git a/exchanges/poloniex/poloniex_wrapper.go b/exchanges/poloniex/poloniex_wrapper.go index aa98b2cf..7b1d6c82 100644 --- a/exchanges/poloniex/poloniex_wrapper.go +++ b/exchanges/poloniex/poloniex_wrapper.go @@ -331,7 +331,7 @@ func (p *Poloniex) GetActiveOrders(getOrdersRequest *exchange.GetOrdersRequest) for _, order := range openOrders { orderSide := exchange.OrderSide(strings.ToUpper(order.Type)) - orderDate, err := time.Parse(time.RFC3339, order.Date) + orderDate, err := time.Parse(poloniexDateLayout, order.Date) if err != nil { log.Warnf("Exchange %v Func %v Order %v Could not parse date to unix with value of %v", p.Name, "GetActiveOrders", order.OrderNumber, order.Date) @@ -373,7 +373,7 @@ func (p *Poloniex) GetOrderHistory(getOrdersRequest *exchange.GetOrdersRequest) for _, order := range historicOrders { orderSide := exchange.OrderSide(strings.ToUpper(order.Type)) - orderDate, err := time.Parse(time.RFC3339, order.Date) + orderDate, err := time.Parse(poloniexDateLayout, order.Date) if err != nil { log.Warnf("Exchange %v Func %v Order %v Could not parse date to unix with value of %v", p.Name, "GetActiveOrders", order.OrderNumber, order.Date)