/// <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); }
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(); }