func (a *Application) updateOrder(order internal.Order, status enum.OrdStatus) { execReport := executionreport.New( field.NewOrderID(order.ClOrdID), field.NewExecID(a.genExecID()), field.NewExecTransType(enum.ExecTransType_NEW), field.NewExecType(enum.ExecType(status)), field.NewOrdStatus(status), field.NewSymbol(order.Symbol), field.NewSide(order.Side), field.NewLeavesQty(order.OpenQuantity(), 2), field.NewCumQty(order.ExecutedQuantity, 2), field.NewAvgPx(order.AvgPx, 2), ) execReport.SetOrderQty(order.Quantity, 2) execReport.SetClOrdID(order.ClOrdID) switch status { case enum.OrdStatus_FILLED, enum.OrdStatus_PARTIALLY_FILLED: execReport.SetLastShares(order.LastExecutedQuantity, 2) execReport.SetLastPx(order.LastExecutedPrice, 2) } execReport.Header.SetTargetCompID(order.SenderCompID) execReport.Header.SetSenderCompID(order.TargetCompID) quickfix.Send(execReport) }
func (a *Application) fillOrder(order internal.Order) { status := enum.OrdStatus_FILLED if !order.IsClosed() { status = enum.OrdStatus_PARTIALLY_FILLED } a.updateOrder(order, status) }