예제 #1
0
 public virtual void EnqueueCotacao(CotacaoInfo cotacao)
 {
     try
     {
         queueCotacaoInbound.Enqueue(cotacao);
     }
     catch (Exception ex)
     {
         logger.Error("EnqueueCotacao():" + ex.Message, ex);
     }
 }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="instrumento"></param>
        /// <param name="topbPrice"></param>
        /// <param name="qtde"></param>
        public virtual void Calculate(CotacaoInfo info)
        {
            if (dctInstrumentos1.ContainsKey(info.Instrumento))
            {
                HashSet <string> algos = null;

                if (dctInstrumentos1.TryGetValue(info.Instrumento, out algos))
                {
                    foreach (string algoID in algos)
                    {
                        AlgoStruct registro;
                        bool       bFound = false;
                        lock (dctRegistros)
                        {
                            registro = dctRegistros[algoID];
                            bFound   = true;
                        }

                        if (bFound)
                        {
                            registro = DoAlgoritmo(registro, info);
                            qStreamerOutbound.Enqueue(registro);
                        }
                    }
                }
            }


            if (dctInstrumentos2.ContainsKey(info.Instrumento))
            {
                HashSet <string> algos = null;

                if (dctInstrumentos2.TryGetValue(info.Instrumento, out algos))
                {
                    foreach (string algoID in algos)
                    {
                        AlgoStruct registro;
                        bool       bFound = false;
                        lock (dctRegistros)
                        {
                            registro = dctRegistros[algoID];
                            bFound   = true;
                        }

                        if (bFound)
                        {
                            registro = DoAlgoritmo(registro, info);
                            qStreamerOutbound.Enqueue(registro);
                        }
                    }
                }
            }
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cotacao"></param>
        private void enqueueToThreads(CotacaoInfo cotacao)
        {
            foreach (ThreadWorkerBase worker in poolThreadDiferencial)
            {
                worker.EnqueueCotacao(cotacao);
            }

            foreach (ThreadWorkerBase worker in poolThreadSpread)
            {
                worker.EnqueueCotacao(cotacao);
            }

            foreach (ThreadWorkerBase worker in poolThreadFinanceiro)
            {
                worker.EnqueueCotacao(cotacao);
            }
        }
예제 #4
0
        private void MessageBroker(string Instrumento, string Mensagem)
        {
            try
            {
                int headerLen   = Marshal.SizeOf(new Header_MDS());
                int agregadoLen = Marshal.SizeOf(new MSG_LivroOfertaAgregado_MDS());

                logger.Debug("[" + Instrumento + "] [" + Mensagem + "]");


                switch (Mensagem.ToString().Substring(0, 2))
                {
                case ConstantesMDS.Negocio:
                    break;

                case ConstantesMDS.LivroOferta:
                    break;

                case ConstantesMDS.Destaques:
                    break;

                case ConstantesMDS.RankCorretora:
                    break;

                case ConstantesMDS.Sonda:
                    logger.Info("Recebeu Sonda: [" + Mensagem + "]");
                    break;

                case ConstantesMDS.LIVRO_AGREGADO:
                    Header_MDS headerMds = Utilities.MarshalFromStringBlock <Header_MDS>(Mensagem.Substring(0, headerLen));

                    MSG_LivroOfertaAgregado_MDS agregadoCompra = Utilities.MarshalFromStringBlock <MSG_LivroOfertaAgregado_MDS>(Mensagem.Substring(headerLen, agregadoLen));

                    int qtdeEntradas = (Mensagem.Length - headerLen) / agregadoLen;

                    int indexVenda = headerLen + (qtdeEntradas / 2 * agregadoLen);
                    MSG_LivroOfertaAgregado_MDS agregadoVenda = Utilities.MarshalFromStringBlock <MSG_LivroOfertaAgregado_MDS>(Mensagem.Substring(indexVenda, agregadoLen));

                    CotacaoInfo cotacao = new CotacaoInfo();
                    cotacao.Instrumento   = headerMds.Instrumento.ByteArrayToString();
                    cotacao.QuantidadeBid = Convert.ToInt64(agregadoCompra.Quantidade.ByteArrayToString());
                    cotacao.TopbPriceBid  = agregadoCompra.Preco.ByteArrayToDecimal(3);
                    cotacao.QuantidadeAsk = Convert.ToInt64(agregadoVenda.Quantidade.ByteArrayToString());
                    cotacao.TopbPriceAsk  = agregadoVenda.Preco.ByteArrayToDecimal(3);

                    logger.DebugFormat("{0} BidQty={1} BidPrice={2} AskQty={3} Ask=Price={4}",
                                       cotacao.Instrumento,
                                       cotacao.QuantidadeBid,
                                       cotacao.TopbPriceBid,
                                       cotacao.QuantidadeAsk,
                                       cotacao.TopbPriceAsk);

                    enqueueToThreads(cotacao);
                    break;
                }
            }
            catch (Exception ex)
            {
                logger.Error("MessageBroker(): " + ex.Message, ex);

                if (!String.IsNullOrEmpty(Instrumento))
                {
                    logger.Error("Instrumento [" + Instrumento + "]");
                }

                if (!String.IsNullOrEmpty(Mensagem))
                {
                    logger.Error("Mensagem [" + Mensagem + "]");
                }
            }
        }
예제 #5
0
 public abstract AlgoStruct DoAlgoritmo(AlgoStruct algo, CotacaoInfo cotacao);