Beispiel #1
0
 private static FixTipoDuracionOrdenEnum traducirTipoOrden(TipoOrdenEntity tipoOrden)
 {
     if (string.IsNullOrEmpty(tipoOrden.Codigo))
     {
         return(FixTipoDuracionOrdenEnum.GTC);
     }
     return((FixTipoDuracionOrdenEnum)tipoOrden.Codigo.ToCharArray()[0]);
 }
        public override ExecutionResult ExecuteCommand(InCourseRequest inCourseRequest)
        {
            if (OrdenHelper.ObtenerOrdenOperacionByProducto(IdProducto.Value))
            {
                throw new M4TraderApplicationException("Ya se cerró una orden para este producto");
            }

            OrdenEntity orden = new OrdenEntity();

            orden.CompraVenta       = CompraOVenta;
            orden.FechaConcertacion = DateTime.Now.ToUniversalTime();

            orden.IdMercado = IdMercado;
            ProductoEntity producto = new ProductoEntity();

            if (CodigoProducto != null)
            {
                producto = CachingManager.Instance.GetProductoByCodigoMonedaDefaultAndRueda(CodigoProducto, orden.IdMercado, SegmentMarketId);
            }
            else
            {
                producto = CachingManager.Instance.GetProductoById(IdProducto.Value);
            }
            orden.IdProducto          = producto.IdProducto;
            orden.IdMoneda            = IdMoneda.HasValue ? IdMoneda.Value : producto.IdMoneda;
            orden.Rueda               = SegmentMarketId;
            orden.IdPersona           = IdPersona.HasValue ? IdPersona.Value : MAEUserSession.Instancia.IdPersona;
            orden.IdEnNombreDe        = IdEnNombreDe;
            orden.Cantidad            = Cantidad;
            orden.CantidadMinima      = OfertaParcial ? CantidadMinima : Cantidad;
            orden.IdSourceApplication = (byte)Source;
            orden.IdEstado            = (int)EstadoOrden.Ingresada;
            orden.OperoPorTasa        = OperoPorTasa;
            orden.Tasa      = Tasa;
            orden.IdUsuario = MAEUserSession.InstanciaCargada ? (int?)MAEUserSession.Instancia.IdUsuario : null;
            if (!StopType)
            {
                orden.PrecioLimite = PrecioLimite;
            }

            if (CodigoPlazoType == "")
            {
                CodigoPlazoType = "CI";
            }

            orden.Plazo = PlazoType.HasValue ? PlazoType.Value : CachingManager.Instance.GetAllPlazos().Find(x => x.Descripcion == CodigoPlazoType).IdPlazo;
            //if (orden.Plazo == (byte)PlazoOrdenEnum.Futuro)
            //{
            //    orden.FechaLiquidacion = CachingManager.Instance.GetFechaLiquidacionByIdProductoAndPlazo(orden.Plazo, orden.IdProducto).FechaLiquidacion;
            //}
            orden.IdTipoVigencia = IdTipoVigencia.HasValue ? (TipoVigencia)IdTipoVigencia.Value : TipoVigencia.NoAplica;

            if (orden.IdTipoVigencia != TipoVigencia.NoAplica)
            {
                orden.FechaVencimiento = FechaVencimiento;
            }

            if (OrderType == "")
            {
                OrderType = "0";
            }

            if (producto.IdTipoProducto == (byte)TiposProducto.FACTURAS)
            {
                OrderType            = "3";
                orden.OperoPorTasa   = true;
                orden.Tasa           = Tasa;
                orden.CantidadMinima = orden.Cantidad;
            }
            TipoOrdenEntity tipoOrden = CachingManager.Instance.GetTipoOrdenByCodigo(OrderType);

            if (tipoOrden != null)
            {
                orden.IdTipoOrden = tipoOrden.IdTipoOrden;
            }
            ResponseGenerico resultado = new ResponseGenerico();

            ordenes = new List <OrdenEntity>();
            ordenes.Add(orden);

            resultado.Resultado = (byte)eResult.Ok;
            OrdenHelper.AltaOrdenDMA(orden);
            orden.TimestampStr = BitConverter.ToString(orden.Timestamp, 0);
            resultado.Detalle  = JsonConvert.SerializeObject(orden);
            return(ExecutionResult.ReturnInmediatelyAndQueueOthers(resultado));
        }
Beispiel #3
0
        public static FixOrdenEntity FixOrden_AccionIngresar(OrdenEntity orden, FixTipoAccionEnum fixAccion,
                                                             PartyEntity persona, MercadoEntity mercado, ProductoEntity producto, MonedaEntity moneda, TipoOrdenEntity tipoOrden, PartyEntity personaEnNombreDe)
        {
            FixOrdenEntity fixOrden = new FixOrdenEntity();

            fixOrden.Accion           = fixAccion;
            fixOrden.NumeroOrdenLocal = orden.IdOrden;
            fixOrden.Mercado          = mercado.Codigo;
            fixOrden.Moneda           = TraducirMoneda(moneda.CodigoISO);
            fixOrden.Producto         = producto.Codigo;
            fixOrden.TipoOferta       = FixTipoEntradaEnum.Offer;

            fixOrden.Cantidad              = orden.Cantidad;
            fixOrden.CantidadMinima        = orden.CantidadMinima;
            fixOrden.Side                  = orden.CompraVenta == "C" ? FixSideOrdenEnum.Buy : FixSideOrdenEnum.Sell;
            fixOrden.FechaVencimientoOrden = orden.FechaVencimiento;
            fixOrden.Rueda                 = orden.Rueda;
            fixOrden.OperoPorTasa          = orden.OperoPorTasa;

            if (orden.PrecioLimite.HasValue)
            {
                fixOrden.TipoOrden = FixTipoOrdenEnum.Limit;
                fixOrden.Precio    = orden.PrecioLimite.Value;
            }
            else
            {
                fixOrden.TipoOrden = FixTipoOrdenEnum.Market;
            }

            if (personaEnNombreDe != null)
            {
                fixOrden.ClienteId  = personaEnNombreDe.TaxIdentificationNumber;
                fixOrden.ClienteRol = FixRolParticipanteEnum.Cliente;
                fixOrden.ClienteNro = personaEnNombreDe.MarketCustomerNumber;
            }

            if (orden.Plazo.HasValue && orden.Plazo.Value > 0)
            {
                fixOrden.TipoPlazoLiquidacionOrden = (PlazoOrdenEnum)orden.Plazo;
                //if (orden.Plazo.Value > (byte)PlazoOrdenEnum.Hr96)
                //{
                //    orden.FechaLiquidacion = CachingManager.Instance.GetFechaLiquidacion(orden.IdProducto,orden.Plazo);
                //}
            }
            fixOrden.TipoDuracionOrden = traducirTipoOrden(tipoOrden);
            if (OrdenesApplication.Instance.ContextoAplicacion.EnviarAgentCode && !string.IsNullOrEmpty(persona.AgentCode))
            {
                fixOrden.AgenteNegociadorId = persona.AgentCode;
            }
            return(fixOrden);
        }