From db94b2690ac26404f349a2d345839f2ccd789bc2 Mon Sep 17 00:00:00 2001 From: c9s Date: Sun, 11 Sep 2022 17:49:24 +0800 Subject: [PATCH] bbgo: check base balance only for long position --- config/bollmaker.yaml | 2 +- pkg/bbgo/order_executor_general.go | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/config/bollmaker.yaml b/config/bollmaker.yaml index 643d1d89cb..732c23a7fd 100644 --- a/config/bollmaker.yaml +++ b/config/bollmaker.yaml @@ -195,7 +195,7 @@ exchangeStrategies: tradeInBand: true # buyBelowNeutralSMA: when this set, it will only place buy order when the current price is below the SMA line. - buyBelowNeutralSMA: false + buyBelowNeutralSMA: true exits: diff --git a/pkg/bbgo/order_executor_general.go b/pkg/bbgo/order_executor_general.go index 5a1cb11071..6b642a5b08 100644 --- a/pkg/bbgo/order_executor_general.go +++ b/pkg/bbgo/order_executor_general.go @@ -272,8 +272,13 @@ func (e *GeneralOrderExecutor) ClosePosition(ctx context.Context, percentage fix } // check base balance and adjust the close position order - if baseBalance, ok := e.session.Account.Balance(e.position.Market.BaseCurrency); ok { - submitOrder.Quantity = fixedpoint.Min(submitOrder.Quantity, baseBalance.Available) + if e.position.IsLong() { + if baseBalance, ok := e.session.Account.Balance(e.position.Market.BaseCurrency); ok { + submitOrder.Quantity = fixedpoint.Min(submitOrder.Quantity, baseBalance.Available) + } + if submitOrder.Quantity.IsZero() { + return fmt.Errorf("insufficient base balance, can not sell: %+v", submitOrder) + } } tagStr := strings.Join(tags, ",")