public void OnMessage(TradeCaptureReport ackReport, SessionID session) { TradeReport tradeReport = new TradeReport { Id = ackReport.ExecID.getValue(), LastQty = ackReport.LastQty.getValue(), TransactTime = ackReport.IsSetTransactTime() ? ackReport.TransactTime.getValue() : DateTime.UtcNow, LastPrice = ackReport.LastPx.getValue(), InstrumentId = Convert.ToInt32(ackReport.SecurityID.getValue()) }; NoSides noSides = ackReport.NoSides; tradeReport.Symbol = ackReport.Symbol.getValue(); var group = new TradeCaptureReport.NoSidesGroup(); group = (TradeCaptureReport.NoSidesGroup)ackReport.GetGroup(1, group); if (group.IsSetSide()) { switch (group.Side.getValue()) { case Side.BUY: tradeReport.Side = BuySellType.Buy; break; case Side.SELL: tradeReport.Side = BuySellType.Sell; break; } } tradeReport.OrderId = group.OrderID.getValue(); tradeReport.ClientOrderId = group.ClOrdID.getValue(); //OnTradeReportInvoke(tradeReport); }
public virtual void onMessage(TradeCaptureReport message, QuickFix.SessionID session) { throw new QuickFix.UnsupportedMessageType(); }
public void OnMessage(TradeCaptureReport message, SessionID sessionID) { _interfacePresenter.MostrarMensaje("Llegó un Trade Capture Report!"); var executionType = message.ExecType.getValue(); var fecha = message.TransactTime.getValue(); fecha = TimeZoneInfo.ConvertTimeFromUtc(fecha, _timeZoneInfo); if (executionType == ExecType.TRADE) { var numberOfSides = message.Get(new NoSides()).getValue(); var group = new TradeCaptureReport.NoSidesGroup(); for (var index = 1; index <= numberOfSides; index++) { message.GetGroup(index, group); var idFix = group.OrderID.getValue(); Transaccion transaccion; if (Int32.TryParse(group.ClOrdID.getValue(), out int idTransaccion)) { transaccion = GetTransaccion(idTransaccion, true); } else { transaccion = GetTransaccionByIdFix(idFix); } if (transaccion == null) { var mensaje = $"transaccion con id: {idTransaccion} o idfix: {idFix} no encontrada en BD al recibir un TradeCaptureReport"; _interfacePresenter.MostrarMensaje(mensaje); _logger.LogMensaje(TipoLog.Fatal, mensaje); return; } var precio = message.LastPx.getValue(); var cantidad = message.LastQty.getValue(); var partida = ObtenerPartida(message); var idTransaccionContraparte = message.GetField(new NumericOrderID(NumericOrderID.NumericOrderIDTag)).getValue(); if (transaccion.Estado == EstadoTransacciones.Cancelada) { TransaccionesServices.VincularTransaccionConIdFix(transaccion, idFix); } _interfacePresenter.MostrarMensaje($"NUEVA CONCERTACIÓN (partida {partida})."); _interfacePresenter.MostrarMensaje($"TRADE: Transacción nº{transaccion.ID}, {cantidad} partes a ${precio}"); ConcertadorOrdenes.ConfirmarRecepcionYConcertarOrden(transaccion, new NovedadFIXDTO { FechaConcertacion = fecha, Cantidad = cantidad, Precio = precio, Partida = partida, IdTransaccionContraparte = idTransaccionContraparte, IdFix = idFix }); } } _interfacePresenter.MostrarMensaje(@"========================"); }