From 4c8db08ccca4732fd5533e8421df6027952ca2b2 Mon Sep 17 00:00:00 2001 From: c9s Date: Fri, 11 Nov 2022 02:24:52 +0800 Subject: [PATCH] grid2: fix require quote and require base calculation --- pkg/strategy/grid2/strategy.go | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/pkg/strategy/grid2/strategy.go b/pkg/strategy/grid2/strategy.go index 803737a21..c14326b6f 100644 --- a/pkg/strategy/grid2/strategy.go +++ b/pkg/strategy/grid2/strategy.go @@ -200,12 +200,32 @@ func (s *Strategy) setupGridOrders(ctx context.Context, session *bbgo.ExchangeSe pin := s.grid.Pins[i] price := fixedpoint.Value(pin) - q := s.QuantityOrAmount.CalculateQuantity(price) if price.Compare(lastPrice) >= 0 { - // sell - requiredBase = requiredBase.Add(q) + // sell orders + if requiredBase.Compare(totalBase) < 0 { + if q := s.QuantityOrAmount.Quantity; !q.IsZero() { + requiredBase = requiredBase.Add(s.QuantityOrAmount.Quantity) + } else if amount := s.QuantityOrAmount.Amount; !amount.IsZero() { + qq := s.QuantityOrAmount.CalculateQuantity(price) + requiredBase = requiredBase.Add(qq) + } + } else if i > 0 { + // convert buy quote to requiredQuote + nextLowerPin := s.grid.Pins[i-1] + nextLowerPrice := fixedpoint.Value(nextLowerPin) + if q := s.QuantityOrAmount.Quantity; !q.IsZero() { + requiredQuote = requiredQuote.Add(q.Mul(nextLowerPrice)) + } else if amount := s.QuantityOrAmount.Amount; !amount.IsZero() { + requiredQuote = requiredQuote.Add(amount) + } + } } else { - requiredQuote = requiredQuote.Add(q) + // buy orders + if q := s.QuantityOrAmount.Quantity; !q.IsZero() { + requiredQuote = requiredQuote.Add(q.Mul(price)) + } else if amount := s.QuantityOrAmount.Amount; !amount.IsZero() { + requiredQuote = requiredQuote.Add(amount) + } } }