From 2813ede7ed9f26f32687bce73827fd2a4b5f5116 Mon Sep 17 00:00:00 2001 From: c9s Date: Fri, 16 Jun 2023 17:26:14 +0800 Subject: [PATCH] xfunding: fix transferOut, and de-leverage the trade amount from the caller --- pkg/strategy/xfunding/strategy.go | 5 ++++- pkg/strategy/xfunding/transfer.go | 7 +++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pkg/strategy/xfunding/strategy.go b/pkg/strategy/xfunding/strategy.go index 36825561f..0c24a9991 100644 --- a/pkg/strategy/xfunding/strategy.go +++ b/pkg/strategy/xfunding/strategy.go @@ -405,8 +405,11 @@ func (s *Strategy) CrossRun(ctx context.Context, orderExecutionRouter bbgo.Order switch s.getPositionState() { case PositionClosing: + // de-leverage and get the collateral base quantity for transfer + quantity := trade.Quantity.Div(s.Leverage) + if err := backoff.RetryGeneral(ctx, func() error { - return s.transferOut(ctx, s.binanceSpot, s.spotMarket.BaseCurrency, trade.Quantity) + return s.transferOut(ctx, s.binanceSpot, s.spotMarket.BaseCurrency, quantity) }); err != nil { log.WithError(err).Errorf("spot-to-futures transfer in retry failed") return diff --git a/pkg/strategy/xfunding/transfer.go b/pkg/strategy/xfunding/transfer.go index 65fea2cd9..54b306d48 100644 --- a/pkg/strategy/xfunding/transfer.go +++ b/pkg/strategy/xfunding/transfer.go @@ -41,15 +41,12 @@ func (s *Strategy) resetTransfer(ctx context.Context, ex FuturesTransfer, asset return nil } -func (s *Strategy) transferOut(ctx context.Context, ex FuturesTransfer, asset string, tradeQuantity fixedpoint.Value) error { +func (s *Strategy) transferOut(ctx context.Context, ex FuturesTransfer, asset string, quantity fixedpoint.Value) error { // if transfer done if s.State.TotalBaseTransfer.IsZero() { return nil } - // de-leverage and get the collateral base quantity for transfer - quantity := tradeQuantity.Div(s.Leverage) - balances, err := s.futuresSession.Exchange.QueryAccountBalances(ctx) if err != nil { log.Infof("balance query error, adding to pending base transfer: %s %s + %s", quantity.String(), asset, s.State.PendingBaseTransfer.String()) @@ -64,6 +61,8 @@ func (s *Strategy) transferOut(ctx context.Context, ex FuturesTransfer, asset st return fmt.Errorf("%s balance not found", asset) } + log.Infof("found futures balance: %+v", b) + // add the previous pending base transfer and the current trade quantity amount := s.State.PendingBaseTransfer.Add(quantity)