Пример #1
0
 public void InserirOrdemDetalhe(OrderDbDetalheInfo detail, string clordid)
 {
     try
     {
         loggerCliente.InfoFormat(_sb_prc_fix_inserir_ordem_detalhe.ToString(),
                                  detail.TransactID, clordid, detail.OrderQty, detail.OrderQtyRemaining, detail.CumQty, detail.TradeQty,
                                  detail.Price, detail.OrderStatusID, detail.Description,
                                  DateTime.MinValue == detail.TransactTime ? "NULL" : "'" + detail.TransactTime.ToString("yyyy-MM-dd HH:mm:sss.fff") + "'",
                                  detail.CxlRejResponseTo,
                                  detail.CxlRejReason, detail.FixMsgSeqNum);
     }
     catch (Exception ex)
     {
         logger.Error("Problemas na escrita do arquivo InserirOrdemDetalhe: " + ex.Message, ex);
     }
 }
Пример #2
0
 public bool InserirOrdemDetalhe(OrderDbDetalheInfo orderDt, string clOrdID)
 {
     try
     {
         AbrirConexao(_strConnectionStringDefault);
         _sqlCommand             = new SqlCommand("prc_fix_inserir_ordem_detalhe", _sqlConn);
         _sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
         _sqlCommand.Parameters.Add(new SqlParameter("@TransactID", orderDt.TransactID));
         _sqlCommand.Parameters.Add(new SqlParameter("@OrderID", orderDt.OrderID));
         _sqlCommand.Parameters.Add(new SqlParameter("@ClOrdID", clOrdID));
         _sqlCommand.Parameters.Add(new SqlParameter("@OrderQty", orderDt.OrderQty));
         _sqlCommand.Parameters.Add(new SqlParameter("@OrdQtyRemaining", orderDt.OrderQtyRemaining));
         _sqlCommand.Parameters.Add(new SqlParameter("@CumQty", orderDt.CumQty));
         _sqlCommand.Parameters.Add(new SqlParameter("@TradeQty", orderDt.TradeQty));
         _sqlCommand.Parameters.Add(new SqlParameter("@Price", orderDt.Price));
         _sqlCommand.Parameters.Add(new SqlParameter("@OrderStatusID", orderDt.OrderStatusID));
         _sqlCommand.Parameters.Add(new SqlParameter("@Description", orderDt.Description));
         if (orderDt.TransactTime == DateTime.MinValue)
         {
             _sqlCommand.Parameters.Add(new SqlParameter("@EventTime", DateTime.Now));
         }
         else
         {
             _sqlCommand.Parameters.Add(new SqlParameter("@EventTime", orderDt.TransactTime));
         }
         _sqlCommand.Parameters.Add(new SqlParameter("@CxlRejResponseTo", orderDt.CxlRejResponseTo));
         _sqlCommand.Parameters.Add(new SqlParameter("@CxlRejReason", orderDt.CxlRejReason));
         _sqlCommand.Parameters.Add(new SqlParameter("@FixMsgSeqNum", orderDt.FixMsgSeqNum));
         int rows = _sqlCommand.ExecuteNonQuery();
         FecharConexao();
         return(true);
     }
     catch (Exception ex)
     {
         _dbArq.InserirOrdemDetalhe(orderDt, clOrdID);
         FecharConexao();
         logger.Error("InserirOrdemDetalhe(): " + ex.Message, ex);
         return(false);
     }
 }
