Skip to content

Commit

Permalink
Merge pull request #1643 from c9s/fix/fix-binance-margin-order-query
Browse files Browse the repository at this point in the history
FIX: [binance] implement query trade for binance margin trading
  • Loading branch information
c9s authored May 24, 2024
2 parents c42c52d + 901272f commit 90d5d64
Show file tree
Hide file tree
Showing 4 changed files with 311 additions and 10 deletions.
24 changes: 24 additions & 0 deletions pkg/exchange/binance/binanceapi/get_margin_trades_request.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package binanceapi

import (
"time"

"github.com/c9s/requestgen"
)

//go:generate requestgen -method GET -url "/sapi/v1/margin/myTrades" -type GetMarginTradesRequest -responseType []Trade
type GetMarginTradesRequest struct {
client requestgen.AuthenticatedAPIClient

isIsolated bool `param:"isIsolated"`
symbol string `param:"symbol"`
orderID *uint64 `param:"orderId"`
startTime *time.Time `param:"startTime,milliseconds"`
endTime *time.Time `param:"endTime,milliseconds"`
fromID *uint64 `param:"fromId"`
limit *uint64 `param:"limit"`
}

func (c *RestClient) NewGetMarginTradesRequest() *GetMarginTradesRequest {
return &GetMarginTradesRequest{client: c}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 27 additions & 8 deletions pkg/exchange/binance/exchange.go
Original file line number Diff line number Diff line change
Expand Up @@ -745,24 +745,43 @@ func (e *Exchange) QueryOrderTrades(ctx context.Context, q types.OrderQuery) ([]
return nil, errors.New("binance: symbol parameter is a mandatory parameter for querying order trades")
}

remoteTrades, err := e.client.NewListTradesService().Symbol(q.Symbol).OrderId(orderID).Do(ctx)
if err != nil {
return nil, err
var remoteTrades []binance.TradeV3
var trades []types.Trade

if e.IsMargin {
req := e.client2.NewGetMarginTradesRequest()
req.Symbol(q.Symbol).OrderID(uint64(orderID))

if e.IsIsolatedMargin {
req.IsIsolated(true)
}

remoteTrades, err = req.Do(ctx)
if err != nil {
return nil, err
}
} else {
req := e.client2.NewGetMyTradesRequest()
req.Symbol(q.Symbol).
OrderID(uint64(orderID))

remoteTrades, err = req.Do(ctx)
if err != nil {
return nil, err
}
}

var trades []types.Trade
for _, t := range remoteTrades {
localTrade, err := toGlobalTrade(*t, e.IsMargin)
localTrade, err := toGlobalTrade(t, e.IsMargin)
if err != nil {
log.WithError(err).Errorf("binance: can not convert trade: %+v", t)
log.WithError(err).Errorf("binance: unable to convert margin trade: %+v", t)
continue
}

trades = append(trades, *localTrade)
}

trades = types.SortTradesAscending(trades)
return trades, nil
return types.SortTradesAscending(trades), nil
}

func (e *Exchange) QueryOrder(ctx context.Context, q types.OrderQuery) (*types.Order, error) {
Expand Down
2 changes: 0 additions & 2 deletions pkg/strategy/xdepthmaker/aggregate.go

This file was deleted.

0 comments on commit 90d5d64

Please sign in to comment.