Skip to content

Commit

Permalink
binance: replace /api/v3/myTrades api
Browse files Browse the repository at this point in the history
  • Loading branch information
c9s committed Dec 9, 2022
1 parent 37f4435 commit 8509784
Show file tree
Hide file tree
Showing 5 changed files with 265 additions and 18 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ go 1.17
require (
github.com/DATA-DOG/go-sqlmock v1.5.0
github.com/Masterminds/squirrel v1.5.3
github.com/adshao/go-binance/v2 v2.3.8
github.com/adshao/go-binance/v2 v2.3.10
github.com/c-bata/goptuna v0.8.1
github.com/c9s/requestgen v1.3.0
github.com/c9s/rockhopper v1.2.2-0.20220617053729-ffdc87df194b
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ github.com/adshao/go-binance/v2 v2.3.5 h1:WVYZecm0w8l14YoWlnKZj6xxZT2AKMTHpMQSqI
github.com/adshao/go-binance/v2 v2.3.5/go.mod h1:8Pg/FGTLyAhq8QXA0IkoReKyRpoxJcK3LVujKDAZV/c=
github.com/adshao/go-binance/v2 v2.3.8 h1:9VsAX4jUopnIOlzrvnKUFUf9SWB/nwPgJtUsM2dkj6A=
github.com/adshao/go-binance/v2 v2.3.8/go.mod h1:Z3MCnWI0gHC4Rea8TWiF3aN1t4nV9z3CaU/TeHcKsLM=
github.com/adshao/go-binance/v2 v2.3.10 h1:iWtHD/sQ8GK6r+cSMMdOynpGI/4Q6P5LZtiEHdWOjag=
github.com/adshao/go-binance/v2 v2.3.10/go.mod h1:Z3MCnWI0gHC4Rea8TWiF3aN1t4nV9z3CaU/TeHcKsLM=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
Expand Down
27 changes: 27 additions & 0 deletions pkg/exchange/binance/binanceapi/get_my_trades_request.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package binanceapi

import (
"time"

"github.com/c9s/requestgen"

"github.com/adshao/go-binance/v2"
)

type Trade = binance.TradeV3

//go:generate requestgen -method GET -url "/api/v3/myTrades" -type GetMyTradesRequest -responseType []Trade
type GetMyTradesRequest struct {
client requestgen.AuthenticatedAPIClient

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) NewGetMyTradesRequest() *GetMyTradesRequest {
return &GetMyTradesRequest{client: c}
}
218 changes: 218 additions & 0 deletions pkg/exchange/binance/binanceapi/get_my_trades_request_requestgen.go

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

34 changes: 17 additions & 17 deletions pkg/exchange/binance/exchange.go
Original file line number Diff line number Diff line change
Expand Up @@ -1499,40 +1499,40 @@ func (e *Exchange) queryFuturesTrades(ctx context.Context, symbol string, option
}

func (e *Exchange) querySpotTrades(ctx context.Context, symbol string, options *types.TradeQueryOptions) (trades []types.Trade, err error) {
var remoteTrades []*binance.TradeV3
req := e.client.NewListTradesService().
Symbol(symbol)

if options.Limit > 0 {
req.Limit(int(options.Limit))
} else {
req.Limit(1000)
}
req := e.client2.NewGetMyTradesRequest()
req.Symbol(symbol)

// BINANCE uses inclusive last trade ID
if options.LastTradeID > 0 {
req.FromID(int64(options.LastTradeID))
req.FromID(options.LastTradeID)
}

if options.StartTime != nil && options.EndTime != nil {
if options.EndTime.Sub(*options.StartTime) < 24*time.Hour {
req.StartTime(options.StartTime.UnixMilli())
req.EndTime(options.EndTime.UnixMilli())
req.StartTime(*options.StartTime)
req.EndTime(*options.EndTime)
} else {
req.StartTime(options.StartTime.UnixMilli())
req.StartTime(*options.StartTime)
}
} else if options.StartTime != nil {
req.StartTime(options.StartTime.UnixMilli())
req.StartTime(*options.StartTime)
} else if options.EndTime != nil {
req.EndTime(options.EndTime.UnixMilli())
req.EndTime(*options.EndTime)
}

remoteTrades, err = req.Do(ctx)
if options.Limit > 0 {
req.Limit(uint64(options.Limit))
} else {
req.Limit(1000)
}

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

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

0 comments on commit 8509784

Please sign in to comment.