Esempio n. 1
0
        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);
        }