From 583734dd18ddbb5982f8f3f29ba436e007bb6071 Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 3 Feb 2025 21:11:52 +0800 Subject: [PATCH 1/2] improve order store prune chk --- pkg/core/orderstore.go | 16 +++++++++++++++- pkg/strategy/xmaker/strategy.go | 7 +++++-- pkg/types/position.go | 5 +++-- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/pkg/core/orderstore.go b/pkg/core/orderstore.go index e991269db..a219505cf 100644 --- a/pkg/core/orderstore.go +++ b/pkg/core/orderstore.go @@ -141,9 +141,23 @@ func (s *OrderStore) BindStream(stream types.Stream) { }) } +func (s *OrderStore) Size() (l int) { + s.mu.Lock() + l = len(s.orders) + s.mu.Unlock() + return l +} + func (s *OrderStore) Prune(expiryDuration time.Duration) { + size := s.Size() + + // skip prune if the size is less than 100 + if size < 100 { + return + } + cutOffTime := time.Now().Add(-expiryDuration) - orders := make(map[uint64]types.Order, len(s.orders)) + orders := make(map[uint64]types.Order, size) s.mu.Lock() defer s.mu.Unlock() diff --git a/pkg/strategy/xmaker/strategy.go b/pkg/strategy/xmaker/strategy.go index 10bffb939..24001353f 100644 --- a/pkg/strategy/xmaker/strategy.go +++ b/pkg/strategy/xmaker/strategy.go @@ -1555,6 +1555,7 @@ func (s *Strategy) Hedge(ctx context.Context, pos fixedpoint.Value) { s.logger.WithError(err).Errorf("unable to place spread maker order") } else if retOrder != nil { s.orderStore.Add(*retOrder) + s.orderStore.Prune(24 * time.Hour) s.logger.Infof("spread maker order placed: #%d %f@%f (%s)", retOrder.OrderID, retOrder.Quantity.Float64(), retOrder.Price.Float64(), retOrder.Status) @@ -1570,8 +1571,10 @@ func (s *Strategy) Hedge(ctx context.Context, pos fixedpoint.Value) { } } } else if s.SpreadMaker.ReverseSignalOrderCancel { - if _, hasOrder := s.SpreadMaker.getOrder(); hasOrder { - s.cancelSpreadMakerOrderAndReturnCoveredPos(ctx, &s.coveredPosition) + if !isSignalSidePosition(signal, s.Position.Side()) { + if _, hasOrder := s.SpreadMaker.getOrder(); hasOrder { + s.cancelSpreadMakerOrderAndReturnCoveredPos(ctx, &s.coveredPosition) + } } } } diff --git a/pkg/types/position.go b/pkg/types/position.go index 864499a0c..d7f0831aa 100644 --- a/pkg/types/position.go +++ b/pkg/types/position.go @@ -385,9 +385,10 @@ func (p *Position) Type() PositionType { } func (p *Position) Side() SideType { - if p.Base.Sign() > 0 { + b := p.GetBase() + if b.Sign() > 0 { return SideTypeBuy - } else if p.Base.Sign() < 0 { + } else if b.Sign() < 0 { return SideTypeSell } From 2390e07bba39dcc7c395926a8972974a2b831a8a Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 3 Feb 2025 21:14:41 +0800 Subject: [PATCH 2/2] adjust prune to 8 hours --- pkg/strategy/xmaker/strategy.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/strategy/xmaker/strategy.go b/pkg/strategy/xmaker/strategy.go index 24001353f..91bf22edd 100644 --- a/pkg/strategy/xmaker/strategy.go +++ b/pkg/strategy/xmaker/strategy.go @@ -1555,7 +1555,7 @@ func (s *Strategy) Hedge(ctx context.Context, pos fixedpoint.Value) { s.logger.WithError(err).Errorf("unable to place spread maker order") } else if retOrder != nil { s.orderStore.Add(*retOrder) - s.orderStore.Prune(24 * time.Hour) + s.orderStore.Prune(8 * time.Hour) s.logger.Infof("spread maker order placed: #%d %f@%f (%s)", retOrder.OrderID, retOrder.Quantity.Float64(), retOrder.Price.Float64(), retOrder.Status)