From 9f50e256c866218fd80072477093e851e0b38791 Mon Sep 17 00:00:00 2001 From: anywhy Date: Thu, 14 Mar 2024 14:48:15 +0800 Subject: [PATCH 1/2] fi: restore parameter when update active orde book --- pkg/bbgo/activeorderbook.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/bbgo/activeorderbook.go b/pkg/bbgo/activeorderbook.go index 0b08b8e5a..f94094ff2 100644 --- a/pkg/bbgo/activeorderbook.go +++ b/pkg/bbgo/activeorderbook.go @@ -268,6 +268,10 @@ func (b *ActiveOrderBook) GracefulCancel(ctx context.Context, ex types.Exchange, } func (b *ActiveOrderBook) orderUpdateHandler(order types.Order) { + if oldOrder, ok := b.Get(order.OrderID); ok { + order.Tag = oldOrder.Tag + order.GroupID = oldOrder.GroupID + } b.Update(order) } From a26f489dadfb6b2a096ebf6cdb482c159a24fe9a Mon Sep 17 00:00:00 2001 From: anywhy Date: Thu, 14 Mar 2024 22:41:58 +0800 Subject: [PATCH 2/2] add test case --- pkg/bbgo/activeorderbook_test.go | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/pkg/bbgo/activeorderbook_test.go b/pkg/bbgo/activeorderbook_test.go index f9863156e..ded63954e 100644 --- a/pkg/bbgo/activeorderbook_test.go +++ b/pkg/bbgo/activeorderbook_test.go @@ -76,6 +76,59 @@ func TestActiveOrderBook_pendingOrders(t *testing.T) { assert.True(t, filled, "filled event should be fired") } +func Test_RestoreParametersOnUpdateHandler(t *testing.T) { + now := time.Now() + t1 := now + t2 := now.Add(time.Millisecond) + ob := NewActiveOrderBook("BTCUSDT") + + var updatedOrder types.Order + ob.OnFilled(func(o types.Order) { + updatedOrder = o + }) + quantity := Number("0.01") + orderUpdate1 := types.Order{ + OrderID: 99, + SubmitOrder: types.SubmitOrder{ + Symbol: "BTCUSDT", + Side: types.SideTypeBuy, + Type: types.OrderTypeLimit, + Quantity: quantity, + Price: Number(19000.0), + AveragePrice: fixedpoint.Zero, + StopPrice: fixedpoint.Zero, + Tag: "tag1", + GroupID: uint32(1), + }, + ExecutedQuantity: Number(0.0), + Status: types.OrderStatusNew, + CreationTime: types.Time(t1), + UpdateTime: types.Time(t1), + } + + orderUpdate2 := types.Order{ + OrderID: 99, + SubmitOrder: types.SubmitOrder{ + Symbol: "BTCUSDT", + Side: types.SideTypeBuy, + Type: types.OrderTypeLimit, + Quantity: quantity, + Price: Number(19000.0), + AveragePrice: fixedpoint.Zero, + StopPrice: fixedpoint.Zero, + }, + ExecutedQuantity: quantity, + Status: types.OrderStatusFilled, + CreationTime: types.Time(t1), + UpdateTime: types.Time(t2), + } + ob.add(orderUpdate1) + ob.orderUpdateHandler(orderUpdate2) + assert.Equal(t, "tag1", updatedOrder.Tag) + assert.Equal(t, uint32(1), updatedOrder.GroupID) + +} + func Test_isNewerUpdate(t *testing.T) { a := types.Order{ Status: types.OrderStatusPartiallyFilled,