Exemple #1
0
        public FixInitiatorDropCopy(FixSessionItem config)
        {
            _config              = config;
            _bConectadoBolsa     = false;
            _socketInitiator     = null;
            _finalizarSinalizado = false;
            _intCanal            = _config.Operador;
            _running             = false;

#if _CQUEUE
            _queueToDB = new ConcurrentQueue <TODropCopyDB>();
#else
            _queueToDB = new Queue <TODropCopyDB>();
#endif
            //_db = new DbDropCopy();

            _rulesMsg = new MessageProcessor();
        }
Exemple #2
0
        /// <summary>
        /// BuscarSessoesFIX - recupera toda lista de sessoes configuradas
        /// </summary>
        /// <param name="ordemalterada">OrdemInfo da ordem alterada</param>
        /// <returns>Lista de registors</returns>
        public List <FixSessionItem> BuscarSessoesFIXServer(string strExecFile, string active = "Y")
        {
            List <FixSessionItem> ret = new List <FixSessionItem>();

            SqlDataAdapter lAdapter;

            AbrirConexao(_strConnectionStringDefault);
            DataSet lDataSet = new DataSet();

            _sqlCommand             = new SqlCommand("prc_fixsrv_sessaofix_server", _sqlConn);
            _sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;

            _sqlCommand.Parameters.Add(new SqlParameter("@ExecArq", strExecFile));
            _sqlCommand.Parameters.Add(new SqlParameter("@ActiveFlag", active[0]));
            lAdapter = new SqlDataAdapter(_sqlCommand);
            lAdapter.Fill(lDataSet);
            foreach (DataRow lRow in lDataSet.Tables[0].Rows)
            {
                FixSessionItem session = new FixSessionItem();

                session.IdSessaoFix      = lRow["IdSessaoFix"].DBToInt32();
                session.IdCliente        = lRow["id_cliente"].DBToInt32();
                session.Mnemonico        = lRow["Mnemonico"].DBToString();
                session.Bolsa            = lRow["Bolsa"].DBToString();
                session.Operador         = lRow["Operador"].DBToInt32();
                session.BeginString      = lRow["BeginString"].DBToString();
                session.SenderCompID     = lRow["SenderCompID"].DBToString();
                session.SenderSubID      = lRow["SenderSubID"].DBToString();
                session.SenderLocationID = lRow["SenderLocationID"].DBToString();
                session.TargetCompID     = lRow["TargetCompID"].DBToString();
                session.TargetSubID      = lRow["TargetSubID"].DBToString();
                //session.PartyID = lRow["PartyID"].DBToInt32().ToString();
                //session.PartyIDSource = lRow["PartyIDSource"].DBToString();
                //session.PartyRole = lRow["PartyRole"].DBToInt32();
                session.SecurityIDSource = lRow["SecurityIDSource"].DBToInt32().ToString();
                session.LogonPassword    = lRow["LogonPassword"].DBToString();
                session.HeartBtInt       = lRow["HeartBeatInt"].DBToInt32();
                string aux = lRow["ResetSeqNum"].DBToString();
                if (aux.ToLower().Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux))
                {
                    session.ResetSeqNum = false;
                }
                else
                {
                    session.ResetSeqNum = true;
                }
                aux = lRow["PersistMessages"].DBToString();
                if (aux.Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux))
                {
                    session.PersistMessages = false;
                }
                else
                {
                    session.PersistMessages = true;
                }

                session.SocketPort        = lRow["SocketPort"].DBToInt32();
                session.ReconnectInterval = lRow["ReconnectInterval"].DBToInt32();
                string cancelOnDisconn = lRow["CancelOnDisconnect"].DBToString();
                try
                {
                    session.CancelOnDisconnect = Convert.ToInt32(cancelOnDisconn);
                }
                catch
                {
                    session.CancelOnDisconnect = -1;
                }
                //session.CancelOnDisconnect = lRow["CancelOnDisconnect"].DBToString();
                session.CODTimeout       = lRow["CODTimeout"].DBToInt32();
                session.Host             = lRow["Host"].DBToString();
                session.FileStorePath    = lRow["FileStorePath"].DBToString();
                session.FileLogPath      = lRow["FileLogPath"].DBToString();
                session.DebugFileLogPath = lRow["DebugFileLogPath"].DBToString();
                session.StartTime        = lRow["StartTime"].DBToString();
                session.EndTime          = lRow["EndTime"].DBToString();
                aux = lRow["UseDataDictionary"].DBToString();
                if (aux.Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux))
                {
                    session.UseDataDictionary = false;
                }
                else
                {
                    session.UseDataDictionary = true;
                }

                session.DataDictionary  = lRow["DataDictionary"].DBToString();
                session.ConnectionType  = lRow["ConnectionType"].DBToString();
                session.IntegrationID   = lRow["IntegrationID"].DBToInt32();
                session.IntegrationName = lRow["IntegrationName"].DBToString();
                aux = lRow["FinancialLimit"].DBToString();
                if (aux.Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux))
                {
                    session.FinancialLimit = false;
                }
                else
                {
                    session.FinancialLimit = true;
                }

                aux = lRow["ParseAccount"].DBToString();
                if (aux.Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux))
                {
                    session.ParseAccount = false;
                }
                else
                {
                    session.ParseAccount = true;
                }

                // PID = PartyID
                // INI -- Composicao do PartyIDs da Sessao
                SqlCommand commPID = new SqlCommand("prc_fixsrv_sessaofix_server_party_id", _sqlConn);
                commPID.CommandType = System.Data.CommandType.StoredProcedure;
                commPID.Parameters.Add(new SqlParameter("@IdSessaoFix", session.IdSessaoFix));

                SqlDataAdapter lAdapterPID = new SqlDataAdapter(commPID);
                DataSet        lDataSetPID = new DataSet();
                lAdapterPID.Fill(lDataSetPID);
                foreach (DataRow lRowPID in lDataSetPID.Tables[0].Rows)
                {
                    PartyIDItem pid = new PartyIDItem();
                    pid.IdPartyID     = lRowPID["IdPartyID"].DBToInt32();
                    pid.IdSessaoFIx   = lRowPID["IdSessaoFix"].DBToInt32();
                    pid.PartyID       = lRowPID["PartyID"].DBToString();
                    pid.PartyIDSource = lRowPID["PartyIDSource"].DBToString()[0];
                    pid.PartyRole     = lRowPID["PartyRole"].DBToInt32();
                    session.PartyIDs.Add(pid);
                }
                // FIM -- Composicao do PartyIDs da Sessao
                ret.Add(session);
            }
            FecharConexao();
            return(ret);
        }
