Getting closed orders implementation, fixed Binance MARKET order creation, expanded SubmitOrder response (#572)

* GetClosedOrder implemented for Kraken and Binance, fixed Binance MARKET order creaton, added rate, fee and cost fileds on SubmitOrder responce

* return Trades on Binance SubmitOrder, new validation methods on Binance and kraken GetClosedOrderInfo

* removed the Binance extra method GetClosedOrder

* func description corrected

* removed price, fee and cost from SimulateOrder response, as we get all necessary info in response to calculate them on client side

* GetClosedOrder implementation moved to GetOrderInfo

* changed GetOrderInfo params

* removed Canceled order.Type used for Kraken

* update QueryOrder in gctscript

* add missed params to QueryOrder validator (gctscript)

* fixed testing issues

* GetClosedOrder implemented for Kraken and Binance, fixed Binance MARKET order creaton, added rate, fee and cost fileds on SubmitOrder responce

* return Trades on Binance SubmitOrder, new validation methods on Binance and kraken GetClosedOrderInfo

* removed the Binance extra method GetClosedOrder

* func description corrected

* removed price, fee and cost from SimulateOrder response, as we get all necessary info in response to calculate them on client side

* GetClosedOrder implementation moved to GetOrderInfo

* changed GetOrderInfo params

* removed Canceled order.Type used for Kraken

* update QueryOrder in gctscript

* add missed params to QueryOrder validator (gctscript)

* fixed testing issues

* pull previous changes

* linter issues fix

* updated query_order exmple in gctscript, fixed params check

* removed orderPair unnecessary conversion

Co-authored-by: Vazha Bezhanishvili <vazha.bezhanishvili@elegro.eu>
This commit is contained in:
Vazha
2020-10-22 03:54:24 +03:00
committed by GitHub
parent 4ccb495baf
commit fab9d934fe
54 changed files with 2365 additions and 2151 deletions

View File

@@ -472,7 +472,7 @@ func TestGetOrderInfo(t *testing.T) {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
_, err := k.GetOrderInfo("OZPTPJ-HVYHF-EDIGXS")
_, err := k.GetOrderInfo("OZPTPJ-HVYHF-EDIGXS", currency.Pair{}, asset.Spot)
if !areTestAPIKeysSet() && err == nil {
t.Error("Expecting error")
}

View File

@@ -2,6 +2,7 @@ package kraken
import (
"errors"
"fmt"
"strconv"
"strings"
"sync"
@@ -608,67 +609,75 @@ func (k *Kraken) CancelAllOrders(_ *order.Cancel) (order.CancelAllResponse, erro
return cancelAllOrdersResponse, nil
}
// GetOrderInfo returns information on a current open order
func (k *Kraken) GetOrderInfo(orderID string) (order.Detail, error) {
// GetOrderInfo returns order information based on order ID
func (k *Kraken) GetOrderInfo(orderID string, pair currency.Pair, assetType asset.Item) (order.Detail, error) {
var orderDetail order.Detail
var emptyOrderOptions OrderInfoOptions
openOrders, err := k.GetOpenOrders(emptyOrderOptions)
resp, err := k.QueryOrdersInfo(OrderInfoOptions{
Trades: true,
}, orderID)
if err != nil {
return orderDetail, err
}
if orderInfo, ok := openOrders.Open[orderID]; ok {
avail, err := k.GetAvailablePairs(asset.Spot)
if err != nil {
return orderDetail, err
}
fmt, err := k.GetPairFormat(asset.Spot, false)
if err != nil {
return orderDetail, err
}
orderInfo, ok := resp[orderID]
if !ok {
return orderDetail, fmt.Errorf("order %s not found in response", orderID)
}
var trades []order.TradeHistory
for i := range orderInfo.Trades {
trades = append(trades, order.TradeHistory{
TID: orderInfo.Trades[i],
})
}
side, err := order.StringToOrderSide(orderInfo.Description.Type)
if err != nil {
return orderDetail, err
}
status, err := order.StringToOrderStatus(orderInfo.Status)
if err != nil {
return orderDetail, err
}
oType, err := order.StringToOrderType(orderInfo.Description.OrderType)
if err != nil {
return orderDetail, err
}
if assetType == "" {
assetType = asset.Spot
}
p, err := currency.NewPairFromFormattedPairs(orderInfo.Description.Pair,
avail,
fmt)
if err != nil {
return orderDetail, err
}
orderDetail = order.Detail{
Exchange: k.Name,
ID: orderID,
Pair: p,
Side: side,
Type: oType,
Date: convert.TimeFromUnixTimestampDecimal(orderInfo.OpenTime),
Status: status,
Price: orderInfo.Price,
Amount: orderInfo.Volume,
ExecutedAmount: orderInfo.VolumeExecuted,
RemainingAmount: orderInfo.Volume - orderInfo.VolumeExecuted,
Fee: orderInfo.Fee,
Trades: trades,
}
} else {
return orderDetail, errors.New(k.Name + " - Order ID not found: " + orderID)
avail, err := k.GetAvailablePairs(assetType)
if err != nil {
return orderDetail, err
}
format, err := k.GetPairFormat(assetType, true)
if err != nil {
return orderDetail, err
}
var trades []order.TradeHistory
for i := range orderInfo.Trades {
trades = append(trades, order.TradeHistory{
TID: orderInfo.Trades[i],
})
}
side, err := order.StringToOrderSide(orderInfo.Description.Type)
if err != nil {
return orderDetail, err
}
status, err := order.StringToOrderStatus(orderInfo.Status)
if err != nil {
return orderDetail, err
}
oType, err := order.StringToOrderType(orderInfo.Description.OrderType)
if err != nil {
return orderDetail, err
}
p, err := currency.NewPairFromFormattedPairs(orderInfo.Description.Pair,
avail,
format)
if err != nil {
return orderDetail, err
}
orderDetail = order.Detail{
Exchange: k.Name,
ID: orderID,
Pair: p,
Side: side,
Type: oType,
Date: convert.TimeFromUnixTimestampDecimal(orderInfo.OpenTime),
CloseTime: convert.TimeFromUnixTimestampDecimal(orderInfo.CloseTime),
Status: status,
Price: orderInfo.Price,
Amount: orderInfo.Volume,
ExecutedAmount: orderInfo.VolumeExecuted,
RemainingAmount: orderInfo.Volume - orderInfo.VolumeExecuted,
Fee: orderInfo.Fee,
Trades: trades,
}
return orderDetail, nil