mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-24 23:16:52 +00:00
committed by
Adrian Gallagher
parent
242b02c382
commit
63a9e9fcb1
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/thrasher-corp/gocryptotrader/config"
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
|
||||
)
|
||||
|
||||
@@ -284,8 +285,8 @@ func TestGetActiveOrders(t *testing.T) {
|
||||
z.SetDefaults()
|
||||
TestSetup(t)
|
||||
|
||||
var getOrdersRequest = exchange.GetOrdersRequest{
|
||||
OrderType: exchange.AnyOrderType,
|
||||
var getOrdersRequest = order.GetOrdersRequest{
|
||||
OrderType: order.AnyType,
|
||||
Currencies: []currency.Pair{currency.NewPair(currency.LTC,
|
||||
currency.BTC)},
|
||||
}
|
||||
@@ -302,9 +303,9 @@ func TestGetOrderHistory(t *testing.T) {
|
||||
z.SetDefaults()
|
||||
TestSetup(t)
|
||||
|
||||
var getOrdersRequest = exchange.GetOrdersRequest{
|
||||
OrderType: exchange.AnyOrderType,
|
||||
OrderSide: exchange.BuyOrderSide,
|
||||
var getOrdersRequest = order.GetOrdersRequest{
|
||||
OrderType: order.AnyType,
|
||||
OrderSide: order.Buy,
|
||||
Currencies: []currency.Pair{currency.NewPair(currency.LTC,
|
||||
currency.BTC)},
|
||||
}
|
||||
@@ -332,14 +333,14 @@ func TestSubmitOrder(t *testing.T) {
|
||||
canManipulateRealOrders))
|
||||
}
|
||||
|
||||
var orderSubmission = &exchange.OrderSubmission{
|
||||
var orderSubmission = &order.Submit{
|
||||
Pair: currency.Pair{
|
||||
Delimiter: "_",
|
||||
Base: currency.QTUM,
|
||||
Quote: currency.USD,
|
||||
},
|
||||
OrderSide: exchange.BuyOrderSide,
|
||||
OrderType: exchange.LimitOrderType,
|
||||
OrderSide: order.Buy,
|
||||
OrderType: order.Limit,
|
||||
Price: 1,
|
||||
Amount: 1,
|
||||
ClientID: "meowOrder",
|
||||
@@ -362,7 +363,7 @@ func TestCancelExchangeOrder(t *testing.T) {
|
||||
|
||||
currencyPair := currency.NewPair(currency.LTC, currency.BTC)
|
||||
|
||||
var orderCancellation = &exchange.OrderCancellation{
|
||||
var orderCancellation = &order.Cancel{
|
||||
OrderID: "1",
|
||||
WalletAddress: "1F5zVDgNjorJ51oGebSvNCrSAHpwGkUdDB",
|
||||
AccountID: "1",
|
||||
@@ -388,7 +389,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
|
||||
|
||||
currencyPair := currency.NewPair(currency.LTC, currency.BTC)
|
||||
|
||||
var orderCancellation = &exchange.OrderCancellation{
|
||||
var orderCancellation = &order.Cancel{
|
||||
OrderID: "1",
|
||||
WalletAddress: "1F5zVDgNjorJ51oGebSvNCrSAHpwGkUdDB",
|
||||
AccountID: "1",
|
||||
@@ -404,8 +405,8 @@ func TestCancelAllExchangeOrders(t *testing.T) {
|
||||
t.Errorf("Could not cancel orders: %v", err)
|
||||
}
|
||||
|
||||
if len(resp.OrderStatus) > 0 {
|
||||
t.Errorf("%v orders failed to cancel", len(resp.OrderStatus))
|
||||
if len(resp.Status) > 0 {
|
||||
t.Errorf("%v orders failed to cancel", len(resp.Status))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -424,7 +425,7 @@ func TestGetAccountInfo(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestModifyOrder(t *testing.T) {
|
||||
_, err := z.ModifyOrder(&exchange.ModifyOrder{})
|
||||
_, err := z.ModifyOrder(&order.Modify{})
|
||||
if err == nil {
|
||||
t.Error("ModifyOrder() Expected error")
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
||||
)
|
||||
|
||||
// OrderbookResponse holds the orderbook data for a symbol
|
||||
@@ -241,7 +241,7 @@ var WithdrawalFees = map[currency.Code]float64{
|
||||
}
|
||||
|
||||
// orderSideMap holds order type info based on Alphapoint data
|
||||
var orderSideMap = map[int64]exchange.OrderSide{
|
||||
0: exchange.BuyOrderSide,
|
||||
1: exchange.SellOrderSide,
|
||||
var orderSideMap = map[int64]order.Side{
|
||||
0: order.Buy,
|
||||
1: order.Sell,
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
|
||||
@@ -344,27 +345,23 @@ func (z *ZB) GetExchangeHistory(p currency.Pair, assetType asset.Item) ([]exchan
|
||||
}
|
||||
|
||||
// SubmitOrder submits a new order
|
||||
func (z *ZB) SubmitOrder(order *exchange.OrderSubmission) (exchange.SubmitOrderResponse, error) {
|
||||
var submitOrderResponse exchange.SubmitOrderResponse
|
||||
if order == nil {
|
||||
return submitOrderResponse, exchange.ErrOrderSubmissionIsNil
|
||||
}
|
||||
|
||||
if err := order.Validate(); err != nil {
|
||||
func (z *ZB) SubmitOrder(s *order.Submit) (order.SubmitResponse, error) {
|
||||
var submitOrderResponse order.SubmitResponse
|
||||
if err := s.Validate(); err != nil {
|
||||
return submitOrderResponse, err
|
||||
}
|
||||
|
||||
var oT SpotNewOrderRequestParamsType
|
||||
if order.OrderSide == exchange.BuyOrderSide {
|
||||
if s.OrderSide == order.Buy {
|
||||
oT = SpotNewOrderRequestParamsTypeBuy
|
||||
} else {
|
||||
oT = SpotNewOrderRequestParamsTypeSell
|
||||
}
|
||||
|
||||
var params = SpotNewOrderRequestParams{
|
||||
Amount: order.Amount,
|
||||
Price: order.Price,
|
||||
Symbol: order.Pair.Lower().String(),
|
||||
Amount: s.Amount,
|
||||
Price: s.Price,
|
||||
Symbol: s.Pair.Lower().String(),
|
||||
Type: oT,
|
||||
}
|
||||
response, err := z.SpotNewOrder(params)
|
||||
@@ -379,32 +376,34 @@ func (z *ZB) SubmitOrder(order *exchange.OrderSubmission) (exchange.SubmitOrderR
|
||||
|
||||
// ModifyOrder will allow of changing orderbook placement and limit to
|
||||
// market conversion
|
||||
func (z *ZB) ModifyOrder(action *exchange.ModifyOrder) (string, error) {
|
||||
func (z *ZB) ModifyOrder(action *order.Modify) (string, error) {
|
||||
return "", common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// CancelOrder cancels an order by its corresponding ID number
|
||||
func (z *ZB) CancelOrder(order *exchange.OrderCancellation) error {
|
||||
orderIDInt, err := strconv.ParseInt(order.OrderID, 10, 64)
|
||||
|
||||
func (z *ZB) CancelOrder(o *order.Cancel) error {
|
||||
orderIDInt, err := strconv.ParseInt(o.OrderID, 10, 64)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return z.CancelExistingOrder(orderIDInt, z.FormatExchangeCurrency(order.CurrencyPair,
|
||||
order.AssetType).String())
|
||||
curr := z.FormatExchangeCurrency(o.CurrencyPair, o.AssetType).String()
|
||||
return z.CancelExistingOrder(orderIDInt, curr)
|
||||
}
|
||||
|
||||
// CancelAllOrders cancels all orders associated with a currency pair
|
||||
func (z *ZB) CancelAllOrders(_ *exchange.OrderCancellation) (exchange.CancelAllOrdersResponse, error) {
|
||||
cancelAllOrdersResponse := exchange.CancelAllOrdersResponse{
|
||||
OrderStatus: make(map[string]string),
|
||||
func (z *ZB) CancelAllOrders(_ *order.Cancel) (order.CancelAllResponse, error) {
|
||||
cancelAllOrdersResponse := order.CancelAllResponse{
|
||||
Status: make(map[string]string),
|
||||
}
|
||||
var allOpenOrders []Order
|
||||
for _, currency := range z.GetEnabledPairs(asset.Spot) {
|
||||
enabledPairs := z.GetEnabledPairs(asset.Spot)
|
||||
for x := range enabledPairs {
|
||||
// Limiting to 10 pages
|
||||
for i := 0; i < 10; i++ {
|
||||
openOrders, err := z.GetUnfinishedOrdersIgnoreTradeType(z.FormatExchangeCurrency(currency, asset.Spot).String(), 1, 10)
|
||||
for pageNumber := int64(0); pageNumber < 11; pageNumber++ {
|
||||
fCurr := z.FormatExchangeCurrency(enabledPairs[x], asset.Spot).String()
|
||||
openOrders, err := z.GetUnfinishedOrdersIgnoreTradeType(fCurr,
|
||||
pageNumber,
|
||||
10)
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
}
|
||||
@@ -417,10 +416,12 @@ func (z *ZB) CancelAllOrders(_ *exchange.OrderCancellation) (exchange.CancelAllO
|
||||
}
|
||||
}
|
||||
|
||||
for _, openOrder := range allOpenOrders {
|
||||
err := z.CancelExistingOrder(openOrder.ID, openOrder.Currency)
|
||||
for i := range allOpenOrders {
|
||||
err := z.CancelExistingOrder(allOpenOrders[i].ID,
|
||||
allOpenOrders[i].Currency)
|
||||
if err != nil {
|
||||
cancelAllOrdersResponse.OrderStatus[strconv.FormatInt(openOrder.ID, 10)] = err.Error()
|
||||
ID := strconv.FormatInt(allOpenOrders[i].ID, 10)
|
||||
cancelAllOrdersResponse.Status[ID] = err.Error()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -428,8 +429,8 @@ func (z *ZB) CancelAllOrders(_ *exchange.OrderCancellation) (exchange.CancelAllO
|
||||
}
|
||||
|
||||
// GetOrderInfo returns information on a current open order
|
||||
func (z *ZB) GetOrderInfo(orderID string) (exchange.OrderDetail, error) {
|
||||
var orderDetail exchange.OrderDetail
|
||||
func (z *ZB) GetOrderInfo(orderID string) (order.Detail, error) {
|
||||
var orderDetail order.Detail
|
||||
return orderDetail, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
@@ -477,13 +478,15 @@ func (z *ZB) GetFeeByType(feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
|
||||
// GetActiveOrders retrieves any orders that are active/open
|
||||
// This function is not concurrency safe due to orderSide/orderType maps
|
||||
func (z *ZB) GetActiveOrders(getOrdersRequest *exchange.GetOrdersRequest) ([]exchange.OrderDetail, error) {
|
||||
func (z *ZB) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
var allOrders []Order
|
||||
for _, currency := range getOrdersRequest.Currencies {
|
||||
var pageNumber int64
|
||||
for x := range req.Currencies {
|
||||
// Limiting to 10 pages
|
||||
for i := 0; i < 10; i++ {
|
||||
resp, err := z.GetUnfinishedOrdersIgnoreTradeType(z.FormatExchangeCurrency(currency, asset.Spot).String(), pageNumber, 10)
|
||||
for pageNumber := int64(0); pageNumber < 11; pageNumber++ {
|
||||
fCurr := z.FormatExchangeCurrency(req.Currencies[x], asset.Spot).String()
|
||||
resp, err := z.GetUnfinishedOrdersIgnoreTradeType(fCurr,
|
||||
pageNumber,
|
||||
10)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -492,53 +495,51 @@ func (z *ZB) GetActiveOrders(getOrdersRequest *exchange.GetOrdersRequest) ([]exc
|
||||
}
|
||||
|
||||
allOrders = append(allOrders, resp...)
|
||||
pageNumber++
|
||||
}
|
||||
}
|
||||
|
||||
var orders []exchange.OrderDetail
|
||||
for _, order := range allOrders {
|
||||
symbol := currency.NewPairDelimiter(order.Currency,
|
||||
var orders []order.Detail
|
||||
for i := range allOrders {
|
||||
symbol := currency.NewPairDelimiter(allOrders[i].Currency,
|
||||
z.GetPairFormat(asset.Spot, false).Delimiter)
|
||||
orderDate := time.Unix(int64(order.TradeDate), 0)
|
||||
orderSide := orderSideMap[order.Type]
|
||||
orders = append(orders, exchange.OrderDetail{
|
||||
ID: fmt.Sprintf("%v", order.ID),
|
||||
Amount: order.TotalAmount,
|
||||
orderDate := time.Unix(int64(allOrders[i].TradeDate), 0)
|
||||
orderSide := orderSideMap[allOrders[i].Type]
|
||||
orders = append(orders, order.Detail{
|
||||
ID: fmt.Sprintf("%d", allOrders[i].ID),
|
||||
Amount: allOrders[i].TotalAmount,
|
||||
Exchange: z.Name,
|
||||
OrderDate: orderDate,
|
||||
Price: order.Price,
|
||||
Price: allOrders[i].Price,
|
||||
OrderSide: orderSide,
|
||||
CurrencyPair: symbol,
|
||||
})
|
||||
}
|
||||
|
||||
exchange.FilterOrdersByTickRange(&orders, getOrdersRequest.StartTicks,
|
||||
getOrdersRequest.EndTicks)
|
||||
exchange.FilterOrdersBySide(&orders, getOrdersRequest.OrderSide)
|
||||
order.FilterOrdersByTickRange(&orders, req.StartTicks, req.EndTicks)
|
||||
order.FilterOrdersBySide(&orders, req.OrderSide)
|
||||
return orders, nil
|
||||
}
|
||||
|
||||
// GetOrderHistory retrieves account order information
|
||||
// Can Limit response to specific order status
|
||||
// This function is not concurrency safe due to orderSide/orderType maps
|
||||
func (z *ZB) GetOrderHistory(getOrdersRequest *exchange.GetOrdersRequest) ([]exchange.OrderDetail, error) {
|
||||
if getOrdersRequest.OrderSide == exchange.AnyOrderSide || getOrdersRequest.OrderSide == "" {
|
||||
func (z *ZB) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
if req.OrderSide == order.AnySide || req.OrderSide == "" {
|
||||
return nil, errors.New("specific order side is required")
|
||||
}
|
||||
|
||||
var allOrders []Order
|
||||
|
||||
var side int64
|
||||
if getOrdersRequest.OrderSide == exchange.BuyOrderSide {
|
||||
if req.OrderSide == order.Buy {
|
||||
side = 1
|
||||
}
|
||||
|
||||
for _, currency := range getOrdersRequest.Currencies {
|
||||
var pageNumber int64
|
||||
for x := range req.Currencies {
|
||||
// Limiting to 10 pages
|
||||
for i := 0; i < 10; i++ {
|
||||
resp, err := z.GetOrders(z.FormatExchangeCurrency(currency, asset.Spot).String(), pageNumber, side)
|
||||
for pageNumber := int64(0); pageNumber < 11; pageNumber++ {
|
||||
fCurr := z.FormatExchangeCurrency(req.Currencies[x], asset.Spot).String()
|
||||
resp, err := z.GetOrders(fCurr, pageNumber, side)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -548,28 +549,27 @@ func (z *ZB) GetOrderHistory(getOrdersRequest *exchange.GetOrdersRequest) ([]exc
|
||||
}
|
||||
|
||||
allOrders = append(allOrders, resp...)
|
||||
pageNumber++
|
||||
}
|
||||
}
|
||||
|
||||
var orders []exchange.OrderDetail
|
||||
for _, order := range allOrders {
|
||||
symbol := currency.NewPairDelimiter(order.Currency,
|
||||
var orders []order.Detail
|
||||
for i := range allOrders {
|
||||
symbol := currency.NewPairDelimiter(allOrders[i].Currency,
|
||||
z.GetPairFormat(asset.Spot, false).Delimiter)
|
||||
orderDate := time.Unix(int64(order.TradeDate), 0)
|
||||
orderSide := orderSideMap[order.Type]
|
||||
orders = append(orders, exchange.OrderDetail{
|
||||
ID: fmt.Sprintf("%v", order.ID),
|
||||
Amount: order.TotalAmount,
|
||||
orderDate := time.Unix(int64(allOrders[i].TradeDate), 0)
|
||||
orderSide := orderSideMap[allOrders[i].Type]
|
||||
orders = append(orders, order.Detail{
|
||||
ID: fmt.Sprintf("%d", allOrders[i].ID),
|
||||
Amount: allOrders[i].TotalAmount,
|
||||
Exchange: z.Name,
|
||||
OrderDate: orderDate,
|
||||
Price: order.Price,
|
||||
Price: allOrders[i].Price,
|
||||
OrderSide: orderSide,
|
||||
CurrencyPair: symbol,
|
||||
})
|
||||
}
|
||||
|
||||
exchange.FilterOrdersByTickRange(&orders, getOrdersRequest.StartTicks, getOrdersRequest.EndTicks)
|
||||
order.FilterOrdersByTickRange(&orders, req.StartTicks, req.EndTicks)
|
||||
return orders, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user