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);
        }
Esempio n. 2
0
 public virtual void onMessage(TradeCaptureReport message, QuickFix.SessionID session)
 {
     throw new QuickFix.UnsupportedMessageType();
 }
Esempio n. 3
0
        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(@"========================");
        }