public static OrdemDirecaoEnum TraduzirOrdemDirecao(char valor) { // Decide OrdemDirecaoEnum retorno = OrdemDirecaoEnum.NaoInformado; switch (valor) { case QuickFix.Side.BUY: retorno = OrdemDirecaoEnum.Compra; break; case QuickFix.Side.SELL: retorno = OrdemDirecaoEnum.Venda; break; default: logger.Error("TradutorFix.TraduzirOrdemDirecao() - Direção de ordem não implementado: " + valor.ToString()); retorno = OrdemDirecaoEnum.NaoInformado; break; } // Retorna return(retorno); }
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); }
/// <summary> /// /// </summary> /// <param name="parametro"></param> /// <param name="ativo"></param> private void executarTesteAtivo(ParametroTesteConfig parametro, string ativo, OrdemDirecaoEnum sentido) { logger.InfoFormat("Executando teste com [{0}] [{1}] [{2}] [{3}]", parametro.Bolsa, parametro.Porta, ativo, parametro.Account, parametro.EnteringTrader); logger.Info("Enviando nova ordem para " + ativo); OrdemInfo ordem = enviarNovaOrdem(parametro, ativo, sentido); logger.Info("Alterando ordem de " + ativo + " clOrdID [" + ordem.ClOrdID + "]"); Thread.Sleep(1500); OrdemInfo ordemAlterada = alterarOrdem(ordem); if (dctOrdens.ContainsKey(ordemAlterada.ClOrdID)) { if (dctOrdens[ordemAlterada.ClOrdID].OrdStatus == OrdemStatusEnum.NOVA || dctOrdens[ordemAlterada.ClOrdID].OrdStatus == OrdemStatusEnum.PARCIALMENTEEXECUTADA || dctOrdens[ordemAlterada.ClOrdID].OrdStatus == OrdemStatusEnum.SUBSTITUIDA) { logger.Info("Cancelando ordem [" + ordemAlterada.ClOrdID + "]"); Thread.Sleep(1500); cancelarOrdem(ordemAlterada); } } logger.InfoFormat("Final do teste de [{0}] [{1}] [{2}] [{3}]", parametro.Bolsa, parametro.Porta, ativo, parametro.Account, parametro.EnteringTrader); }