Skip to content

Commit

Permalink
Merge pull request #1582 from anywhy/fix_marketactiveorders
Browse files Browse the repository at this point in the history
Fix: Restore parameters  when update active order book
  • Loading branch information
c9s authored Mar 18, 2024
2 parents ee21e9e + a26f489 commit e621938
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
4 changes: 4 additions & 0 deletions pkg/bbgo/activeorderbook.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
53 changes: 53 additions & 0 deletions pkg/bbgo/activeorderbook_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit e621938

Please sign in to comment.