Пример #3
0
        private bool _er_Update(ExecutionReport er, FixOrderStatus ordS, string desc, string bolsa)
        {
            try
            {
                int account;
                if (bolsa.Equals(ExchangePrefixes.BOVESPA, StringComparison.InvariantCultureIgnoreCase))
                {
                    string acc = er.Account.getValue();
                    acc     = (acc.Remove(acc.Length - 1));
                    account = Convert.ToInt32(acc);
                }
                else
                {
                    account = Convert.ToInt32(er.Account.getValue());
                }

                // Buscar Ordem Original, de algum jeito!!!
                // 1a. tentativa: Tentar via ExchangeNumber
                // 2a. tentativa: Tentar via ClOrdID e OrigClOrdID
                // 3a. tentativa: Tentar via ClOrdID no tb_fix_order_update e buscar a ordem pelo OrderID
                // 4a. tentativa: ahhh foda-se, nao achou mesmo

                OrderDbInfo orderOrig = null;

                // 1a. tentativa
                if (er.IsSetOrderID() && !er.OrderID.getValue().Equals("NONE"))
                {
                    orderOrig = _db.BuscarOrdemPorExchangeNumber(er.OrderID.getValue());
                }
                // 2a. Tentativa
                if (null == orderOrig || orderOrig.OrderID == 0)
                {
                    orderOrig = _db.BuscarOrdem(er.ClOrdID.getValue(), account, er.Symbol.getValue());
                    if (orderOrig.OrderID == 0)
                    {
                        // Se ordem nao encontrada, entao procurar pelo OrigClOrdID
                        if (er.IsSetOrigClOrdID())
                        {
                            orderOrig = _db.BuscarOrdem(er.OrigClOrdID.getValue(), account, er.Symbol.getValue());
                            if (orderOrig.OrderID == 0)
                            {
                                orderOrig = _db.BuscarOrdem(er.OrigClOrdID.getValue(), account, er.Symbol.getValue(), true);
                                //if (orderOrig.OrderID == 0)
                                //{
                                //    logger.Info("01 ER - Nao achou a ordem em questao!!!: " + er.OrigClOrdID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc);
                                //    return false;
                                //}
                            }
                            else
                            {
                                orderOrig = _db.BuscarOrdem(er.OrigClOrdID.getValue(), account, er.Symbol.getValue());
                            }
                        }
                        else
                        {
                            orderOrig = _db.BuscarOrdem(er.ClOrdID.getValue(), account, er.Symbol.getValue(), true);
                            //if (orderOrig.OrderID == 0)
                            //{
                            //    logger.Info("02 ER - Nao achou a ordem em questao!!!: " + er.ClOrdID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc);
                            //    return false;
                            //}
                        }
                    }
                }

                // 3a. Tentativa
                if (null == orderOrig || orderOrig.OrderID == 0)
                {
                    // Buscar a partir de tb_fix_order_update
                    OrderDbUpdateInfo orderUpdate = _db.BuscarOrdemUpdate(er.ClOrdID.getValue());
                    // Buscar ordem original a partir do order ID
                    if (orderUpdate.OrderID != 0)
                    {
                        orderOrig = _db.BuscarOrdemPorOrderID(orderUpdate.OrderID);
                    }
                    else
                    {
                        logger.Info("01 ER - Nao achou a ordem em questao!!!: " + er.ClOrdID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc);
                        return(false);
                    }
                }
                if (null == orderOrig || orderOrig.OrderID == 0)
                {
                    logger.Info("02 ER - Nao achou a ordem em questao!!!: " + er.ClOrdID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc);
                    return(false);
                }
                //}
                //else
                //{
                //    orderOrig = _db.BuscarOrdemPorExchangeNumber(er.OrderID.getValue());
                //    if (orderOrig.OrderID == 0)
                //    {
                //        logger.Info("ER - Nao achou a ordem em questao via exchange number (OrderID ER)!!!: " + er.OrderID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc);
                //        return false;
                //    }
                // }
                // Adicionar OrdemDetalhe
                OrderDbDetalheInfo detail = new OrderDbDetalheInfo();
                detail.OrderID       = orderOrig.OrderID;
                detail.TransactID    = er.ExecID.getValue();
                detail.OrderQty      = Convert.ToInt32(er.OrderQty.getValue());
                detail.Price         = er.IsSetField(Tags.Price) ? er.Price.getValue() : Decimal.Zero;
                detail.OrderStatusID = (int)ordS;
                detail.TransactTime  = er.TransactTime.getValue();
                if (er.IsSetField(Tags.Text))
                {
                    detail.Description = desc + " - " + er.Text.getValue();
                }
                else
                {
                    detail.Description = desc;
                }

                detail.TradeQty     = er.IsSetField(Tags.LastQty) ? Convert.ToInt32(er.LastQty.getValue()) : 0;
                detail.CumQty       = er.IsSetField(Tags.CumQty) ? Convert.ToInt32(er.CumQty.getValue()) : 0;
                detail.FixMsgSeqNum = Convert.ToInt32(er.Header.GetField(Tags.MsgSeqNum));
                if (!_db.InserirOrdemDetalhe(detail, orderOrig.ClOrdID))
                {
                    logger.Info("Erro ao inserir o registro na tabela tb_fix_order_update");
                    return(false);
                }

                // Atualizar Ordem
                orderOrig.ExchangeNumberID = er.OrderID.getValue();
                orderOrig.OrdStatus        = (int)ordS;
                orderOrig.TransactTime     = er.TransactTime.getValue();
                // orderOrig.ClOrdID = er.ClOrdID.getValue();
                // if (er.IsSetOrigClOrdID())
                //    orderOrig.OrigClOrdID = er.OrigClOrdID.getValue();
                if (er.IsSetField(Tags.LeavesQty))
                {
                    orderOrig.OrderQtyRemaining = Convert.ToInt32(er.LeavesQty.getValue());
                }
                if (er.IsSetField(Tags.CumQty))
                {
                    orderOrig.CumQty = Convert.ToInt32(er.CumQty.getValue());
                }
                orderOrig.Memo = er.IsSetField(Tags.Memo) ? er.GetField(Tags.Memo): string.Empty;
                if (!_db.AtualizarOrdem(orderOrig))
                {
                    logger.Info("Problemas na atualizacao da ordem. ClOrdID: " + orderOrig.ClOrdID);
                    return(false);
                }

                DropCopyCallbackManager.Instance.EnqueueCallback(orderOrig);

                return(true);
            }
            catch (Exception ex)
            {
                logger.Error("_er_Update: Erro na atualizacao dos status da ordem: " + ex.Message, ex);
                return(false);
            }
        }
