示例#1
0
 /// <summary>
 /// Manipulacao do dicionario em situacoes
 /// (Mensagens de Order Cancel Reject - OCR)
 /// </summary>
 /// <param name="ss"></param>
 /// <param name="dic"></param>
 /// <param name="strChave"></param>
 //public void VerifyOrderSituationOCR(SessionID ss, Dictionary<string, TOOrderSession> dic, string strChave)
 // OBS :strChave sempre ClOrdID até momento
 public void VerifyOrderSituationOCR(OrderCancelReject msg, SessionID ss, OrderSessionManager dic, string strChave, string strChaveExch)
 {
     try
     {
         if (null != ss) // Registry found
         {
             TOOrderSession aux = null;
             dic.GetOrder(strChave, out aux);
             if (null != aux && msg.IsSetField(Tags.OrderID) && msg.OrderID.getValue() != "NONE")
             {
                 if (msg.IsSetField(Tags.Account))
                 {
                     aux.ExchangeNumberID = msg.OrderID.getValue() + "-" + msg.Account.getValue() + "-" + msg.Symbol.getValue();
                 }
             }
             // Se houve rejeicao de cancelamento, entao somente excluir do dicionario
             lock (dic)
             {
                 TOOrderSession toOS = null;
                 int            ret  = dic.GetOrder(strChave, out toOS, strChaveExch);
                 if (null != toOS)
                 {
                     if (ret == FindType.EXCHANGE_NUMBER)
                     {
                         dic.RemoveOrder(toOS.ChaveDicionario);
                     }
                     else
                     {
                         dic.RemoveOrder(strChave);
                     }
                 }
                 toOS = null;
             }
         }
     }
     catch (Exception ex)
     {
         logger.Error("VerifyOrderSituationOCR(): " + ex.Message, ex);
     }
 }
示例#2
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);
            }
        }