private void _notificaEnvioParaCanal(OrdemInfo ordem) { AcompanhamentoOrdemInfo acompanhamento = new AcompanhamentoOrdemInfo(); if (ordem.Acompanhamentos != null && ordem.Acompanhamentos.Count > 0) { ordem.Acompanhamentos.Clear(); } acompanhamento.CodigoDoCliente = ordem.Account; acompanhamento.CanalNegociacao = ordem.ChannelID; acompanhamento.Instrumento = ordem.Symbol; acompanhamento.NumeroControleOrdem = ordem.ClOrdID; acompanhamento.Preco = Convert.ToDecimal(ordem.Price); acompanhamento.StatusOrdem = OrdemStatusEnum.ENVIADAPARAOCANAL; acompanhamento.DataAtualizacao = DateTime.Now; acompanhamento.QuantidadeSolicitada = ordem.OrderQty; acompanhamento.Descricao = "Ordem enviada para o servico de canal"; ordem.Acompanhamentos.Add(acompanhamento); ordem.OrdStatus = OrdemStatusEnum.ENVIADAPARAOCANAL; _sendExecutionReport(ordem); }
/// <summary> /// Efetua os calculos com base no acompanhamento da ordem no momento da execucao parcial da mesma na bolsa /// </summary> /// <param name="Acompanhamento">Acompanhamento de ordem base do calculo</param> private void Calcular_PARCIALMENTEEXECUTADA(AcompanhamentoOrdemInfo Acompanhamento) { try { if (Acompanhamento.Direcao.Equals(Gradual.OMS.RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Compra)) { this.Posicao.QuantidadeExecutadaCompra += Acompanhamento.QuantidadeNegociada; this.Posicao.QuantidadeAbertaCompra -= Acompanhamento.QuantidadeNegociada; this.Posicao.FinanceiroTotalExecutadaCompra += Acompanhamento.LastPx * Acompanhamento.QuantidadeNegociada; this.Posicao.FinanceiroTotalAbertaCompra -= Acompanhamento.Preco * Acompanhamento.QuantidadeNegociada; } if (Acompanhamento.Direcao.Equals(Gradual.OMS.RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Venda)) { this.Posicao.QuantidadeExecutadaVenda += Acompanhamento.QuantidadeNegociada; this.Posicao.QuantidadeAbertaVenda -= Acompanhamento.QuantidadeNegociada; this.Posicao.FinanceiroTotalExecutadaVenda += Acompanhamento.LastPx * Acompanhamento.QuantidadeNegociada; this.Posicao.FinanceiroTotalAbertaVenda -= Acompanhamento.Preco * Acompanhamento.QuantidadeNegociada; } this.Posicao.FinanceiroNetAbertas = this.Posicao.FinanceiroTotalAbertaVenda - this.Posicao.FinanceiroTotalAbertaCompra; this.Posicao.FinanceiroNetExecutadas = this.Posicao.FinanceiroTotalExecutadaVenda - this.Posicao.FinanceiroTotalExecutadaCompra; } catch (Exception ex) { Debug.WriteLine(string.Format("Acompanhamento.Calcular_PARCIALMENTEEXECUTADA(): {0}", ex.Message)); } }
/// <summary> /// Calcula a posição do cliente /// </summary> /// <param name="Acompanhamento">Acompanhamento da ordem a ser utilizado para o calculo</param> private void Calcular(AcompanhamentoOrdemInfo Acompanhamento) { try { switch (Acompanhamento.StatusOrdem) { case OrdemStatusEnum.NOVA: Calcular_NOVA(Acompanhamento); break; case OrdemStatusEnum.SUBSTITUIDA: Calcular_SUBSTITUIDA(Acompanhamento); break; case OrdemStatusEnum.PARCIALMENTEEXECUTADA: Calcular_PARCIALMENTEEXECUTADA(Acompanhamento); break; case OrdemStatusEnum.EXECUTADA: Calcular_EXECUTADA(Acompanhamento); break; case OrdemStatusEnum.CANCELADA: Calcular_CANCELADA(Acompanhamento); break; } CalcularPrecoExecucao(Acompanhamento); } catch (Exception ex) { Debug.WriteLine(string.Format("Acompanhamento.Calcular(): {0}", ex.Message)); } }
private OrdemInfo GerarAcompanhamentoAleatorio(ref Random pRand) { OrdemInfo lRetornoOrdem; AcompanhamentoOrdemInfo lRetorno = new AcompanhamentoOrdemInfo(); lRetorno.CanalNegociacao = 1; lRetorno.DataAtualizacao = DateTime.Now; lRetorno.DataOrdemEnvio = DateTime.Now.AddSeconds(pRand.Next(-30, -1)); lRetorno.DataValidade = DateTime.Now.AddDays(1); lRetorno.Direcao = (pRand.Next(0, 1) == 0) ? OrdemDirecaoEnum.Compra : OrdemDirecaoEnum.Venda; lRetorno.Instrumento = gInstrumentos[pRand.Next(0, 9)]; lRetorno.NumeroControleOrdem = string.Format("{0}", gAcompanhamentosParaEnviar.Count + 1); lRetorno.CodigoResposta = string.Format("r-{0}", lRetorno.NumeroControleOrdem); lRetorno.CodigoTransacao = string.Format("t-{0}", lRetorno.NumeroControleOrdem); lRetorno.Preco = (decimal)pRand.Next(100, 500) * (decimal)pRand.NextDouble(); lRetorno.QuantidadeSolicitada = pRand.Next(1, 50) * 100; lRetorno.QuantidadeExecutada = pRand.Next(20, 50) * 100; if (lRetorno.QuantidadeExecutada > lRetorno.QuantidadeSolicitada) { lRetorno.QuantidadeExecutada = lRetorno.QuantidadeSolicitada; } if (lRetorno.QuantidadeExecutada == lRetorno.QuantidadeSolicitada) { lRetorno.StatusOrdem = OrdemStatusEnum.EXECUTADA; } else { lRetorno.StatusOrdem = OrdemStatusEnum.PARCIALMENTEEXECUTADA; } //lRetornoOrdem = new OrdemInfo(lRetorno); lRetornoOrdem = new OrdemInfo(); lRetornoOrdem.Acompanhamentos.Add(lRetorno); return(lRetornoOrdem); }
public TransporteOrdemDetalhe(AcompanhamentoOrdemInfo info) { this.CodigoMensagem = info.CodigoResposta; this.QuantidadeSolicitada = info.QuantidadeSolicitada; this.QuantidadeRemanescente = info.QuantidadeRemanescente; this.QuantidadeExecutada = info.QuantidadeExecutada; this.Situacao = info.StatusOrdem.ToString();; this.Data = info.DataAtualizacao.ToString("dd/MM/yyyy HH:mm:ss");; this.Descricao = info.Descricao; this.Preco = info.Preco.ToString("N2"); //this.NumeroIdentificador =""; }
public object InserirAcompanhamentoDeOrdem(AcompanhamentoOrdemInfo pInfo) { object lIdOrdemHistorico; AbrirConexao(); gComando = new SqlCommand("prc_update_order", gConexao); gComando.CommandType = System.Data.CommandType.StoredProcedure; gComando.Parameters.Add(new SqlParameter("@ClOrdID", pInfo.NumeroControleOrdem)); gComando.Parameters.Add(new SqlParameter("@OrdStatusId", pInfo.StatusOrdem)); gComando.Parameters.Add(new SqlParameter("@ExchangeNumberID", pInfo.CodigoResposta)); gComando.Parameters.Add(new SqlParameter("@OrderQtyRemaining", pInfo.QuantidadeRemanescente)); gComando.Parameters.Add(new SqlParameter("@CumQty", pInfo.QuantidadeExecutada)); gComando.Parameters.Add(new SqlParameter("@Price", pInfo.Preco)); if (bSaveFixMsgSeqNum) { gComando.Parameters.Add(new SqlParameter("@FixMsgSeqNum", 0)); } gComando.ExecuteNonQuery(); gComando.CommandText = "prc_ins_order_detail_ind"; gComando.Parameters.Clear(); gComando.Parameters.Add(new SqlParameter("@TransactId", pInfo.CodigoTransacao)); gComando.Parameters.Add(new SqlParameter("@ClOrdID", pInfo.NumeroControleOrdem)); gComando.Parameters.Add(new SqlParameter("@OrderQty", pInfo.QuantidadeSolicitada)); gComando.Parameters.Add(new SqlParameter("@OrdQtyRemaining", pInfo.QuantidadeRemanescente)); gComando.Parameters.Add(new SqlParameter("@CumQty", pInfo.QuantidadeExecutada)); gComando.Parameters.Add(new SqlParameter("@TradeQty", pInfo.QuantidadeNegociada)); gComando.Parameters.Add(new SqlParameter("@Price", pInfo.LastPx)); gComando.Parameters.Add(new SqlParameter("@OrderStatusID", pInfo.StatusOrdem)); gComando.Parameters.Add(new SqlParameter("@Description", pInfo.Descricao)); gComando.Parameters.Add(new SqlParameter("@EventTime", pInfo.DataAtualizacao)); if (bSaveFixMsgSeqNum) { gComando.Parameters.Add(new SqlParameter("@FixMsgSeqNum", 0)); } lIdOrdemHistorico = gComando.ExecuteScalar(); FecharConexao(); return(lIdOrdemHistorico); }
/// <summary> /// Efetua os calculos com base no acompanhamento da ordem no momento do cancelamento da mesma na bolsa /// </summary> /// <param name="Acompanhamento">Acompanhamento de ordem base do calculo</param> private void Calcular_CANCELADA(AcompanhamentoOrdemInfo Acompanhamento) { try { // Separa apenas a ocorrência com status nova, para que os valores acumulados possam ser zerados a posição anterior a substituição da ordem var Ocorrencias = this.Ocorrencias.Values.AsEnumerable(); var Ocorrencias_TODAS = from a in Ocorrencias where a.CodigoResposta.Equals(Acompanhamento.CodigoResposta) select a; var PenultimaOcorrencia = Ocorrencias_TODAS.ToList()[Ocorrencias_TODAS.Count() - 2]; if (Acompanhamento.Direcao.Equals(Gradual.OMS.RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Compra)) { this.Posicao.QuantidadeAbertaCompra -= PenultimaOcorrencia.QuantidadeRemanescente; this.Posicao.FinanceiroTotalAbertaCompra -= (PenultimaOcorrencia.QuantidadeRemanescente * Acompanhamento.LastPx); } if (Acompanhamento.Direcao.Equals(Gradual.OMS.RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Venda)) { this.Posicao.QuantidadeAbertaVenda -= PenultimaOcorrencia.QuantidadeRemanescente; this.Posicao.FinanceiroTotalAbertaVenda -= (PenultimaOcorrencia.QuantidadeRemanescente * Acompanhamento.LastPx); } if (this.Posicao.QuantidadeAbertaCompra.Equals(0)) { this.Posicao.FinanceiroTotalAbertaCompra = 0; } if (this.Posicao.QuantidadeAbertaVenda.Equals(0)) { this.Posicao.FinanceiroTotalAbertaVenda = 0; } this.Posicao.FinanceiroNetAbertas = this.Posicao.FinanceiroTotalAbertaVenda - this.Posicao.FinanceiroTotalAbertaCompra; } catch (Exception ex) { Debug.WriteLine(string.Format("Acompanhamento.Calcular_CANCELADA(): {0}", ex.Message)); } }
/// <summary> /// Efetua os calculos com base no acompanhamento da ordem no momento da alteração da mesma na bolsa /// </summary> /// <param name="Acompanhamento">Acompanhamento de ordem base do calculo</param> private void Calcular_SUBSTITUIDA(AcompanhamentoOrdemInfo Acompanhamento) { //TODO: mudar o controle para carregar os acompanhamentos pois quando se trata de uma ordem VAC o CodigoResposta troca TipoSubstituicao Tipo = TipoSubstituicao.INALTERADA; try { var Ocorrencias = this.Ocorrencias.Values.AsEnumerable(); var Ocorrencias_TODAS = from a in Ocorrencias where a.CodigoResposta.Equals(Acompanhamento.CodigoResposta) select a; var PenultimaOcorrencia = Ocorrencias_TODAS.ToList()[Ocorrencias_TODAS.Count() - 2]; if (!PenultimaOcorrencia.Preco.Equals(Acompanhamento.Preco)) { Tipo = TipoSubstituicao.PRECO; //Aplicacao.GravarLog("Acompanhamento.Calcular_SUBSTITUIDA()", String.Format("Ordem: {0} - Substituida por alteração de preço", Acompanhamento.NumeroControleOrdem.ToString())); } if (!PenultimaOcorrencia.QuantidadeRemanescente.Equals(Acompanhamento.QuantidadeRemanescente)) { Tipo = TipoSubstituicao.QUANTIDADE; //Aplicacao.GravarLog("Acompanhamento.Calcular_SUBSTITUIDA()", String.Format("Ordem: {0} - Substituida por alteração de quantidade", Acompanhamento.NumeroControleOrdem.ToString())); } if (!PenultimaOcorrencia.Preco.Equals(Acompanhamento.Preco) && !PenultimaOcorrencia.QuantidadeRemanescente.Equals(Acompanhamento.QuantidadeRemanescente)) { Tipo = TipoSubstituicao.PRECO_QUANTIDADE; //Aplicacao.GravarLog("Acompanhamento.Calcular_SUBSTITUIDA()", String.Format("Ordem: {0} - Substituida por alteração de quantidade e preço", Acompanhamento.NumeroControleOrdem.ToString())); } CalcularSubstituicao(Tipo, PenultimaOcorrencia, Acompanhamento); this.Posicao.FinanceiroNetAbertas = this.Posicao.FinanceiroTotalAbertaVenda - this.Posicao.FinanceiroTotalAbertaCompra; } catch (Exception ex) { Debug.WriteLine(string.Format("Acompanhamento.Calcular_SUBSTITUIDA(): {0}", ex.Message)); } }
public static void AdicionarAcompanhamentoDeOrdem(string pIdDaOrdem, int pContaDoUsuario, string pPapel, decimal pPreco, int pQuantidade) { OrdemInfo lInfo; AcompanhamentoOrdemInfo lAcompanhamento = new AcompanhamentoOrdemInfo(); lAcompanhamento.NumeroControleOrdem = pIdDaOrdem; lAcompanhamento.CodigoDoCliente = pContaDoUsuario; lAcompanhamento.Instrumento = pPapel; lAcompanhamento.Preco = pPreco; lAcompanhamento.QuantidadeExecutada = pQuantidade; lAcompanhamento.StatusOrdem = OrdemStatusEnum.EXECUTADA; lAcompanhamento.CodigoTransacao = "tX-" + pIdDaOrdem; //lInfo = new OrdemInfo(lAcompanhamento); lInfo = new OrdemInfo(); lInfo.Acompanhamentos.Add(lAcompanhamento); gAcompanhamentosParaEnviar.Enqueue(lInfo); Console.WriteLine("Ordem em fila para envio"); }
/// <summary> /// Preenche a lista de acompanhamentos para enviar com dados mais estruturados do que randomicamente /// </summary> private void PreencherListaComAcompanhamentosOrganizados() { AcompanhamentoOrdemInfo lInfo1, lInfo2, lInfo3, lInfo4, lInfo1a, lInfo2a, lInfo3a, lInfo4a; OrdemInfo lDummyOrdem; lInfo1 = new AcompanhamentoOrdemInfo() { CanalNegociacao = 1 , CodigoDoCliente = 1111111111 , NumeroControleOrdem = "1111111111010120101234" , CodigoResposta = "r-1111111111010120101234" , CodigoTransacao = "t1-1111111111010120101234" , Instrumento = "PETR4" , Preco = 28.8M , Direcao = OrdemDirecaoEnum.Compra , QuantidadeSolicitada = 1000 , DataOrdemEnvio = DateTime.Now.AddSeconds(-1) , DataAtualizacao = DateTime.Now , DataValidade = DateTime.Now.AddDays(1) , StatusOrdem = OrdemStatusEnum.NOVA }; //lDummyOrdem = new OrdemInfo(lInfo1); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo1); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); lInfo2 = new AcompanhamentoOrdemInfo() { CanalNegociacao = 1 , CodigoDoCliente = Convert.ToInt32(2222222222) , NumeroControleOrdem = "2222222222010120102222" , CodigoResposta = "r-2222222222010120102222" , CodigoTransacao = "t1-2222222222010120102222" , Instrumento = "VALE5" , Preco = 45.5M , Direcao = OrdemDirecaoEnum.Compra , QuantidadeSolicitada = 300 , DataOrdemEnvio = DateTime.Now.AddSeconds(-1) , DataAtualizacao = DateTime.Now , DataValidade = DateTime.Now.AddDays(1) , StatusOrdem = OrdemStatusEnum.NOVA }; //lDummyOrdem = new OrdemInfo(lInfo2); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo2); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); lInfo3 = new AcompanhamentoOrdemInfo() { CanalNegociacao = 1 , CodigoDoCliente = Convert.ToInt32(3333333333) , NumeroControleOrdem = "333333333301012013333" , CodigoResposta = "r-333333333301012013333" , CodigoTransacao = "t1-333333333301012013333" , Instrumento = "VALE5" , Preco = 43.0M , Direcao = OrdemDirecaoEnum.Venda , QuantidadeSolicitada = 2000 , DataOrdemEnvio = DateTime.Now.AddSeconds(-1) , DataAtualizacao = DateTime.Now , DataValidade = DateTime.Now.AddDays(1) , StatusOrdem = OrdemStatusEnum.NOVA }; //lDummyOrdem = new OrdemInfo(lInfo3); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo3); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); lInfo4 = new AcompanhamentoOrdemInfo() { CanalNegociacao = 1 , CodigoDoCliente = Convert.ToInt32(1111111111) , NumeroControleOrdem = "1111111111010120104444" , CodigoResposta = "r-1111111111010120104444" , CodigoTransacao = "t1-1111111111010120104444" , Instrumento = "VALE5" , Preco = 30.0M , Direcao = OrdemDirecaoEnum.Compra , QuantidadeSolicitada = 600 , DataOrdemEnvio = DateTime.Now.AddSeconds(-1) , DataAtualizacao = DateTime.Now , DataValidade = DateTime.Now.AddDays(1) , StatusOrdem = OrdemStatusEnum.NOVA }; //lDummyOrdem = new OrdemInfo(lInfo4); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo4); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); lInfo1a = new AcompanhamentoOrdemInfo(lInfo1); lInfo1a.QuantidadeExecutada = 1000; lInfo1a.CodigoTransacao = "t2-1111111111010120101234"; lInfo1a.StatusOrdem = OrdemStatusEnum.EXECUTADA; //lDummyOrdem = new OrdemInfo(lInfo1a); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo1a); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); lInfo2a = new AcompanhamentoOrdemInfo(lInfo2); lInfo2a.CodigoTransacao = "t2-2222222222010120102222"; lInfo2a.StatusOrdem = OrdemStatusEnum.REJEITADA; //lDummyOrdem = new OrdemInfo(lInfo2a); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo2a); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); lInfo3a = new AcompanhamentoOrdemInfo(lInfo3); lInfo3a.CodigoTransacao = "t2-333333333301012013333"; lInfo3a.QuantidadeExecutada = 1000; lInfo3a.StatusOrdem = OrdemStatusEnum.PARCIALMENTEEXECUTADA; //lDummyOrdem = new OrdemInfo(lInfo3a); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo3a); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); lInfo3a = new AcompanhamentoOrdemInfo(lInfo3a); lInfo3a.CodigoTransacao = "t3-333333333301012013333"; lInfo3a.QuantidadeExecutada = 500; lInfo3a.StatusOrdem = OrdemStatusEnum.PARCIALMENTEEXECUTADA; //lDummyOrdem = new OrdemInfo(lInfo3a); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo3a); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); lInfo3a = new AcompanhamentoOrdemInfo(lInfo3a); lInfo3a.CodigoTransacao = "t4-333333333301012013333"; lInfo3a.QuantidadeExecutada = 500; lInfo3a.StatusOrdem = OrdemStatusEnum.EXECUTADA; //lDummyOrdem = new OrdemInfo(lInfo3a); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo3a); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); lInfo4a = new AcompanhamentoOrdemInfo(lInfo4); lInfo4a.CodigoTransacao = "t2-1111111111010120104444"; lInfo4a.QuantidadeExecutada = 600; lInfo4a.StatusOrdem = OrdemStatusEnum.EXECUTADA; //lDummyOrdem = new OrdemInfo(lInfo4a); lDummyOrdem = new OrdemInfo(); lDummyOrdem.Acompanhamentos.Add(lInfo4a); gAcompanhamentosParaEnviar.Enqueue(lDummyOrdem); }
private List <OrdemInfo> PreencherOrdensInfoDaVwOrderDetails(DataSet pDataSetDeResultado) { string lUltimoId = ""; List <OrdemInfo> lRetorno = new List <OrdemInfo>(); OrdemInfo lOrdem; AcompanhamentoOrdemInfo lAcompanhamento; foreach (DataRow lRow in pDataSetDeResultado.Tables[0].Rows) { if (lUltimoId != lRow["ClOrdId"].ToString()) { lOrdem = new OrdemInfo(); lOrdem.Acompanhamentos = new List <AcompanhamentoOrdemInfo>(); lOrdem.IdOrdem = Convert.ToInt32(lRow["OrderId"]); lOrdem.Account = lRow["Account"].DBToInt32(); lOrdem.ChannelID = lRow["ChannelId"].DBToInt32(); lOrdem.ClOrdID = lRow["ClOrdId"].DBToString(); lOrdem.OrigClOrdID = lRow["OrigClOrdID"].DBToString(); lOrdem.ExchangeNumberID = lRow["ExchangeNumberId"].DBToString(); lOrdem.ExecBroker = lRow["ExecBroker"].DBToString(); lOrdem.ExpireDate = lRow["ExpireDate"].DBToDateTime(); lOrdem.MaxFloor = lRow["MaxFloor"].DBToDouble(); lOrdem.MinQty = lRow["MinQty"].DBToDouble(); lOrdem.OrderQty = lRow["OrderQty"].DBToInt32(); lOrdem.OrderQtyRemmaining = lRow["OrderQtyRemaining"].DBToInt32(); lOrdem.CumQty = lRow["CumQty"].DBToInt32(); lOrdem.OrdStatus = (OrdemStatusEnum)lRow["OrdStatusId"].DBToInt32(); lOrdem.OrdType = (OrdemTipoEnum)lRow ["OrdTypeId"].DBToInt32(); lOrdem.RegisterTime = lRow["RegisterTime"].DBToDateTime(); lOrdem.SecurityExchangeID = lRow["SecurityExchangeID"].DBToString(); lOrdem.SecurityID = lRow["SecurityExchangeId"].DBToString(); lOrdem.Side = (OrdemDirecaoEnum)lRow["Side"].DBToInt32(); lOrdem.StopStartID = lRow["StopStartID"].DBToInt32(); lOrdem.Symbol = lRow["Symbol"].DBToString(); lOrdem.TimeInForce = (OrdemValidadeEnum)lRow["TimeInForce"].DBToInt32(); lOrdem.TransactTime = lRow["TransactTime"].DBToDateTime(); lOrdem.FixMsgSeqNum = lRow["FixMsgSeqNum"].DBToInt32(); lOrdem.CompIDOMS = lRow["SystemID"].DBToString(); if (lRow["Price"] != DBNull.Value) { lOrdem.Price = lRow["Price"].DBToDouble().Value; } lRetorno.Add(lOrdem); lUltimoId = lOrdem.ClOrdID; } //Não é dentro de 'else' porque a primeira linha tem o primeiro acompanhamento: lAcompanhamento = new AcompanhamentoOrdemInfo(); lAcompanhamento.CanalNegociacao = lRow["ChannelID"].DBToInt32(); lAcompanhamento.CodigoDoCliente = lRow["Account"].DBToInt32(); lAcompanhamento.CodigoResposta = lRow["ExchangeNumberId"].DBToString(); lAcompanhamento.CodigoTransacao = lRow["OrderDetail_TransactId"].DBToString(); lAcompanhamento.DataAtualizacao = lRow["TransactTime"].DBToDateTime(); lAcompanhamento.DataOrdemEnvio = lRow["RegisterTime"].DBToDateTime(); lAcompanhamento.DataValidade = lRow["ExpireDate"].DBToDateTime(); lAcompanhamento.Direcao = (OrdemDirecaoEnum)lRow["Side"].DBToInt32(); lAcompanhamento.Instrumento = lRow["Symbol"].DBToString(); lAcompanhamento.NumeroControleOrdem = lRow["ClOrdId"].DBToString(); lAcompanhamento.Descricao = lRow["OrderDetail_Description"].DBToString(); lAcompanhamento.QuantidadeRemanescente = lRow["OrderDetail_OrdQtyRemaining"].DBToInt32(); lAcompanhamento.QuantidadeExecutada = lRow["OrderDetail_CumQty"].DBToInt32(); lAcompanhamento.QuantidadeSolicitada = lRow["OrderDetail_OrderQty"].DBToInt32(); lAcompanhamento.QuantidadeNegociada = lRow["OrderDetail_TradeQty"].DBToInt32(); lAcompanhamento.StatusOrdem = (OrdemStatusEnum)lRow["OrderDetail_OrderStatusId"].DBToInt32(); lAcompanhamento.FixMsgSeqNum = lRow["OrderDetail_FixMsgSeqNum"].DBToInt32(); if (lRow["OrderDetail_Price"] != DBNull.Value) { lAcompanhamento.Preco = lRow["OrderDetail_Price"].DBToDecimal(); lAcompanhamento.LastPx = lRow["OrderDetail_Price"].DBToDecimal();; } lRetorno[lRetorno.Count - 1].Acompanhamentos.Add(lAcompanhamento); } return(lRetorno); }
public static OrdemInfo Fix44ExecutionReport2OrdemInfo(QuickFix.FIX44.ExecutionReport er, FixSessionItem cfg) { try { OrdemInfo order = new OrdemInfo(); string descricao = string.Empty; // order = new OrdemInfo(); order.Account = Convert.ToInt32(er.IsSetAccount() ? er.Account.getValue() : "0"); order.Exchange = cfg.Bolsa; order.ChannelID = cfg.Operador; order.ClOrdID = er.ClOrdID.ToString();//chaveClOrdId; order.OrigClOrdID = er.IsSetOrigClOrdID() ? er.OrigClOrdID.getValue() : null; order.ExecBroker = "227"; if (er.IsSetExpireDate()) { string expdate = er.ExpireDate.getValue() + "235959"; order.ExpireDate = DateTime.ParseExact(expdate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture); } else { order.ExpireDate = DateTime.MinValue; } order.MaxFloor = er.IsSetMaxFloor() ? Convert.ToDouble(er.MaxFloor.getValue()) : 0; order.MinQty = er.IsSetMinQty() ? Convert.ToDouble(er.MinQty.getValue()) : 0; order.OrderQty = Convert.ToInt32(er.IsSetOrderQty() ? er.OrderQty.getValue() : 0); order.OrdType = FixMessageUtilities.TraduzirOrdemTipo(er.OrdType.getValue()); order.Price = er.IsSetPrice() ? Convert.ToDouble(er.Price.getValue()) : 0; order.SecurityID = er.IsSetSecurityID() ? er.SecurityID.ToString() : null; order.Side = er.IsSetSide() ? (OrdemDirecaoEnum)Convert.ToInt32(er.Side.ToString()) : OrdemDirecaoEnum.NaoInformado; order.Symbol = er.IsSetSymbol() ? er.Symbol.ToString() : null; order.TimeInForce = er.IsSetTimeInForce() ? FixMessageUtilities.deTimeInForceParaOrdemValidade(er.TimeInForce) : OrdemValidadeEnum.NaoInformado; //} order.ExchangeNumberID = er.IsSetOrderID() ? er.OrderID.getValue() : null; order.OrderQtyRemmaining = Convert.ToInt32(er.IsSetLeavesQty() ? er.LeavesQty.getValue() : 0); order.CumQty = Convert.ToInt32(er.IsSetCumQty() ? er.CumQty.getValue() : 0); order.OrdStatus = FixMessageUtilities.TraduzirOrdemStatus(er.OrdStatus.getValue()); order.Memo5149 = er.IsSetField(5149) ? er.GetField(5149) : String.Empty; order.PossDupFlag = er.Header.IsSetField(Tags.PossDupFlag) ? er.Header.GetBoolean(Tags.PossDupFlag) : false; order.PossResend = er.Header.IsSetField(Tags.PossResend) ? er.Header.GetBoolean(Tags.PossResend) : false; order.CompIDBolsa = er.Header.IsSetField(Tags.SenderCompID) ? er.Header.GetString(Tags.SenderCompID) : cfg.SenderCompID; order.CompIDOMS = er.Header.IsSetField(Tags.TargetCompID) ? er.Header.GetString(Tags.TargetCompID) : cfg.TargetCompID; switch (order.OrdStatus) { case OrdemStatusEnum.NOVA: descricao = "Ordem aberta"; order.RegisterTime = DateTime.Now; break; case OrdemStatusEnum.CANCELADA: descricao = "Ordem cancelada"; break; case OrdemStatusEnum.PARCIALMENTEEXECUTADA: descricao = "Ordem com execucao parcial"; break; case OrdemStatusEnum.SUSPENSA: descricao = "Ordem suspensa"; break; case OrdemStatusEnum.EXECUTADA: descricao = "Ordem executada"; break; case OrdemStatusEnum.SUBSTITUIDA: descricao = "Ordem substituida"; break; case OrdemStatusEnum.REJEITADA: if (er.IsSetText()) { descricao = er.Text.getValue(); } break; } order.TransactTime = DateTime.Now; // Try get the msg seq number order.FixMsgSeqNum = er.Header.IsSetField(Tags.MsgSeqNum) ? er.Header.GetInt(Tags.MsgSeqNum) : 0; order.ProtectionPrice = Convert.ToDecimal(er.IsSetField(35001) ? er.GetString(35001) : "0"); // Setando informações de acompanhamento AcompanhamentoOrdemInfo acompanhamento = new AcompanhamentoOrdemInfo(); acompanhamento.NumeroControleOrdem = order.ClOrdID; acompanhamento.CodigoDoCliente = order.Account; acompanhamento.CodigoResposta = order.ExchangeNumberID; acompanhamento.CodigoTransacao = er.IsSetExecID() ? er.ExecID.getValue() : null; acompanhamento.Instrumento = order.Symbol; acompanhamento.SecurityID = order.SecurityID; acompanhamento.CanalNegociacao = order.ChannelID; acompanhamento.Direcao = order.Side; acompanhamento.QuantidadeSolicitada = order.OrderQty; acompanhamento.QuantidadeExecutada = (int)er.CumQty.getValue(); acompanhamento.QuantidadeRemanescente = (int)er.LeavesQty.getValue(); acompanhamento.QuantidadeNegociada = er.IsSetLastQty() ? (int)er.LastQty.getValue() : 0; acompanhamento.Preco = new Decimal(order.Price); acompanhamento.StatusOrdem = FixMessageUtilities.TraduzirOrdemStatus(er.OrdStatus.getValue()); acompanhamento.DataOrdemEnvio = order.TransactTime; acompanhamento.DataAtualizacao = DateTime.Now; acompanhamento.CodigoRejeicao = er.IsSetOrdRejReason() ? er.OrdRejReason.ToString() : "0"; acompanhamento.Descricao = descricao; // Try get the msg seq number acompanhamento.FixMsgSeqNum = er.Header.IsSetField(Tags.MsgSeqNum) ? er.Header.GetInt(Tags.MsgSeqNum) : 0; acompanhamento.LastPx = er.IsSetLastPx() ? (Decimal)er.LastPx.getValue() : new Decimal(order.Price); acompanhamento.TradeDate = er.IsSetTradeDate() ? er.TradeDate.getValue() : DateTime.Now.ToString("yyyyMMdd"); //BEI Fields //Added in 2012-Nov-13 by ATP acompanhamento.ExchangeOrderID = er.IsSetField(35022) ? er.GetString(35022) : String.Empty; acompanhamento.ExchangeExecID = er.IsSetField(35023) ? er.GetString(35023) : String.Empty; acompanhamento.LastPxInIssuedCurrency = Convert.ToDecimal(er.IsSetField(35024) ? er.GetString(35024) : "0"); acompanhamento.PriceInIssuedCurrency = Convert.ToDecimal(er.IsSetField(35025) ? er.GetString(35025) : "0"); acompanhamento.ExchangeSecondaryOrderID = er.IsSetField(35026) ? er.GetString(35026) : String.Empty; acompanhamento.TradeLinkID = er.IsSetField(820) ? er.GetString(820) : String.Empty; acompanhamento.OrderLinkID = er.IsSetField(5975) ? er.GetString(5975) : String.Empty; acompanhamento.ExchangeQuoteID = er.IsSetField(5001) ? er.GetString(5001) : String.Empty; acompanhamento.PossDupFlag = er.Header.IsSetField(Tags.PossDupFlag) ? er.Header.GetBoolean(Tags.PossDupFlag) : false; acompanhamento.PossResend = er.Header.IsSetField(Tags.PossResend) ? er.Header.GetBoolean(Tags.PossResend) : false; acompanhamento.CompIDBolsa = er.Header.IsSetField(Tags.SenderCompID) ? er.Header.GetString(Tags.SenderCompID) : cfg.SenderCompID; acompanhamento.CompIDOMS = er.Header.IsSetField(Tags.TargetCompID) ? er.Header.GetString(Tags.TargetCompID) : cfg.TargetCompID; if (er.IsSetNoMiscFees()) { int ocorr = er.GetInt(Tags.NoMiscFees);// noMiscFees.getValue(); for (uint i = 0; i < ocorr; i++) { EmolumentoInfo emol = new EmolumentoInfo(); Group feeGroup = er.GetGroup((int)i, Tags.NoMiscFees); emol.Valor = Convert.ToDecimal(feeGroup.IsSetField(Tags.MiscFeeAmt) ? feeGroup.GetString(Tags.MiscFeeAmt) : "0"); emol.BaseEmolumento = Convert.ToInt32(feeGroup.IsSetField(Tags.MiscFeeBasis) ? feeGroup.GetString(Tags.MiscFeeBasis) : "0"); emol.Currency = feeGroup.GetString(Tags.MiscFeeCurr); emol.Tipo = (EmolumentoTipoEnum)feeGroup.GetInt(Tags.MiscFeeType); } } // Adicionando informações de acompanhamento ao OrdemInfo order.Acompanhamentos.Clear(); order.Acompanhamentos.Add(acompanhamento); return(order); } catch (Exception ex) { logger.Error("Fix44ExecutionReport2OrdemInfo(): " + ex.Message, ex); } return(null); }
/// <summary> /// Efetua o calculo do preco medio de execução com base no acompanhamento recebido agregado às execuções efetuadas anteriormente, contemplando o valor em aberto /// </summary> /// <param name="Acompanhamento">Acompanhamento de ordem base do calculo</param> private void CalcularPrecoExecucao(AcompanhamentoOrdemInfo Acompanhamento) { try { if (Acompanhamento.Direcao.Equals(Gradual.OMS.RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Compra)) { if (!Acompanhamento.StatusOrdem.Equals(OrdemStatusEnum.CANCELADA)) { if (this.Posicao.PrecoMedioCompra.Equals(0)) { this.Posicao.PrecoMedioCompra = Acompanhamento.LastPx; } else { if (!this.Posicao.QuantidadeAbertaCompra.Equals(0) || !this.Posicao.QuantidadeExecutadaCompra.Equals(0)) { this.Posicao.PrecoMedioCompra = (this.Posicao.FinanceiroTotalAbertaCompra + this.Posicao.FinanceiroTotalExecutadaCompra) / (this.Posicao.QuantidadeAbertaCompra + this.Posicao.QuantidadeExecutadaCompra); } if (this.Posicao.QuantidadeAbertaCompra.Equals(0)) { if (!this.Posicao.QuantidadeExecutadaCompra.Equals(0)) { this.Posicao.PrecoMedioCompra = (this.Posicao.FinanceiroTotalExecutadaCompra) / (this.Posicao.QuantidadeExecutadaCompra); } } if (this.Posicao.QuantidadeExecutadaCompra.Equals(0)) { if (!this.Posicao.QuantidadeAbertaCompra.Equals(0)) { this.Posicao.PrecoMedioCompra = (this.Posicao.FinanceiroTotalAbertaCompra) / (this.Posicao.QuantidadeAbertaCompra); } } } } else { if (this.Posicao.QuantidadeAbertaCompra.Equals(0) && this.Posicao.QuantidadeExecutadaCompra.Equals(0)) { this.Posicao.PrecoMedioCompra = 0; } if (this.Posicao.QuantidadeAbertaCompra.Equals(0)) { if (!this.Posicao.QuantidadeExecutadaCompra.Equals(0)) { this.Posicao.PrecoMedioCompra = (this.Posicao.FinanceiroTotalExecutadaCompra) / (this.Posicao.QuantidadeExecutadaCompra); } } if (this.Posicao.QuantidadeExecutadaCompra.Equals(0)) { if (!this.Posicao.QuantidadeAbertaCompra.Equals(0)) { this.Posicao.PrecoMedioCompra = (this.Posicao.FinanceiroTotalAbertaCompra) / (this.Posicao.QuantidadeAbertaCompra); } } } } if (Acompanhamento.Direcao.Equals(Gradual.OMS.RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Venda)) { if (!Acompanhamento.StatusOrdem.Equals(OrdemStatusEnum.CANCELADA)) { if (this.Posicao.PrecoMedioVenda.Equals(0)) { this.Posicao.PrecoMedioVenda = Acompanhamento.LastPx; } else { if (!this.Posicao.QuantidadeAbertaVenda.Equals(0) || !this.Posicao.QuantidadeExecutadaVenda.Equals(0)) { this.Posicao.PrecoMedioVenda = (this.Posicao.FinanceiroTotalAbertaVenda + this.Posicao.FinanceiroTotalExecutadaVenda) / (this.Posicao.QuantidadeAbertaVenda + this.Posicao.QuantidadeExecutadaVenda); } if (this.Posicao.QuantidadeAbertaVenda.Equals(0)) { if (!this.Posicao.QuantidadeExecutadaVenda.Equals(0)) { this.Posicao.PrecoMedioVenda = (this.Posicao.FinanceiroTotalExecutadaVenda) / (this.Posicao.QuantidadeExecutadaVenda); } } if (this.Posicao.QuantidadeExecutadaVenda.Equals(0)) { if (!this.Posicao.QuantidadeAbertaVenda.Equals(0)) { this.Posicao.PrecoMedioVenda = (this.Posicao.FinanceiroTotalAbertaVenda) / (this.Posicao.QuantidadeAbertaVenda); } } } } else { if (this.Posicao.QuantidadeAbertaVenda.Equals(0) && this.Posicao.QuantidadeExecutadaVenda.Equals(0)) { this.Posicao.PrecoMedioVenda = 0; } if (this.Posicao.QuantidadeAbertaVenda.Equals(0)) { if (!this.Posicao.QuantidadeExecutadaVenda.Equals(0)) { this.Posicao.PrecoMedioVenda = (this.Posicao.FinanceiroTotalExecutadaVenda) / (this.Posicao.QuantidadeExecutadaVenda); } } if (this.Posicao.QuantidadeExecutadaVenda.Equals(0)) { if (!this.Posicao.QuantidadeAbertaVenda.Equals(0)) { this.Posicao.PrecoMedioVenda = (this.Posicao.FinanceiroTotalAbertaVenda) / (this.Posicao.QuantidadeAbertaVenda); } } } } } catch (Exception ex) { Debug.WriteLine(string.Format("Acompanhamento.CalcularPrecoExecucao(): {0}", ex.Message)); } }
private void CalcularSubstituicao(TipoSubstituicao Tipo, AcompanhamentoOrdemInfo UltimaOcorrenciaHistorica, AcompanhamentoOrdemInfo UltimaOcorrencia) { try { switch (Tipo) { case TipoSubstituicao.PRECO: if (UltimaOcorrencia.Direcao.Equals(OrdemDirecaoEnum.Compra)) { this.Posicao.FinanceiroTotalAbertaCompra -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente * UltimaOcorrenciaHistorica.Preco); this.Posicao.FinanceiroTotalAbertaCompra += (UltimaOcorrencia.QuantidadeRemanescente * UltimaOcorrencia.Preco); } if (UltimaOcorrencia.Direcao.Equals(OrdemDirecaoEnum.Venda)) { this.Posicao.FinanceiroTotalAbertaVenda -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente * UltimaOcorrenciaHistorica.Preco); this.Posicao.FinanceiroTotalAbertaVenda += (UltimaOcorrencia.QuantidadeRemanescente * UltimaOcorrencia.Preco); } break; case TipoSubstituicao.QUANTIDADE: if (UltimaOcorrencia.Direcao.Equals(OrdemDirecaoEnum.Compra)) { this.Posicao.QuantidadeAbertaCompra -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente); this.Posicao.QuantidadeAbertaCompra += (UltimaOcorrencia.QuantidadeRemanescente); this.Posicao.FinanceiroTotalAbertaCompra -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente * UltimaOcorrenciaHistorica.Preco); this.Posicao.FinanceiroTotalAbertaCompra += (UltimaOcorrencia.QuantidadeRemanescente * UltimaOcorrencia.Preco); } if (UltimaOcorrencia.Direcao.Equals(OrdemDirecaoEnum.Venda)) { this.Posicao.QuantidadeAbertaVenda -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente); this.Posicao.QuantidadeAbertaVenda += (UltimaOcorrencia.QuantidadeRemanescente); this.Posicao.FinanceiroTotalAbertaVenda -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente * UltimaOcorrenciaHistorica.Preco); this.Posicao.FinanceiroTotalAbertaVenda += (UltimaOcorrencia.QuantidadeRemanescente * UltimaOcorrencia.Preco); } break; case TipoSubstituicao.PRECO_QUANTIDADE: if (UltimaOcorrencia.Direcao.Equals(OrdemDirecaoEnum.Compra)) { this.Posicao.FinanceiroTotalAbertaCompra -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente * UltimaOcorrenciaHistorica.Preco); this.Posicao.FinanceiroTotalAbertaCompra += (UltimaOcorrencia.QuantidadeRemanescente * UltimaOcorrencia.Preco); this.Posicao.QuantidadeAbertaCompra -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente); this.Posicao.QuantidadeAbertaCompra += (UltimaOcorrencia.QuantidadeRemanescente); } if (UltimaOcorrencia.Direcao.Equals(OrdemDirecaoEnum.Venda)) { this.Posicao.FinanceiroTotalAbertaVenda -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente * UltimaOcorrenciaHistorica.Preco); this.Posicao.FinanceiroTotalAbertaVenda += (UltimaOcorrencia.QuantidadeRemanescente * UltimaOcorrencia.Preco); this.Posicao.QuantidadeAbertaVenda -= (UltimaOcorrenciaHistorica.QuantidadeRemanescente); this.Posicao.QuantidadeAbertaVenda += (UltimaOcorrencia.QuantidadeRemanescente); } break; } } catch (Exception ex) { Debug.WriteLine(string.Format("Acompanhamento.CalcularSubstituicao(): {0}", ex.Message)); } }