Пример #4
0
        public void ProcessOrderCancelReject(QuickFix.Message msg, string bolsa)
        {
            try
            {
                OrderCancelReject ocr = (OrderCancelReject)msg;
                // Buscar a ordem original a partir do OrigClOrdID
                string clordid = ocr.ClOrdID.getValue();
                int    account;
                if (bolsa.Equals(ExchangePrefixes.BOVESPA, StringComparison.InvariantCultureIgnoreCase))
                {
                    string acc = ocr.IsSetAccount()? ocr.Account.getValue(): string.Empty;
                    if (!string.IsNullOrEmpty(acc))
                    {
                        acc     = (acc.Remove(acc.Length - 1));
                        account = 0;
                    }
                    else
                    {
                        account = 0;
                    }
                }
                else
                {
                    account = ocr.IsSetAccount()? Convert.ToInt32(ocr.Account.getValue()): 0;
                }



                OrderDbInfo orderOrig = null;
                if (account != 0)
                {
                    orderOrig = _db.BuscarOrdem(clordid, account, ocr.Symbol.getValue());
                }
                else
                {
                    orderOrig = _db.BuscarOrdemPorClOrdEOrigClOrd(clordid, ocr.OrigClOrdID.getValue(), ocr.Symbol.getValue());
                }


                if (orderOrig.ClOrdID.Equals(string.Empty))
                {
                    logger.Info("Problema ao consultar informacoes da ordem original");
                    return;
                }

                // Preencher informacoes de tb_fix_order_detail (rejection)
                OrderDbDetalheInfo detail = new OrderDbDetalheInfo();
                detail.OrderID = orderOrig.OrderID;
                //detail.OrderQty = orderOrig.OrderQty;
                //detail.OrderQtyRemaining = orderOrig.OrderQtyRemaining;
                //detail.Price = orderOrig.Price;
                detail.OrderStatusID    = (int)FixOrderStatus.REJEITADA;
                detail.TransactTime     = ocr.IsSetField(Tags.TransactTime)? ocr.TransactTime.getValue(): DateTime.MinValue;
                detail.Description      = ocr.IsSetField(Tags.Text) ? ocr.Text.getValue() : string.Empty;
                detail.CxlRejResponseTo = ocr.IsSetField(Tags.CxlRejResponseTo) ? ocr.CxlRejResponseTo.getValue().ToString() : string.Empty;
                detail.CxlRejReason     = ocr.IsSetField(Tags.CxlRejReason)? ocr.CxlRejReason.getValue(): 0;
                detail.FixMsgSeqNum     = Convert.ToInt32(ocr.Header.GetField(Tags.MsgSeqNum));

                if (!_db.InserirOrdemDetalhe(detail, clordid))
                {
                    logger.Info("Problemas na inserção da ordem detalhe");
                    return;
                }
                // Buscar as informacoes da tabela update, utilizando o OrigClOrdID da ordem original
                OrderDbUpdateInfo orderUpdate = _db.BuscarOrdemUpdate(orderOrig.OrigClOrdID);

                // Atribuir as informacoes do update no order original
                orderOrig.ClOrdID      = orderUpdate.ClOrdID;
                orderOrig.OrdStatus    = orderUpdate.OrdStatusID;
                orderOrig.Price        = orderUpdate.Price;
                orderOrig.OrderQty     = orderUpdate.Quantidade;
                orderOrig.OrderQtyApar = orderUpdate.Quantidade_Aparente;
                orderOrig.OrderQtyMin  = orderUpdate.Quantidade_Minima;
                //orderOrig.OrderQtyRemaining = orderUpdate.Quantidade_Exec;
                orderOrig.ExpireDate  = orderUpdate.Dt_Validade;
                orderOrig.OrigClOrdID = string.Empty;
                orderOrig.MsgFix      = ocr.ToString().Replace('\x01', '|');
                // Atualizar as informacoes do update na tabela da ordem original
                if (!_db.AtualizarOrdem(orderOrig))
                {
                    logger.Info("Problemas na atualizacao da ordem (mensagem ordercancelreject). ClOrdID: " + orderOrig.ClOrdID);
                    return;
                }

                DropCopyCallbackManager.Instance.EnqueueCallback(orderOrig);
            }
            catch (Exception ex)
            {
                logger.Error("Problemas no processamento da mensagem OrderCancelReject: " + ex.Message, ex);
            }
        }
