Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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));
            }
        }
Exemplo n.º 3
0
        /// <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));
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 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    ="";
 }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        /// <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));
            }
        }
Exemplo n.º 8
0
        /// <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));
            }
        }
Exemplo n.º 9
0
        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");
        }
Exemplo n.º 10
0
        /// <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);
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        /// <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));
            }
        }
Exemplo n.º 14
0
        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));
            }
        }