From b6d0e3ef273e3caa318fd3a924ee582f83f8f02c Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 18 Sep 2023 17:57:12 +0800 Subject: [PATCH 1/2] grid2: only do active order update when grid is recovered --- pkg/strategy/grid2/strategy.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pkg/strategy/grid2/strategy.go b/pkg/strategy/grid2/strategy.go index 09e3895a2..d7e4210e5 100644 --- a/pkg/strategy/grid2/strategy.go +++ b/pkg/strategy/grid2/strategy.go @@ -9,6 +9,7 @@ import ( "strconv" "strings" "sync" + "sync/atomic" "time" "github.com/google/uuid" @@ -205,6 +206,8 @@ type Strategy struct { tradingCtx, writeCtx context.Context cancelWrite context.CancelFunc + recovered int32 + // this ensures that bbgo.Sync to lock the object sync.Mutex } @@ -1982,11 +1985,16 @@ func (s *Strategy) Run(ctx context.Context, _ bbgo.OrderExecutor, session *bbgo. }) } - session.UserDataStream.OnConnect(func() { + session.UserDataStream.OnAuth(func() { if !bbgo.IsBackTesting { // callback may block the stream execution, so we spawn the recover function to the background // add (5 seconds + random <10 seconds jitter) delay go time.AfterFunc(util.MillisecondsJitter(5*time.Second, 1000*10), func() { + recovered := atomic.LoadInt32(&s.recovered) + if recovered == 0 { + return + } + s.recoverActiveOrders(ctx, session) }) } @@ -2016,6 +2024,10 @@ func (s *Strategy) startProcess(ctx context.Context, session *bbgo.ExchangeSessi } func (s *Strategy) recoverGrid(ctx context.Context, session *bbgo.ExchangeSession) error { + defer func() { + atomic.AddInt32(&s.recovered, 1) + }() + if s.RecoverGridByScanningTrades { s.debugLog("recovering grid by scanning trades") return s.recoverByScanningTrades(ctx, session) From 94f6cefd709fdfc9f459deb157e5cc78b7c89efa Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 25 Sep 2023 17:43:00 +0800 Subject: [PATCH 2/2] grid2: improve active order recover logs --- pkg/strategy/grid2/strategy.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/strategy/grid2/strategy.go b/pkg/strategy/grid2/strategy.go index d7e4210e5..90af91cba 100644 --- a/pkg/strategy/grid2/strategy.go +++ b/pkg/strategy/grid2/strategy.go @@ -2168,8 +2168,8 @@ func (s *Strategy) recoverActiveOrders(ctx context.Context, session *bbgo.Exchan } s.logger.Infof("found %d active orders to update...", len(activeOrders)) - for _, o := range activeOrders { - s.logger.Infof("updating %d order...", o.OrderID) + for i, o := range activeOrders { + s.logger.Infof("updating %d/%d order #%d...", i+1, len(activeOrders), o.OrderID) updatedOrder, err := retry.QueryOrderUntilSuccessful(ctx, s.orderQueryService, types.OrderQuery{ Symbol: o.Symbol, @@ -2181,6 +2181,7 @@ func (s *Strategy) recoverActiveOrders(ctx context.Context, session *bbgo.Exchan return } + s.logger.Infof("triggering updated order #%d: %s", o.OrderID, o.String()) activeOrderBook.Update(*updatedOrder) } }