Пример #5
0
        public void ProcessOrderCancelReplaceRequest(QuickFix.Message msg, string bolsa)
        {
            try
            {
                OrderCancelReplaceRequest ocrr = (OrderCancelReplaceRequest)msg;
                string origclordid             = ocrr.OrigClOrdID.getValue();
                int    account;
                if (bolsa.Equals(ExchangePrefixes.BOVESPA, StringComparison.InvariantCultureIgnoreCase))
                {
                    string acc = ocrr.Account.getValue();
                    acc     = (acc.Remove(acc.Length - 1));
                    account = Convert.ToInt32(acc);
                }
                else
                {
                    account = Convert.ToInt32(ocrr.Account.getValue());
                }
                // Buscar ordem original
                OrderDbInfo orderOrig = _db.BuscarOrdem(origclordid, account, ocrr.Symbol.getValue());
                // Adicionar as informacoes da ordem original na tabela de upodate
                if (orderOrig.OrderID == 0)
                {
                    logger.Info("OCRR - Nao achou a ordem em questao!!!: " + origclordid);
                    return;
                }
                // Adicionar informacoes originais na tabela update
                OrderDbUpdateInfo updt = new OrderDbUpdateInfo();
                updt.Account             = orderOrig.Account;
                updt.Instrumento         = orderOrig.Symbol;
                updt.OrderID             = orderOrig.OrderID;
                updt.ClOrdID             = orderOrig.ClOrdID;
                updt.OrdStatusID         = orderOrig.OrdStatus;
                updt.Price               = orderOrig.Price;
                updt.Quantidade          = orderOrig.OrderQty;
                updt.Quantidade_Exec     = orderOrig.CumQty;
                updt.Quantidade_Aparente = Convert.ToInt32(orderOrig.OrderQtyApar);
                updt.Quantidade_Minima   = Convert.ToInt32(orderOrig.OrderQtyMin);
                updt.Dt_Validade         = orderOrig.ExpireDate;
                updt.Dt_Atualizacao      = orderOrig.TransactTime;
                updt.TimeInForce         = orderOrig.TimeInForce;
                if (!_db.InserirOrdermUpdate(updt))
                {
                    logger.Error("Erro ao inserir o registro na tabela tb_fix_order_update");
                    return;
                }

                // Adicionar as novas informacoes pertinentes na tabela detail
                OrderDbDetalheInfo detail = new OrderDbDetalheInfo();
                detail.OrderID       = orderOrig.OrderID;
                detail.TransactID    = "";
                detail.OrderQty      = Convert.ToInt32(ocrr.OrderQty.getValue());
                detail.Price         = ocrr.IsSetField(Tags.Price)? ocrr.Price.getValue(): Decimal.Zero;
                detail.OrderStatusID = (int)FixOrderStatus.SUBSTITUICAO_SOLICITADA;
                detail.TransactTime  = ocrr.TransactTime.getValue();
                detail.Description   = DescMsg.OCRR_PENDING_MODIFICATION;
                detail.FixMsgSeqNum  = Convert.ToInt32(ocrr.Header.GetField(Tags.MsgSeqNum));
                if (!_db.InserirOrdemDetalhe(detail, orderOrig.ClOrdID))
                {
                    logger.Error("Erro ao inserir o registro na tabela tb_fix_order_update - msg de modificacao");
                    return;
                }

                // Atualizar a informacao original na tabela tb_fix_order
                // Atualiza os campos gravados na tabela tb_fix_order_update
                // Ordem original já se encontra em orderOrig
                orderOrig.OrigClOrdID  = ocrr.OrigClOrdID.getValue();
                orderOrig.ClOrdID      = ocrr.ClOrdID.getValue();
                orderOrig.OrdStatus    = (int)FixOrderStatus.SUBSTITUICAO_SOLICITADA;
                orderOrig.TransactTime = ocrr.TransactTime.getValue();
                if (ocrr.IsSetField(Tags.ExpireDate))
                {
                    orderOrig.ExpireDate = DateTime.ParseExact(ocrr.ExpireDate.getValue() + "235959", "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
                }
                else
                {
                    orderOrig.ExpireDate = DateTime.MinValue;
                }
                orderOrig.TimeInForce  = ocrr.IsSetField(Tags.TimeInForce) ? ocrr.TimeInForce.getValue().ToString() : "0";
                orderOrig.OrderQty     = Convert.ToInt32(ocrr.OrderQty.getValue());
                orderOrig.OrderQtyMin  = ocrr.IsSetField(Tags.MinQty) ? ocrr.MinQty.getValue() : 0;
                orderOrig.OrderQtyApar = ocrr.IsSetField(Tags.MaxFloor) ? ocrr.MaxFloor.getValue() : 0;
                orderOrig.Price        = ocrr.IsSetField(Tags.Price)? ocrr.Price.getValue(): Decimal.Zero;
                orderOrig.Memo         = ocrr.IsSetField(Tags.Memo) ? ocrr.GetField(Tags.Memo): string.Empty;
                orderOrig.FixMsgSeqNum = Convert.ToInt32(ocrr.Header.GetField(Tags.MsgSeqNum));
                orderOrig.MsgFix       = ocrr.ToString().Replace('\x01', '|');
                orderOrig.HandlInst    = ocrr.IsSetField(Tags.HandlInst) ? ocrr.HandlInst.getValue().ToString() : string.Empty;
                if (!_db.AtualizarOrdem(orderOrig))
                {
                    logger.Info("Problemas na atualizacao da ordem (mensagem de modificacao). ClOrdID: " + orderOrig.ClOrdID);
                    return;
                }

                DropCopyCallbackManager.Instance.EnqueueCallback(orderOrig);
            }
            catch (Exception ex)
            {
                logger.Error("Problemas no processamento da mensagem OrderCancelReplaceRequest: " + ex.Message, ex);
            }
        }