Beispiel #1
0
        private ExecutarOrdemResponse EnviarOrdemRoteador(OrdemInfo OrdemInfo)
        {
            try
            {
                // Instancia servico de ordens
                logger.Info("Invoca servico de roteamento de ordens");
                IRoteadorOrdens ServicoRoteador = Ativador.Get <IRoteadorOrdens>();

                OrdemInfo.TransactTime = DateTime.Now;

                // Envia a ordem para o reteador e aguarda o retorno
                logger.Info("Envia a ordem para o roteador");
                ExecutarOrdemResponse RespostaOrdem =
                    ServicoRoteador.ExecutarOrdem(new RoteadorOrdens.Lib.Mensagens.ExecutarOrdemRequest()
                {
                    info = OrdemInfo
                });

                return(RespostaOrdem);
            }
            catch (Exception ex)
            {
                logger.Info("Ocorreu um erro ao enviar a ordem para o roteador");
                logger.Info("Descrição     :" + ex.Message);

                throw (ex);
            }
        }
Beispiel #2
0
        /// <summary>
        ///MONITOR DE CONEXOES DO ROTEADOR
        /// </summary>
        private void RunMonitor()
        {
            try
            {
                logger.Info("Iniciando thread de monitoracao do roteador de ordens");
                int _iMonitorConexoes = 0;

                if (ServicoRoteador == null)
                {
                    ServicoRoteador = Ativador.Get <IRoteadorOrdens>();
                }

                while (_bKeepRunning)
                {
                    // 4 * 250 = 1 segundo
                    if (_iMonitorConexoes == 30 * 4)
                    {
                        lock (ServicoRoteador)
                        {
                            try
                            {
                                if (ServicoRoteador == null)
                                {
                                    ServicoRoteador = Ativador.Get <IRoteadorOrdens>();
                                }
                                ServicoRoteador.Ping(new PingRequest());
                            }
                            catch (Exception ex)
                            {
                                Ativador.AbortChannel(ServicoRoteador);
                                ServicoRoteador = null;
                            }
                        }
                        _iMonitorConexoes = 0;
                    }
                    else
                    {
                        _iMonitorConexoes++;
                    }

                    Thread.Sleep(250);
                }
            }
            catch (Exception ex)
            {
                logger.Error("RunMonitor(): " + ex.Message, ex);
            }

            logger.Info("THREAD DE MONITORAMENTO DO ROTEADOR FINALIZADA");
        }
Beispiel #3
0
        private void button3_Click(object sender, EventArgs e)
        {
            _roteador   = Ativador.Get <IRoteadorOrdens>();
            lastCLOrdID = Convert.ToInt64(txtClOrdID.Text);

            for (int i = 0; i < 50; i++)
            {
                lastCLOrdID++;

                enviar_ordem(lastCLOrdID);
            }

            txtClOrdID.Text = lastCLOrdID.ToString();
        }
        private OrdemInfo enviarNovaOrdem(ParametroTesteConfig parametro, string ativo, OrdemDirecaoEnum sentido)
        {
            OrdemInfo ordem = new OrdemInfo();

            ordem.ClOrdID      = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-" + ativo + parametro.Porta + parametro.Account;
            ordem.Account      = Convert.ToInt32(parametro.Account);
            ordem.OrdType      = OrdemTipoEnum.Limitada;
            ordem.TimeInForce  = OrdemValidadeEnum.ValidaParaODia;
            ordem.Symbol       = ativo;
            ordem.SecurityID   = ativo;
            ordem.Price        = obterPrecoOrdem(ativo);
            ordem.Exchange     = parametro.Bolsa;
            ordem.ChannelID    = Convert.ToInt32(parametro.Porta);
            ordem.Side         = sentido;
            ordem.OrdStatus    = OrdemStatusEnum.ENVIADAPARAOROTEADORDEORDENS;
            ordem.OrderQty     = parametro.Qtde;
            ordem.RegisterTime = DateTime.Now;

            if (String.IsNullOrEmpty(parametro.EnteringTrader))
            {
                ordem.ExecBroker = "227";
            }
            else
            {
                ordem.ExecBroker = parametro.EnteringTrader;
            }

            lock (dctOrdens)
            {
                dctOrdens.Add(ordem.ClOrdID, ordem);
            }

            ExecutarOrdemRequest request = new ExecutarOrdemRequest();

            request.info = ordem;

            IRoteadorOrdens       roteador = Ativador.Get <IRoteadorOrdens>();
            ExecutarOrdemResponse response = roteador.ExecutarOrdem(request);

            if (response.DadosRetorno.StatusResposta != StatusRoteamentoEnum.Sucesso)
            {
                logger.Error("Erro ao enviar ordem [" + ordem.ClOrdID + "]");
                foreach (OcorrenciaRoteamentoOrdem ocorr in response.DadosRetorno.Ocorrencias)
                {
                    logger.Error("Erro: " + ocorr.Ocorrencia);
                }
            }

            return(ordem);
        }
