Example #1
0
        /// <summary>
        /// Envia uma nova ordem cruzada (ordem com pontas de compra e venda ja informadas)
        /// </summary>
        /// <param name="request">objeto do tipo ExecutarOrdemCrossRequest</param>
        /// <returns>objeto do tipo ExecutarOrdemCrossResponse</returns>
        public ExecutarOrdemCrossResponse ExecutarOrdemCross(ExecutarOrdemCrossRequest request)
        {
            ExecutarOrdemCrossResponse response = new ExecutarOrdemCrossResponse();
            CanalInfo            _canal         = null;
            StatusRoteamentoEnum status         = StatusRoteamentoEnum.Sucesso;
            string msg = "Ordem Enviada";

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

            logger.Debug("OrdemCross - Perna de compra");
            TradutorFix.DumpOrdemInfo(request.info.OrdemInfoCompra);
            logger.Debug("OrdemCross - Perna de venda");
            TradutorFix.DumpOrdemInfo(request.info.OrdemInfoVenda);

            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.FormatarRespostaEOX(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.FormatarRespostaEOX(msg, status);
                    }
                    else
                    {
                        _criaReportStore(request.info.OrdemInfoCompra.ClOrdID);
                        _criaReportStore(request.info.OrdemInfoVenda.ClOrdID);

                        _notificaEnvioParaCanal(request.info.OrdemInfoCompra);
                        _notificaEnvioParaCanal(request.info.OrdemInfoVenda);

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

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

            logger.Debug("*** End of ExecutarOrdem()");

            return(response);
        }
Example #2
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();
        }