Skip to content
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions exchanges/gateio/gateio.go
Original file line number Diff line number Diff line change
Expand Up @@ -729,7 +729,7 @@ func (e *Exchange) CancelSingleSpotOrder(ctx context.Context, orderID, currencyP
}

// GetMySpotTradingHistory retrieves personal trading history
func (e *Exchange) GetMySpotTradingHistory(ctx context.Context, p currency.Pair, orderID string, page, limit uint64, crossMargin bool, from, to time.Time) ([]SpotPersonalTradeHistory, error) {
func (e *Exchange) GetMySpotTradingHistory(ctx context.Context, p currency.Pair, orderID, account string, page, limit uint64, from, to time.Time) ([]SpotPersonalTradeHistory, error) {
params := url.Values{}
if p.IsPopulated() {
params.Set("currency_pair", p.String())
Expand All @@ -743,8 +743,8 @@ func (e *Exchange) GetMySpotTradingHistory(ctx context.Context, p currency.Pair,
if page > 0 {
params.Set("page", strconv.FormatUint(page, 10))
}
if crossMargin {
params.Set("account", asset.CrossMargin.String())
if account != "" {
params.Set("account", account)
}
if !from.IsZero() {
params.Set("from", strconv.FormatInt(from.Unix(), 10))
Expand Down
39 changes: 26 additions & 13 deletions exchanges/gateio/gateio_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ func TestCancelSingleSpotOrder(t *testing.T) {
func TestGetMySpotTradingHistory(t *testing.T) {
t.Parallel()
sharedtestvalues.SkipTestIfCredentialsUnset(t, e)
_, err := e.GetMySpotTradingHistory(t.Context(), currency.Pair{Base: currency.BTC, Quote: currency.USDT, Delimiter: currency.UnderscoreDelimiter}, "", 0, 0, false, time.Time{}, time.Time{})
_, err := e.GetMySpotTradingHistory(t.Context(), currency.Pair{Base: currency.BTC, Quote: currency.USDT, Delimiter: currency.UnderscoreDelimiter}, "", "", 0, 0, time.Time{}, time.Time{})
require.NoError(t, err)
}

Expand Down Expand Up @@ -1892,20 +1892,33 @@ func TestGetActiveOrders(t *testing.T) {
}

func TestGetOrderHistory(t *testing.T) {
t.Parallel()
testexch.UpdatePairsOnce(t, e)
sharedtestvalues.SkipTestIfCredentialsUnset(t, e)
for _, a := range e.GetAssetTypes(false) {
enabledPairs := getPairs(t, a)
if len(enabledPairs) > 4 {
enabledPairs = enabledPairs[:4]
}
multiOrderRequest := order.MultiOrderRequest{
Type: order.AnyType,
Side: order.Buy,
Pairs: enabledPairs,
AssetType: a,
}
_, err := e.GetOrderHistory(t.Context(), &multiOrderRequest)
assert.NoErrorf(t, err, "GetOrderHistory should not error for %s", a)
t.Run(a.String(), func(t *testing.T) {
t.Parallel()
enabledPairs := getPairs(t, a)
if len(enabledPairs) > 4 {
enabledPairs = enabledPairs[:4]
}
multiOrderRequest := order.MultiOrderRequest{
Type: order.AnyType,
Side: order.Buy,
Pairs: enabledPairs,
AssetType: a,
}
_, err := e.GetOrderHistory(t.Context(), &multiOrderRequest)
assert.NoError(t, err)

multiOrderRequest.Pairs = nil
_, err = e.GetOrderHistory(t.Context(), &multiOrderRequest)
if a == asset.Options {
assert.ErrorIs(t, err, currency.ErrCurrencyPairsEmpty)
} else {
assert.NoError(t, err)
}
})
}
}

Expand Down
116 changes: 71 additions & 45 deletions exchanges/gateio/gateio_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -1521,97 +1521,123 @@ func (e *Exchange) GetOrderHistory(ctx context.Context, req *order.MultiOrderReq
if err := req.Validate(); err != nil {
return nil, err
}
var orders []order.Detail
var resp []order.Detail
format, err := e.GetPairFormat(req.AssetType, true)
if err != nil {
return nil, err
}

switch req.AssetType {
case asset.Spot, asset.Margin, asset.CrossMargin:
for x := range req.Pairs {
fPair := req.Pairs[x].Format(format)
spotOrders, err := e.GetMySpotTradingHistory(ctx, fPair, req.FromOrderID, 0, 0, req.AssetType == asset.CrossMargin, req.StartTime, req.EndTime)
if len(req.Pairs) == 0 {
req.Pairs = currency.Pairs{currency.EMPTYPAIR}
}
for i := range req.Pairs {
fp := req.Pairs[i].Format(format)
a := ""
if req.AssetType == asset.Margin || req.AssetType == asset.CrossMargin {
a = "margin"
}
o, err := e.GetMySpotTradingHistory(ctx, fp, req.FromOrderID, a, 0, 0, req.StartTime, req.EndTime)
if err != nil {
return nil, err
}
for o := range spotOrders {
for j := range o {
var side order.Side
side, err = order.StringToOrderSide(spotOrders[o].Side)
side, err = order.StringToOrderSide(o[j].Side)
if err != nil {
return nil, err
}
detail := order.Detail{
OrderID: spotOrders[o].OrderID,
Amount: spotOrders[o].Amount.Float64(),
ExecutedAmount: spotOrders[o].Amount.Float64(),
Price: spotOrders[o].Price.Float64(),
Date: spotOrders[o].CreateTime.Time(),
p, err := e.MatchSymbolWithAvailablePairs(o[j].CurrencyPair, req.AssetType, true)
if err != nil {
return nil, err
}
od := order.Detail{
OrderID: o[j].OrderID,
Amount: o[j].Amount.Float64(),
ExecutedAmount: o[j].Amount.Float64(),
Price: o[j].Price.Float64(),
Date: o[j].CreateTime.Time(),
Side: side,
Exchange: e.Name,
Pair: fPair,
Pair: p,
AssetType: req.AssetType,
Fee: spotOrders[o].Fee.Float64(),
FeeAsset: currency.NewCode(spotOrders[o].FeeCurrency),
Fee: o[j].Fee.Float64(),
FeeAsset: currency.NewCode(o[j].FeeCurrency),
}
detail.InferCostsAndTimes()
orders = append(orders, detail)
od.InferCostsAndTimes()
resp = append(resp, od)
}
}
case asset.CoinMarginedFutures, asset.USDTMarginedFutures, asset.DeliveryFutures:
for x := range req.Pairs {
fPair := req.Pairs[x].Format(format)
settle, err := getSettlementCurrency(fPair, req.AssetType)
if len(req.Pairs) == 0 {
req.Pairs = currency.Pairs{currency.EMPTYPAIR}
}
for i := range req.Pairs {
fp := req.Pairs[i].Format(format)
settle, err := getSettlementCurrency(fp, req.AssetType)
if err != nil {
return nil, err
}
var futuresOrder []TradingHistoryItem
var o []TradingHistoryItem
if req.AssetType == asset.DeliveryFutures {
futuresOrder, err = e.GetMyDeliveryTradingHistory(ctx, settle, req.FromOrderID, fPair, 0, 0, 0, "")
o, err = e.GetMyDeliveryTradingHistory(ctx, settle, req.FromOrderID, fp, 0, 0, 0, "")
} else {
futuresOrder, err = e.GetMyFuturesTradingHistory(ctx, settle, "", req.FromOrderID, fPair, 0, 0, 0)
o, err = e.GetMyFuturesTradingHistory(ctx, settle, "", req.FromOrderID, fp, 0, 0, 0)
}
if err != nil {
return nil, err
}
for o := range futuresOrder {
detail := order.Detail{
OrderID: strconv.FormatInt(futuresOrder[o].ID, 10),
Amount: futuresOrder[o].Size,
Price: futuresOrder[o].Price.Float64(),
Date: futuresOrder[o].CreateTime.Time(),
for j := range o {
p, err := e.MatchSymbolWithAvailablePairs(o[j].Contract, req.AssetType, true)
if err != nil {
return nil, err
}
od := order.Detail{
OrderID: strconv.FormatInt(o[j].ID, 10),
Amount: o[j].Size,
Price: o[j].Price.Float64(),
Date: o[j].CreateTime.Time(),
Exchange: e.Name,
Pair: fPair,
Pair: p,
AssetType: req.AssetType,
}
detail.InferCostsAndTimes()
orders = append(orders, detail)
od.InferCostsAndTimes()
resp = append(resp, od)
}
}
case asset.Options:
for x := range req.Pairs {
fPair := req.Pairs[x].Format(format)
optionOrders, err := e.GetMyOptionsTradingHistory(ctx, fPair.String(), fPair.Upper(), 0, 0, req.StartTime, req.EndTime)
if len(req.Pairs) == 0 {
return nil, currency.ErrCurrencyPairsEmpty
}
for i := range req.Pairs {
fp := req.Pairs[i].Format(format)
o, err := e.GetMyOptionsTradingHistory(ctx, fp.String(), fp.Upper(), 0, 0, req.StartTime, req.EndTime)
if err != nil {
return nil, err
}
for o := range optionOrders {
detail := order.Detail{
OrderID: strconv.FormatInt(optionOrders[o].OrderID, 10),
Amount: optionOrders[o].Size,
Price: optionOrders[o].Price.Float64(),
Date: optionOrders[o].CreateTime.Time(),
for j := range o {
p, err := e.MatchSymbolWithAvailablePairs(o[j].Contract, req.AssetType, true)
if err != nil {
return nil, err
}
od := order.Detail{
OrderID: strconv.FormatInt(o[j].OrderID, 10),
Amount: o[j].Size,
Price: o[j].Price.Float64(),
Date: o[j].CreateTime.Time(),
Exchange: e.Name,
Pair: fPair,
Pair: p,
AssetType: req.AssetType,
}
detail.InferCostsAndTimes()
orders = append(orders, detail)
od.InferCostsAndTimes()
resp = append(resp, od)
}
}
default:
return nil, fmt.Errorf("%w asset type: %v", asset.ErrNotSupported, req.AssetType)
}
return req.Filter(e.Name, orders), nil
return req.Filter(e.Name, resp), nil
}

// GetHistoricCandles returns candles between a time period for a set time interval
Expand Down
Loading