Beispiel #5
0
        private void button4_Click_1(object sender, EventArgs e)
        {
            _roteador   = Ativador.Get <IRoteadorOrdens>();
            lastCLOrdID = Convert.ToInt64(txtClOrdID.Text);

            for (int j = 0; j < 30; j++)
            {
                for (int i = 0; i < 10; i++)
                {
                    lastCLOrdID++;

                    enviar_ordem(lastCLOrdID);

                    Application.DoEvents();
                }
                Application.DoEvents();
                Thread.Sleep(500);
                Application.DoEvents();
            }

            txtClOrdID.Text = lastCLOrdID.ToString();
        }
        private void cancelarOrdem(OrdemInfo ordem)
        {
            try
            {
                OrdemCancelamentoInfo info = new OrdemCancelamentoInfo();
                info.ClOrdID     = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-C" + ordem.Symbol + ordem.ChannelID + ordem.Account;
                info.Account     = ordem.Account;
                info.ChannelID   = ordem.ChannelID;
                info.Exchange    = ordem.Exchange;
                info.OrigClOrdID = ordem.ClOrdID;
                info.Symbol      = ordem.Symbol;
                info.SecurityID  = ordem.SecurityID;
                info.Side        = ordem.Side;
                if (!String.IsNullOrEmpty(ordem.ExecBroker))
                {
                    info.ExecBroker = ordem.ExecBroker;
                }
                ExecutarCancelamentoOrdemRequest request = new ExecutarCancelamentoOrdemRequest();

                IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>();
                ExecutarCancelamentoOrdemResponse response = roteador.CancelarOrdem(request);

                if (response.DadosRetorno.StatusResposta != StatusRoteamentoEnum.Sucesso)
                {
                    logger.Error("Erro ao cancelar ordem [" + ordem.ClOrdID + "] alteracao de [" + ordem.ClOrdID + "]");
                    foreach (OcorrenciaRoteamentoOrdem ocorr in response.DadosRetorno.Ocorrencias)
                    {
                        logger.Error("Erro: " + ocorr.Ocorrencia);
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("cancelarOrdem(): " + ex.Message, ex);
            }
        }
Beispiel #7
0
        private void btOrderX_Click(object sender, EventArgs e)
        {
            try
            {
                frmPontaVenda frm = new frmPontaVenda();

                OrdemInfo ordemCompra = new OrdemInfo();

                ordemCompra.ClOrdID   = txtClOrdID.Text;
                ordemCompra.Account   = Convert.ToInt32(txtCodCliente.Text);
                ordemCompra.ChannelID = Convert.ToInt32(txtOperador.Text);

                if (cmbBolsa.SelectedItem.Equals("BOVESPA"))
                {
                    ordemCompra.Exchange = "BOVESPA";
                }
                else
                {
                    ordemCompra.Exchange = "BMF";
                }

                ordemCompra.ExchangeNumberID = txtExchangeNumber.Text;
                ordemCompra.Price            = Convert.ToDouble(txtPreco.Text);
                ordemCompra.OrderQty         = Convert.ToInt32(txtQtde.Text);
                ordemCompra.MinQty           = Convert.ToInt32(txtQtdeMin.Text);
                ordemCompra.MaxFloor         = Convert.ToInt32(txtQtdeAparente.Text);
                ordemCompra.Symbol           = txtPapel.Text;
                ordemCompra.SecurityID       = txtSecurityId.Text;
                ordemCompra.RegisterTime     = DateTime.Now;
                ordemCompra.TransactTime     = DateTime.Now;
                ordemCompra.ExecBroker       = txtTraderID.Text;

                if (rdCompra.Checked)
                {
                    ordemCompra.Side = OrdemDirecaoEnum.Compra;
                }
                else
                {
                    ordemCompra.Side = OrdemDirecaoEnum.Venda;
                }

                if (txtStopPX.Text.Length > 0 && Convert.ToDouble(txtStopPX.Text) > 0)
                {
                    ordemCompra.StopPrice = Convert.ToDouble(txtStopPX.Text);
                }

                if (txtInvestorID.Text.Length > 0)
                {
                    ordemCompra.InvestorID = txtInvestorID.Text;
                }

                switch (cmbOrderType.SelectedIndex)
                {
                case 0: ordemCompra.OrdType = OrdemTipoEnum.Limitada; break;

                case 1: ordemCompra.OrdType = OrdemTipoEnum.StopLimitada; break;

                case 2: ordemCompra.OrdType = OrdemTipoEnum.MarketWithLeftOverLimit; break;

                case 3: ordemCompra.OrdType = OrdemTipoEnum.OnClose; break;

                case 4: ordemCompra.OrdType = OrdemTipoEnum.StopStart; break;

                case 5: ordemCompra.OrdType = OrdemTipoEnum.Mercado; break;

                case 6: ordemCompra.OrdType = OrdemTipoEnum.StopLoss; break;

                default:
                    ordemCompra.OrdType = OrdemTipoEnum.OnClose; break;
                }


                switch (cmbTipoValidade.SelectedIndex)
                {
                case 0:
                    ordemCompra.TimeInForce = OrdemValidadeEnum.ValidaParaODia;
                    ordemCompra.ExpireDate  = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
                    break;

                case 1: ordemCompra.TimeInForce = OrdemValidadeEnum.ExecutaIntegralParcialOuCancela; break;

                case 2: ordemCompra.TimeInForce = OrdemValidadeEnum.ExecutaIntegralOuCancela; break;

                case 3: ordemCompra.TimeInForce = OrdemValidadeEnum.ValidaAteSerCancelada; break;

                case 4:
                    ordemCompra.TimeInForce = OrdemValidadeEnum.ValidoAteDeterminadaData;

                    ordemCompra.ExpireDate = DateTime.ParseExact(txtDataValidade.Text + " 23:59:59", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
                    break;

                default:
                    ordemCompra.TimeInForce = OrdemValidadeEnum.ValidaParaAberturaDoMercado;
                    break;
                }

                lastCLOrdID++;
                frm.ClOrdID = lastCLOrdID.ToString();
                frm.Qtde    = txtQtde.Text;

                DialogResult result = frm.ShowDialog();

                if (result == DialogResult.OK)
                {
                    OrdemInfo ordemVenda = RoteadorOrdensUtil.CloneOrder(ordemCompra);

                    ordemVenda.Account  = Convert.ToInt32(frm.Account);
                    ordemVenda.OrderQty = Convert.ToInt32(frm.Qtde);
                    ordemVenda.ClOrdID  = frm.ClOrdID;
                    if (frm.InvestorID.Length > 0)
                    {
                        ordemVenda.InvestorID = frm.ClOrdID;
                    }

                    OrdemCrossInfo cross = new OrdemCrossInfo();
                    cross.ChannelID        = ordemCompra.ChannelID;
                    cross.CrossID          = ordemCompra.ClOrdID + "X";
                    cross.Exchange         = ordemCompra.Exchange;
                    cross.OrdType          = ordemCompra.OrdType;
                    cross.Price            = ordemCompra.Price;
                    cross.SecurityID       = ordemCompra.SecurityID;
                    cross.SecurityIDSource = ordemCompra.SecurityIDSource;
                    cross.Symbol           = ordemCompra.Symbol;
                    cross.TransactTime     = ordemCompra.RegisterTime;

                    cross.OrdemInfoCompra = ordemCompra;
                    cross.OrdemInfoVenda  = ordemVenda;

                    cross.Memo5149 = "Cross " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss.fff");

                    IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>();

                    if (roteador != null)
                    {
                        ExecutarOrdemCrossRequest request = new ExecutarOrdemCrossRequest();

                        request.info = cross;

                        ExecutarOrdemCrossResponse resp = roteador.ExecutarOrdemCross(request);

                        if (resp.DadosRetorno != null)
                        {
                            string msg = "";

                            foreach (OcorrenciaRoteamentoOrdem ocorr in resp.DadosRetorno.Ocorrencias)
                            {
                                msg += ocorr.Ocorrencia + "\r\n";
                            }

                            if (resp.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Erro)
                            {
                                MessageBox.Show(msg);
                            }
                            else
                            {
                                _addMsg(msg);

                                lock (ofertasenviadas)
                                {
                                    ofertasenviadas.Add(ordemCompra);

                                    SerializadorOfertas.SaveOfertas(ofertasenviadas);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _addMsg(ex.Message);
                logger.Error("Erro: " + ex.Message, ex);
            }

            lastCLOrdID++;
            txtClOrdID.Text = lastCLOrdID.ToString();
        }
Beispiel #8
0
        /// <summary>
        /// Alteracao da Ordem
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btAlterar_Click(object sender, EventArgs e)
        {
            try
            {
                OrdemInfo ordem = new OrdemInfo();

                ordem.OrigClOrdID = txtOrigOrdID.Text;
                ordem.ClOrdID     = txtClOrdID.Text;
                ordem.Account     = Convert.ToInt32(txtCodCliente.Text);
                ordem.ChannelID   = Convert.ToInt32(txtOperador.Text);

                if (cmbBolsa.SelectedItem.Equals("BOVESPA"))
                {
                    ordem.Exchange = "BOVESPA";
                }
                else
                {
                    ordem.Exchange = "BMF";
                }

                ordem.ExchangeNumberID = txtExchangeNumber.Text;
                ordem.Price            = Convert.ToDouble(txtPreco.Text);
                ordem.OrderQty         = Convert.ToInt32(txtQtde.Text);
                ordem.MinQty           = Convert.ToInt32(txtQtdeMin.Text);
                ordem.MaxFloor         = Convert.ToInt32(txtQtdeAparente.Text);

                ordem.Symbol     = txtPapel.Text;
                ordem.SecurityID = txtSecurityId.Text;
                ordem.ExecBroker = txtTraderID.Text;
                ordem.Memo5149   = "Alteracao " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss.fff");

                if (txtSenderLocation.Text.Length > 0)
                {
                    ordem.SenderLocation = txtSenderLocation.Text;
                }

                if (txtExecTrader.Text.Length > 0)
                {
                    ordem.ExecutingTrader = txtExecTrader.Text;
                }

                if (rdCompra.Checked)
                {
                    ordem.Side = OrdemDirecaoEnum.Compra;
                }
                else
                {
                    ordem.Side = OrdemDirecaoEnum.Venda;
                }

                switch (cmbOrderType.SelectedIndex)
                {
                case 0: ordem.OrdType = OrdemTipoEnum.Limitada; break;

                case 1: ordem.OrdType = OrdemTipoEnum.StopLimitada; break;

                case 2: ordem.OrdType = OrdemTipoEnum.MarketWithLeftOverLimit; break;

                case 3: ordem.OrdType = OrdemTipoEnum.OnClose; break;

                case 4: ordem.OrdType = OrdemTipoEnum.StopStart; break;

                case 5: ordem.OrdType = OrdemTipoEnum.Mercado; break;

                case 6: ordem.OrdType = OrdemTipoEnum.StopLoss; break;

                default:
                    ordem.OrdType = OrdemTipoEnum.OnClose; break;
                }


                //0- Para o dia");
                //1- Executa ou cancela");
                //2- Tudo ou Nada");
                //3- Ate cancelar");
                //4- Data especifica");
                //5- Abertura Mercado");
                //6- Fechamento Mercado");
                //7- Boa para Leilao");
                switch (cmbTipoValidade.SelectedIndex)
                {
                case 0:
                    ordem.TimeInForce = OrdemValidadeEnum.ValidaParaODia;
                    ordem.ExpireDate  = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
                    break;

                case 1: ordem.TimeInForce = OrdemValidadeEnum.ExecutaIntegralParcialOuCancela; break;

                case 2: ordem.TimeInForce = OrdemValidadeEnum.ExecutaIntegralOuCancela; break;

                case 3: ordem.TimeInForce = OrdemValidadeEnum.ValidaAteSerCancelada; break;

                case 4:
                    ordem.TimeInForce = OrdemValidadeEnum.ValidoAteDeterminadaData;

                    ordem.ExpireDate = DateTime.ParseExact(txtDataValidade.Text + " 23:59:59", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
                    break;

                case 5: ordem.TimeInForce = OrdemValidadeEnum.ValidaParaAberturaDoMercado; break;

                case 6: ordem.TimeInForce = OrdemValidadeEnum.FechamentoDoMercado; break;

                case 7: ordem.TimeInForce = OrdemValidadeEnum.BoaParaLeilao; break;

                default:
                    MessageBox.Show("Time in force invalido");
                    break;
                }

                if (txtStopPX.Text.Length > 0 && Convert.ToDouble(txtStopPX.Text) > 0)
                {
                    ordem.StopPrice = Convert.ToDouble(txtStopPX.Text);
                }

                if (txtInvestorID.Text.Length > 0)
                {
                    ordem.InvestorID = txtInvestorID.Text;
                }

                IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>();

                if (roteador != null)
                {
                    ExecutarModificacaoOrdensRequest request = new ExecutarModificacaoOrdensRequest();

                    request.info = ordem;

                    ExecutarModificacaoOrdensResponse resp = roteador.ModificarOrdem(request);

                    if (resp.DadosRetorno != null)
                    {
                        string msg = "";

                        foreach (OcorrenciaRoteamentoOrdem ocorr in resp.DadosRetorno.Ocorrencias)
                        {
                            msg += ocorr.Ocorrencia + "\r\n";
                        }

                        if (resp.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Erro)
                        {
                            MessageBox.Show(msg);
                        }
                        else
                        {
                            _addMsg(msg);

                            lock (ofertasenviadas)
                            {
                                ofertasenviadas.Add(ordem);

                                SerializadorOfertas.SaveOfertas(ofertasenviadas);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
                logger.Error("Erro: " + ex.Message, ex);
            }
        }
Beispiel #9
0
        /// <summary>
        /// Cancelamento da ordem
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                OrdemCancelamentoInfo ordem = new OrdemCancelamentoInfo();
                ordem.ClOrdID     = txtClOrdID.Text;
                ordem.OrigClOrdID = txtOrigOrdID.Text;
                ordem.ChannelID   = Convert.ToInt32(txtOperador.Text);
                if (cmbBolsa.SelectedItem.Equals("BOVESPA"))
                {
                    ordem.Exchange = "BOVESPA";
                }
                else
                {
                    ordem.Exchange = "BMF";
                }
                ordem.OrderID    = txtExchangeNumber.Text;
                ordem.Account    = Convert.ToInt32(txtCodCliente.Text);
                ordem.Symbol     = txtPapel.Text;
                ordem.SecurityID = txtSecurityId.Text;
                ordem.ExecBroker = txtTraderID.Text;
                ordem.Memo5149   = "Cancelto " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss.fff");

                if (txtSenderLocation.Text.Length > 0)
                {
                    ordem.SenderLocation = txtSenderLocation.Text;
                }

                if (txtExecTrader.Text.Length > 0)
                {
                    ordem.ExecutingTrader = txtExecTrader.Text;
                }

                /*if (!String.IsNullOrEmpty(txtCompIDBolsa.Text))
                 * {
                 *  ordem.CompIDBolsa = txtCompIDBolsa.Text;
                 * }*/


                if (rdCompra.Checked)
                {
                    ordem.Side = OrdemDirecaoEnum.Compra;
                }
                else
                {
                    ordem.Side = OrdemDirecaoEnum.Venda;
                }
                ordem.OrderQty = Convert.ToInt32(txtQtde.Text);

                IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>();

                if (roteador != null)
                {
                    ExecutarCancelamentoOrdemRequest request = new ExecutarCancelamentoOrdemRequest();

                    request.info = ordem;

                    ExecutarCancelamentoOrdemResponse resp = roteador.CancelarOrdem(request);

                    if (resp.DadosRetorno != null)
                    {
                        string msg = "";

                        foreach (OcorrenciaRoteamentoOrdem ocorr in resp.DadosRetorno.Ocorrencias)
                        {
                            msg += ocorr.Ocorrencia + "\r\n";
                        }

                        if (resp.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Erro)
                        {
                            MessageBox.Show(msg);
                        }
                        else
                        {
                            _addMsg(msg);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
                logger.Error("Erro: " + ex.Message, ex);
            }
        }
        private OrdemInfo alterarOrdem(OrdemInfo ordem)
        {
            OrdemInfo alterada = new OrdemInfo();

            try
            {
                lock (dctOrdens)
                {
                    if (dctOrdens.ContainsKey(ordem.ClOrdID))
                    {
                        if (dctOrdens[ordem.ClOrdID].OrdStatus == OrdemStatusEnum.CANCELADA ||
                            dctOrdens[ordem.ClOrdID].OrdStatus == OrdemStatusEnum.REJEITADA ||
                            dctOrdens[ordem.ClOrdID].OrdStatus == OrdemStatusEnum.EXECUTADA)
                        {
                            return(ordem);
                        }
                    }
                }

                alterada.Account     = ordem.Account;
                alterada.ChannelID   = ordem.ChannelID;
                alterada.ClOrdID     = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-A" + ordem.Symbol + ordem.ChannelID + ordem.Account;
                alterada.OrigClOrdID = ordem.ClOrdID;
                alterada.Symbol      = ordem.Symbol;
                alterada.OrderQty    = ordem.OrderQty + 1;
                alterada.Price       = obterPrecoOrdem(ordem.Symbol);
                alterada.SecurityID  = ordem.SecurityID;
                alterada.Exchange    = ordem.Exchange;
                alterada.ChannelID   = ordem.ChannelID;
                if (!String.IsNullOrEmpty(ordem.ExecBroker))
                {
                    alterada.ExecBroker = ordem.ExecBroker;
                }
                alterada.OrdStatus   = OrdemStatusEnum.ENVIADAPARAOROTEADORDEORDENS;
                alterada.Side        = ordem.Side;
                alterada.TimeInForce = ordem.TimeInForce;
                alterada.OrdType     = ordem.OrdType;

                ExecutarModificacaoOrdensRequest request = new ExecutarModificacaoOrdensRequest();
                request.info = alterada;

                IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>();
                ExecutarModificacaoOrdensResponse response = roteador.ModificarOrdem(request);

                if (response.DadosRetorno.StatusResposta != StatusRoteamentoEnum.Sucesso)
                {
                    logger.Error("Erro ao alterar ordem [" + alterada.ClOrdID + "] alteracao de [" + ordem.ClOrdID + "]");
                    foreach (OcorrenciaRoteamentoOrdem ocorr in response.DadosRetorno.Ocorrencias)
                    {
                        logger.Error("Erro: " + ocorr.Ocorrencia);
                    }
                    return(ordem);
                }

                lock (dctOrdens)
                {
                    dctOrdens.Add(alterada.ClOrdID, alterada);
                }

                return(alterada);
            }
            catch (Exception ex)
            {
                logger.Error("alterarOrdem(): " + ex.Message, ex);
            }

            return(alterada);
        }
Beispiel #11
0
        /// <summary>
        /// Método responsável por enviar um cancelamento de ordens para o roteador cancelar.
        /// </summary>
        /// <param name="pParametroCancelamentoRequest"></param>
        /// <returns></returns>
        public EnviarCancelamentoOrdemResponse CancelarOrdem(EnviarCancelamentoOrdemRequest pParametroCancelamentoRequest)
        {
            logger.Info("Iniciar rotina de cancelamento de ordens");


            DateTime DataInicioExecucao = DateTime.Now;

            logger.Info("Data de inicio de execução:    " + DataInicioExecucao.ToString());

            EnviarCancelamentoOrdemResponse CancelamentoOrderResponse = new EnviarCancelamentoOrdemResponse();

            OrdemFIXResponse <OrdemCancelamentoInfo> OrdemCancelamentoInfo = this.ParsearOrdemCancelamentoCliente(pParametroCancelamentoRequest.ClienteCancelamentoInfo);

            if (OrdemCancelamentoInfo.StatusResposta == CriticaRiscoEnum.Sucesso)
            {
                logger.Info("Solicitação de cancelamento de ordem enviado ");
                logger.Info("Bovespa       : " + OrdemCancelamentoInfo.Objeto.Account.ToString());
                logger.Info("ChannelID     : " + OrdemCancelamentoInfo.Objeto.ChannelID.ToString());
                logger.Info("ClOrdID       : " + OrdemCancelamentoInfo.Objeto.ClOrdID.ToString());
                logger.Info("Exchange      : " + OrdemCancelamentoInfo.Objeto.Exchange.ToString());
                logger.Info("OrderID       : " + OrdemCancelamentoInfo.Objeto.OrderID.ToString());
                logger.Info("OrigClOrdID   : " + OrdemCancelamentoInfo.Objeto.OrigClOrdID.ToString());
                logger.Info("Side          : " + OrdemCancelamentoInfo.Objeto.Side.ToString());
                logger.Info("Symbol        : " + OrdemCancelamentoInfo.Objeto.Symbol.ToString());


                logger.Info("Mensagem parseado com sucesso!");

                logger.Info("Inicializa serviço de roteamento de ordem");
                //Invoca o serviço de roteamento de ordem
                IRoteadorOrdens ServicoRoteador = Ativador.Get <IRoteadorOrdens>();
                logger.Info("Serviço do ativador inicializado com sucesso");

                logger.Info("Calculando digito do cliente");
                OrdemCancelamentoInfo.Objeto.Account = RetornaCodigoCliente(CodigoCorretora, OrdemCancelamentoInfo.Objeto.Account);


                logger.Info("Envia ordem para o roteador");
                // Enviar a ordem para o roteador de ordens e aguarda o retorno.

                ExecutarCancelamentoOrdemResponse RespostaOrdem = ServicoRoteador.CancelarOrdem(
                    new ExecutarCancelamentoOrdemRequest()
                {
                    info = OrdemCancelamentoInfo.Objeto
                });

                if (RespostaOrdem.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Sucesso)
                {
                    logger.Info("Cancelamento enviado com sucesso.");

                    CancelamentoOrderResponse.DescricaoResposta = RespostaOrdem.DadosRetorno.Ocorrencias[0].Ocorrencia;
                    CancelamentoOrderResponse.DataResposta      = DateTime.Now;
                    CancelamentoOrderResponse.StatusResposta    = CriticaRiscoEnum.Sucesso;
                }
                else
                {
                    logger.Info("Erro ao enviar o cancelamento para o Roteador.");

                    CancelamentoOrderResponse.DescricaoResposta = RespostaOrdem.DadosRetorno.Ocorrencias[0].Ocorrencia;
                    CancelamentoOrderResponse.DataResposta      = DateTime.Now;
                    CancelamentoOrderResponse.StatusResposta    = CriticaRiscoEnum.ErroNegocio;
                }
            }
            else
            {
                CancelamentoOrderResponse.DescricaoResposta = OrdemCancelamentoInfo.CriticaInfo[0].Critica.ToString();
                CancelamentoOrderResponse.CriticaInfo       = OrdemCancelamentoInfo.CriticaInfo;
                CancelamentoOrderResponse.DataResposta      = DateTime.Now;
                CancelamentoOrderResponse.StatusResposta    = CriticaRiscoEnum.Sucesso;
            }

            TimeSpan datafinal = (DateTime.Now - DataInicioExecucao);

            logger.Info("Tempo total de execução     :" + datafinal.ToString());

            return(CancelamentoOrderResponse);
        }