Skip to content

Commit

Permalink
binance: implement query trade for binance margin trading
Browse files Browse the repository at this point in the history
  • Loading branch information
c9s committed May 24, 2024
1 parent c42c52d commit bc71c95
Show file tree
Hide file tree
Showing 4 changed files with 320 additions and 12 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.

46 changes: 36 additions & 10 deletions pkg/exchange/binance/exchange.go
Original file line number Diff line number Diff line change
Expand Up @@ -745,20 +745,46 @@ 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 trades []types.Trade
for _, t := range remoteTrades {
localTrade, err := toGlobalTrade(*t, e.IsMargin)

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 {
log.WithError(err).Errorf("binance: can not convert trade: %+v", t)
continue
return nil, err
}

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

trades = append(trades, *localTrade)
}

} else {
remoteTrades, err := e.client.NewListTradesService().Symbol(q.Symbol).OrderId(orderID).Do(ctx)
if err != nil {
return nil, err
}

for _, t := range remoteTrades {
localTrade, err := toGlobalTrade(*t, e.IsMargin)
if err != nil {
log.WithError(err).Errorf("binance: unable to convert trade: %+v", t)
continue
}

trades = append(trades, *localTrade)
}
}

trades = types.SortTradesAscending(trades)
Expand Down
2 changes: 0 additions & 2 deletions pkg/strategy/xdepthmaker/aggregate.go

This file was deleted.

0 comments on commit bc71c95

Please sign in to comment.