diff --git a/cmd/client/main.go b/cmd/client/main.go index 25c96ef..75dfb5f 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -94,11 +94,12 @@ func (MyCallback) OnOrderStatus(order *Order) { activeOrderLock.Lock() defer activeOrderLock.Unlock() activeOrders[order.Id] = order + vlogf("log", "order %d is %s (active)\n", order.Id, order.OrderState) } else { activeOrderLock.Lock() defer activeOrderLock.Unlock() delete(activeOrders, order.Id) - vlogf("log", "order %d is %s\n", order.Id, order.OrderState) + vlogf("log", "order %d is %s (inactive)\n", order.Id, order.OrderState) } gui.Update(func(g *gocui.Gui) error { v, err := g.View("orders") diff --git a/internal/exchange/grpc.go b/internal/exchange/grpc.go index d7b9917..bd86638 100644 --- a/internal/exchange/grpc.go +++ b/internal/exchange/grpc.go @@ -26,6 +26,19 @@ func (c *grpcClient) SendOrderStatus(so sessionOrder) { rpt.Symbol = so.order.Symbol() rpt.ExOrdId = so.order.ExchangeId rpt.ReportType = protocol.ExecutionReport_Status + switch so.order.OrderState { + case New, Booked: + rpt.OrderState = protocol.ExecutionReport_Booked + case PartialFill: + rpt.OrderState = protocol.ExecutionReport_Partial + case Filled: + rpt.OrderState = protocol.ExecutionReport_Filled + case Cancelled: + rpt.OrderState = protocol.ExecutionReport_Cancelled + case Rejected: + rpt.OrderState = protocol.ExecutionReport_Rejected + } + rpt.RejectReason = so.order.RejectReason rpt.ClOrdId = int32(so.order.Id) rpt.Quantity = ToFloat(so.order.Quantity) rpt.Price = ToFloat(so.order.Price) @@ -69,6 +82,23 @@ func (c *grpcClient) sendTradeExecutionReport(so sessionOrder, price Fixed, quan } else { rpt.Side = protocol.CreateOrderRequest_Sell } + switch so.order.OrderState { + case New, Booked: + rpt.OrderState = protocol.ExecutionReport_Booked + case PartialFill: + rpt.OrderState = protocol.ExecutionReport_Partial + case Filled: + rpt.OrderState = protocol.ExecutionReport_Filled + case Cancelled: + rpt.OrderState = protocol.ExecutionReport_Cancelled + case Rejected: + rpt.OrderState = protocol.ExecutionReport_Rejected + } + + if !remaining.Equal(ZERO) { + rpt.OrderState = protocol.ExecutionReport_Partial + } + rpt.Remaining = ToFloat(remaining) reply := &protocol.OutMessage_Execrpt{Execrpt: rpt} so.client.(*grpcClient).conn.Send(&protocol.OutMessage{Reply: reply}) diff --git a/pkg/connector/grpc/connector.go b/pkg/connector/grpc/connector.go index c4480df..4bf4a68 100644 --- a/pkg/connector/grpc/connector.go +++ b/pkg/connector/grpc/connector.go @@ -276,6 +276,7 @@ func (c *grpcConnector) GetOrder(id OrderID) *Order { } return _order.(*Order) } + func (c *grpcConnector) handleExecutionReport(rpt *protocol.ExecutionReport) { exchangeId := rpt.ExOrdId var id OrderID