Ejemplo n.º 1
0
        /// <summary>
        /// Envia um pedido de cancel/replace para o canal correspondente
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public ExecutarModificacaoOrdensResponse ModificarOrdem(ExecutarModificacaoOrdensRequest request)
        {
            ExecutarModificacaoOrdensResponse response = new ExecutarModificacaoOrdensResponse();
            StatusRoteamentoEnum status = StatusRoteamentoEnum.Sucesso;
            string    msg    = "Modificacao de ordem enviada";
            CanalInfo _canal = null;

            logger.Debug("*** ModificarOrdem()");

            TradutorFix.DumpOrdemInfo(request.info);

            try
            {
                _canal = (CanalInfo)_canais[request.info.Exchange + request.info.ChannelID];

                if (_canal == null)
                {
                    msg    = "Nao ha canal configurado para " + request.info.Exchange + "-" + request.info.ChannelID;
                    status = StatusRoteamentoEnum.Erro;
                    logger.Info(msg);
                    response.DadosRetorno = RoteadorOrdensUtil.FormatarRespostaModificacao(msg, status);
                }
                else
                {
                    if (_canal.roteador == null || _canal.Conectado == false)
                    {
                        status = StatusRoteamentoEnum.Erro;
                        msg    = "Nao ha canal ativo e conectado para " + request.info.Exchange + "-" + request.info.ChannelID;
                        logger.Info(msg);
                        response.DadosRetorno = RoteadorOrdensUtil.FormatarRespostaModificacao(msg, status);
                    }
                    else
                    {
                        _criaReportStore(request.info.ClOrdID);

                        _notificaEnvioParaCanal(request.info);

                        response = _canal.roteador.ModificarOrdem(request);
                    }
                }
            }
            catch (Exception ex)
            {
                msg = "ModificarOrdem(): " + ex.Message;
                logger.Error(msg + "-" + ex.StackTrace);
                response.DadosRetorno = RoteadorOrdensUtil.FormatarRespostaModificacao(msg, status);

                if (_canal != null)
                {
                    _resetCanal(_canal);
                }
            }

            logger.Info(msg);

            return(response);
        }
Ejemplo n.º 2
0
 public ExecutarModificacaoOrdensResponse ModificarOrdem(ExecutarModificacaoOrdensRequest request)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 3
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);
            }
        }
Ejemplo n.º 4
0
        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);
        }