Exemple #3
0
        public static OrdemInfo Fix44ExecutionReport2OrdemInfo(QuickFix.FIX44.ExecutionReport er, FixSessionItem cfg)
        {
            try
            {
                OrdemInfo order     = new OrdemInfo();
                string    descricao = string.Empty;

                // order = new OrdemInfo();
                order.Account     = Convert.ToInt32(er.IsSetAccount() ? er.Account.getValue() : "0");
                order.Exchange    = cfg.Bolsa;
                order.ChannelID   = cfg.Operador;
                order.ClOrdID     = er.ClOrdID.ToString();//chaveClOrdId;
                order.OrigClOrdID = er.IsSetOrigClOrdID() ? er.OrigClOrdID.getValue() : null;
                order.ExecBroker  = "227";
                if (er.IsSetExpireDate())
                {
                    string expdate = er.ExpireDate.getValue() + "235959";
                    order.ExpireDate = DateTime.ParseExact(expdate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
                }
                else
                {
                    order.ExpireDate = DateTime.MinValue;
                }
                order.MaxFloor    = er.IsSetMaxFloor() ? Convert.ToDouble(er.MaxFloor.getValue()) : 0;
                order.MinQty      = er.IsSetMinQty() ? Convert.ToDouble(er.MinQty.getValue()) : 0;
                order.OrderQty    = Convert.ToInt32(er.IsSetOrderQty() ? er.OrderQty.getValue() : 0);
                order.OrdType     = FixMessageUtilities.TraduzirOrdemTipo(er.OrdType.getValue());
                order.Price       = er.IsSetPrice() ? Convert.ToDouble(er.Price.getValue()) : 0;
                order.SecurityID  = er.IsSetSecurityID() ? er.SecurityID.ToString() : null;
                order.Side        = er.IsSetSide() ? (OrdemDirecaoEnum)Convert.ToInt32(er.Side.ToString()) : OrdemDirecaoEnum.NaoInformado;
                order.Symbol      = er.IsSetSymbol() ? er.Symbol.ToString() : null;
                order.TimeInForce = er.IsSetTimeInForce() ? FixMessageUtilities.deTimeInForceParaOrdemValidade(er.TimeInForce) : OrdemValidadeEnum.NaoInformado;
                //}

                order.ExchangeNumberID   = er.IsSetOrderID() ? er.OrderID.getValue() : null;
                order.OrderQtyRemmaining = Convert.ToInt32(er.IsSetLeavesQty() ? er.LeavesQty.getValue() : 0);
                order.CumQty             = Convert.ToInt32(er.IsSetCumQty() ? er.CumQty.getValue() : 0);
                order.OrdStatus          = FixMessageUtilities.TraduzirOrdemStatus(er.OrdStatus.getValue());
                order.Memo5149           = er.IsSetField(5149) ? er.GetField(5149) : String.Empty;
                order.PossDupFlag        = er.Header.IsSetField(Tags.PossDupFlag) ? er.Header.GetBoolean(Tags.PossDupFlag) : false;
                order.PossResend         = er.Header.IsSetField(Tags.PossResend) ? er.Header.GetBoolean(Tags.PossResend) : false;
                order.CompIDBolsa        = er.Header.IsSetField(Tags.SenderCompID) ? er.Header.GetString(Tags.SenderCompID) : cfg.SenderCompID;
                order.CompIDOMS          = er.Header.IsSetField(Tags.TargetCompID) ? er.Header.GetString(Tags.TargetCompID) : cfg.TargetCompID;

                switch (order.OrdStatus)
                {
                case OrdemStatusEnum.NOVA:
                    descricao          = "Ordem aberta";
                    order.RegisterTime = DateTime.Now;
                    break;

                case OrdemStatusEnum.CANCELADA:
                    descricao = "Ordem cancelada";
                    break;

                case OrdemStatusEnum.PARCIALMENTEEXECUTADA:
                    descricao = "Ordem com execucao parcial";
                    break;

                case OrdemStatusEnum.SUSPENSA:
                    descricao = "Ordem suspensa";
                    break;

                case OrdemStatusEnum.EXECUTADA:
                    descricao = "Ordem executada";
                    break;

                case OrdemStatusEnum.SUBSTITUIDA:
                    descricao = "Ordem substituida";
                    break;

                case OrdemStatusEnum.REJEITADA:
                    if (er.IsSetText())
                    {
                        descricao = er.Text.getValue();
                    }
                    break;
                }
                order.TransactTime = DateTime.Now;
                // Try get the msg seq number
                order.FixMsgSeqNum    = er.Header.IsSetField(Tags.MsgSeqNum) ? er.Header.GetInt(Tags.MsgSeqNum) : 0;
                order.ProtectionPrice = Convert.ToDecimal(er.IsSetField(35001) ? er.GetString(35001) : "0");


                // Setando informações de acompanhamento
                AcompanhamentoOrdemInfo acompanhamento = new AcompanhamentoOrdemInfo();
                acompanhamento.NumeroControleOrdem    = order.ClOrdID;
                acompanhamento.CodigoDoCliente        = order.Account;
                acompanhamento.CodigoResposta         = order.ExchangeNumberID;
                acompanhamento.CodigoTransacao        = er.IsSetExecID() ? er.ExecID.getValue() : null;
                acompanhamento.Instrumento            = order.Symbol;
                acompanhamento.SecurityID             = order.SecurityID;
                acompanhamento.CanalNegociacao        = order.ChannelID;
                acompanhamento.Direcao                = order.Side;
                acompanhamento.QuantidadeSolicitada   = order.OrderQty;
                acompanhamento.QuantidadeExecutada    = (int)er.CumQty.getValue();
                acompanhamento.QuantidadeRemanescente = (int)er.LeavesQty.getValue();
                acompanhamento.QuantidadeNegociada    = er.IsSetLastQty() ? (int)er.LastQty.getValue() : 0;
                acompanhamento.Preco           = new Decimal(order.Price);
                acompanhamento.StatusOrdem     = FixMessageUtilities.TraduzirOrdemStatus(er.OrdStatus.getValue());
                acompanhamento.DataOrdemEnvio  = order.TransactTime;
                acompanhamento.DataAtualizacao = DateTime.Now;
                acompanhamento.CodigoRejeicao  = er.IsSetOrdRejReason() ? er.OrdRejReason.ToString() : "0";
                acompanhamento.Descricao       = descricao;
                // Try get the msg seq number
                acompanhamento.FixMsgSeqNum = er.Header.IsSetField(Tags.MsgSeqNum) ? er.Header.GetInt(Tags.MsgSeqNum) : 0;
                acompanhamento.LastPx       = er.IsSetLastPx() ? (Decimal)er.LastPx.getValue() : new Decimal(order.Price);
                acompanhamento.TradeDate    = er.IsSetTradeDate() ? er.TradeDate.getValue() : DateTime.Now.ToString("yyyyMMdd");

                //BEI Fields
                //Added in 2012-Nov-13 by ATP
                acompanhamento.ExchangeOrderID          = er.IsSetField(35022) ? er.GetString(35022) : String.Empty;
                acompanhamento.ExchangeExecID           = er.IsSetField(35023) ? er.GetString(35023) : String.Empty;
                acompanhamento.LastPxInIssuedCurrency   = Convert.ToDecimal(er.IsSetField(35024) ? er.GetString(35024) : "0");
                acompanhamento.PriceInIssuedCurrency    = Convert.ToDecimal(er.IsSetField(35025) ? er.GetString(35025) : "0");
                acompanhamento.ExchangeSecondaryOrderID = er.IsSetField(35026) ? er.GetString(35026) : String.Empty;
                acompanhamento.TradeLinkID     = er.IsSetField(820) ? er.GetString(820) : String.Empty;
                acompanhamento.OrderLinkID     = er.IsSetField(5975) ? er.GetString(5975) : String.Empty;
                acompanhamento.ExchangeQuoteID = er.IsSetField(5001) ? er.GetString(5001) : String.Empty;
                acompanhamento.PossDupFlag     = er.Header.IsSetField(Tags.PossDupFlag) ? er.Header.GetBoolean(Tags.PossDupFlag) : false;
                acompanhamento.PossResend      = er.Header.IsSetField(Tags.PossResend) ? er.Header.GetBoolean(Tags.PossResend) : false;
                acompanhamento.CompIDBolsa     = er.Header.IsSetField(Tags.SenderCompID) ? er.Header.GetString(Tags.SenderCompID) : cfg.SenderCompID;
                acompanhamento.CompIDOMS       = er.Header.IsSetField(Tags.TargetCompID) ? er.Header.GetString(Tags.TargetCompID) : cfg.TargetCompID;

                if (er.IsSetNoMiscFees())
                {
                    int ocorr = er.GetInt(Tags.NoMiscFees);// noMiscFees.getValue();

                    for (uint i = 0; i < ocorr; i++)
                    {
                        EmolumentoInfo emol     = new EmolumentoInfo();
                        Group          feeGroup = er.GetGroup((int)i, Tags.NoMiscFees);
                        emol.Valor          = Convert.ToDecimal(feeGroup.IsSetField(Tags.MiscFeeAmt) ? feeGroup.GetString(Tags.MiscFeeAmt) : "0");
                        emol.BaseEmolumento = Convert.ToInt32(feeGroup.IsSetField(Tags.MiscFeeBasis) ? feeGroup.GetString(Tags.MiscFeeBasis) : "0");
                        emol.Currency       = feeGroup.GetString(Tags.MiscFeeCurr);
                        emol.Tipo           = (EmolumentoTipoEnum)feeGroup.GetInt(Tags.MiscFeeType);
                    }
                }

                // Adicionando informações de acompanhamento ao OrdemInfo
                order.Acompanhamentos.Clear();
                order.Acompanhamentos.Add(acompanhamento);

                return(order);
            }
            catch (Exception ex)
            {
                logger.Error("Fix44ExecutionReport2OrdemInfo(): " + ex.Message, ex);
            }
            return(null);
        }