示例#1
0
        private void trataMensagemFIX(MarketDataSnapshotFullRefresh mensagem)
        {
            listaInstrumentosFIX = new SortedDictionary <string, MarketDataSnapshotFullRefresh.NoMDEntries>();

            try
            {
                int ocorrencias =
                    mensagem.getInt(NoMDEntries.FIELD);

                // Apenas trata a mensagem FIX se houver ocorrências no NoMDEntries
                if (ocorrencias > 0)
                {
                    uint ocorrencia;
                    for (ocorrencia = 1;
                         ocorrencia <= ocorrencias; ocorrencia++)
                    {
                        MarketDataSnapshotFullRefresh.NoMDEntries grupo = new MarketDataSnapshotFullRefresh.NoMDEntries();
                        mensagem.getGroup(ocorrencia, grupo);

                        // Mensagens de Negocio são enviados depois de todas as outras mensagens
                        if (grupo.getChar(MDEntryType.FIELD) == MDEntryType.TRADE)
                        {
                            if (!listaInstrumentosFIX.ContainsKey(
                                    grupo.getString(6032)))
                            {
                                listaInstrumentosFIX.Add(grupo.getString(6032), grupo);
                            }
                        }

                        enviaInstantaneo(
                            mensagem.getHeader().getInt(MsgSeqNum.FIELD),
                            ocorrencia,
                            mensagem,
                            grupo);
                    }

                    if (listaInstrumentosFIX.Count > 0)
                    {
                        IEnumerator <KeyValuePair <string, MarketDataSnapshotFullRefresh.NoMDEntries> >
                        itens = listaInstrumentosFIX.GetEnumerator();
                        while (itens.MoveNext())
                        {
                            KeyValuePair <string, MarketDataSnapshotFullRefresh.NoMDEntries>
                            item = itens.Current;
                            enviaInstantaneo(
                                Convert.ToInt32(item.Key),
                                ocorrencia++,
                                mensagem,
                                item.Value);
                        }
                    }
                }
                else
                {
                    logger.Debug("SNAPSHOT - sem elementos");
                }
            }

            catch (FieldNotFound e)
            {
                logger.Error("Campo nao encontrado na mensagem: " + e.Message);
            }
        }
示例#2
0
		public virtual void Send(FIXMarketDataSnapshot Snapshot)
		{
			MarketDataSnapshotFullRefresh snapshotFullRefresh = new MarketDataSnapshotFullRefresh(new Symbol(Snapshot.Symbol));
			if (Snapshot.ContainsField(262))
				snapshotFullRefresh.set(new MDReqID(Snapshot.MDReqID));
			if (Snapshot.ContainsField(65))
				snapshotFullRefresh.set(new SymbolSfx(Snapshot.SymbolSfx));
			if (Snapshot.ContainsField(48))
				snapshotFullRefresh.set(new SecurityID(Snapshot.SecurityID));
			if (Snapshot.ContainsField(22))
				snapshotFullRefresh.set(new IDSource(Snapshot.SecurityIDSource));
			if (Snapshot.ContainsField(167))
				snapshotFullRefresh.set(new QuickFix.SecurityType(Snapshot.SecurityType));
			if (Snapshot.ContainsField(200))
				snapshotFullRefresh.set(new MaturityMonthYear(Snapshot.MaturityMonthYear));
			if (Snapshot.ContainsField(202))
				snapshotFullRefresh.set(new StrikePrice(Snapshot.StrikePrice));
			if (Snapshot.ContainsField(206))
				snapshotFullRefresh.set(new OptAttribute(Snapshot.OptAttribute));
			if (Snapshot.ContainsField(231))
				snapshotFullRefresh.set(new ContractMultiplier(Snapshot.ContractMultiplier));
			if (Snapshot.ContainsField(223))
				snapshotFullRefresh.set(new CouponRate(Snapshot.CouponRate));
			if (Snapshot.ContainsField(207))
				snapshotFullRefresh.set(new SecurityExchange(Snapshot.SecurityExchange));
			if (Snapshot.ContainsField(106))
				snapshotFullRefresh.set(new Issuer(Snapshot.Issuer));
			if (Snapshot.ContainsField(348))
				snapshotFullRefresh.set(new EncodedIssuerLen(Snapshot.EncodedIssuerLen));
			if (Snapshot.ContainsField(349))
				snapshotFullRefresh.set(new EncodedIssuer(Snapshot.EncodedIssuer));
			if (Snapshot.ContainsField(107))
				snapshotFullRefresh.set(new SecurityDesc(Snapshot.SecurityDesc));
			if (Snapshot.ContainsField(350))
				snapshotFullRefresh.set(new EncodedSecurityDescLen(Snapshot.EncodedSecurityDescLen));
			if (Snapshot.ContainsField(351))
				snapshotFullRefresh.set(new EncodedSecurityDesc(Snapshot.EncodedSecurityDesc));
			if (Snapshot.ContainsField(291))
				snapshotFullRefresh.set(new FinancialStatus(((object)Snapshot.FinancialStatus).ToString()));
			if (Snapshot.ContainsField(292))
				snapshotFullRefresh.set(new CorporateAction(((object)Snapshot.CorporateAction).ToString()));
			for (int i = 0; i < Snapshot.NoMDEntries; ++i)
			{
				MarketDataSnapshotFullRefresh.NoMDEntries noMdEntries = new MarketDataSnapshotFullRefresh.NoMDEntries();
				FIXMDEntriesGroup mdEntriesGroup = Snapshot.GetMDEntriesGroup(i);
				noMdEntries.set(new MDEntryType(mdEntriesGroup.MDEntryType));
				noMdEntries.set(new MDEntryPx(mdEntriesGroup.MDEntryPx));
				if (mdEntriesGroup.ContainsField(271))
					noMdEntries.set(new MDEntrySize(mdEntriesGroup.MDEntrySize));
				if (mdEntriesGroup.ContainsField(272))
					noMdEntries.set(new MDEntryDate(mdEntriesGroup.MDEntryDate));
				if (mdEntriesGroup.ContainsField(273))
					noMdEntries.set(new MDEntryTime(mdEntriesGroup.MDEntryTime));
				if (mdEntriesGroup.ContainsField(274))
					noMdEntries.set(new TickDirection(mdEntriesGroup.TickDirection));
				if (mdEntriesGroup.ContainsField(275))
					noMdEntries.set(new MDMkt(mdEntriesGroup.MDMkt));
				if (mdEntriesGroup.ContainsField(336))
					noMdEntries.set(new TradingSessionID(mdEntriesGroup.TradingSessionID));
				if (mdEntriesGroup.ContainsField(276))
					noMdEntries.set(new QuoteCondition(mdEntriesGroup.QuoteCondition));
				if (mdEntriesGroup.ContainsField(277))
					noMdEntries.set(new TradeCondition(mdEntriesGroup.TradeCondition));
				if (mdEntriesGroup.ContainsField(282))
					noMdEntries.set(new MDEntryOriginator(mdEntriesGroup.MDEntryOriginator));
				if (mdEntriesGroup.ContainsField(283))
					noMdEntries.set(new LocationID(mdEntriesGroup.LocationID));
				if (mdEntriesGroup.ContainsField(284))
					noMdEntries.set(new DeskID(mdEntriesGroup.DeskID));
				if (mdEntriesGroup.ContainsField(59))
					noMdEntries.set(new QuickFix.TimeInForce(mdEntriesGroup.TimeInForce));
				if (mdEntriesGroup.ContainsField(126))
					noMdEntries.set(new ExpireTime(mdEntriesGroup.ExpireTime));
				if (mdEntriesGroup.ContainsField(110))
					noMdEntries.set(new MinQty(mdEntriesGroup.MinQty));
				if (mdEntriesGroup.ContainsField(18))
					noMdEntries.set(new ExecInst(mdEntriesGroup.ExecInst));
				if (mdEntriesGroup.ContainsField(287))
					noMdEntries.set(new SellerDays(mdEntriesGroup.SellerDays));
				if (mdEntriesGroup.ContainsField(37))
					noMdEntries.set(new OrderID(mdEntriesGroup.OrderID));
				if (mdEntriesGroup.ContainsField(299))
					noMdEntries.set(new QuoteEntryID(mdEntriesGroup.QuoteEntryID));
				if (mdEntriesGroup.ContainsField(288))
					noMdEntries.set(new MDEntryBuyer(mdEntriesGroup.MDEntryBuyer));
				if (mdEntriesGroup.ContainsField(289))
					noMdEntries.set(new MDEntrySeller(mdEntriesGroup.MDEntrySeller));
				if (mdEntriesGroup.ContainsField(346))
					noMdEntries.set(new NumberOfOrders(mdEntriesGroup.NumberOfOrders));
				if (mdEntriesGroup.ContainsField(290))
					noMdEntries.set(new MDEntryPositionNo(mdEntriesGroup.MDEntryPositionNo));
				if (mdEntriesGroup.ContainsField(58))
					noMdEntries.set(new Text(mdEntriesGroup.Text));
				if (mdEntriesGroup.ContainsField(354))
					noMdEntries.set(new EncodedTextLen(mdEntriesGroup.EncodedTextLen));
				if (mdEntriesGroup.ContainsField(355))
					noMdEntries.set(new EncodedText(mdEntriesGroup.EncodedText));
				snapshotFullRefresh.addGroup((Group)noMdEntries);
				noMdEntries.Dispose();
			}
			try
			{
				Session.sendToTarget((QuickFix.Message)snapshotFullRefresh, this.fSessionID);
			}
			catch (Exception ex)
			{
				Console.WriteLine(BeAEwTZGlZaeOmY5cm.J00weU3cM6(1148) + ex.Message);
			}
		}
示例#3
0
        /**
         * Monta e envia mensagem Market Data de Snapshot (instantaneo) para o ESPER.
         * Layout da mensagem:
         * SeqNum									9(15)
         * type										X(1)
         * symbol									X(20)
         * securityID								X(20)
         * body:
         *      MDUpdateAction (279)				X(1)
         *      MDEntryID (278)					X(10)
         *      MDEntryDate (272)					X(8)
         *      MDEntryTime (273)					X(8)
         *
         *		MDEntryPositionNo (290)			X(6)
         *		MDEntryPx (270)					X(15)
         *		MDEntrySize (271)					X(15)
         *		NumberOfOrders (346)				X(15)
         *		OrderID (37)						X(50)
         *		MDEntryBuyer (288)					X(10)
         *		MDEntrySeller (289)				X(10)
         *		TickDirection (274)				X(1)
         *		NetChgPrevDay (451)				X(11)
         *		UniqueTradeID (6032)				X(20)
         *		OpenCloseSettlFlag (286)			9(1)
         *		TradingSessionSubID (625)		X(2)
         *		SecurityTradingStatus (326)		9(3)
         *		NoReferentialPrices (6932)		9(3)
         *			ReferentialPriceType (6934)	9(1)
         *			ReferentialPx (6933)			X(15)
         *			TransactTime (60)				X(20)
         */
        private void enviaInstantaneo(
            int seqNum,
            uint ocorrencia,
            MarketDataSnapshotFullRefresh mensagem,
            MarketDataSnapshotFullRefresh.NoMDEntries grupo)
        {
            String mensagemMDS;
            String instrumento = null;

            try
            {
                // SeqNum - 9(15)
                mensagemMDS = seqNum.ToString("D10");
                mensagemMDS = mensagemMDS + ocorrencia.ToString("D5");

                // type - X(1)
                mensagemMDS = mensagemMDS + grupo.getChar(MDEntryType.FIELD);

                // symbol - X(20)
                instrumento = mensagem.getString(Symbol.FIELD);
                mensagemMDS = mensagemMDS + instrumento.PadLeft(20);

                // securityID - X(20)
                mensagemMDS = mensagemMDS + mensagem.getString(SecurityID.FIELD).PadLeft(20);

                // body

                // Se OFERTA_COMPRA ou OFERTA_VENDA, envia NEW em MDUpdateAction
                if (grupo.getChar(MDEntryType.FIELD) == MDEntryType.BID ||
                    grupo.getChar(MDEntryType.FIELD) == MDEntryType.OFFER)
                {
                    mensagemMDS = mensagemMDS + MDUpdateAction.NEW;
                }
                else
                {
                    mensagemMDS = mensagemMDS + " ";
                }

                mensagemMDS = mensagemMDS + " ".PadLeft(10);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryDate()) ? grupo.getString(MDEntryDate.FIELD) : "").PadLeft(8);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryTime()) ? grupo.getString(MDEntryTime.FIELD) : "").PadLeft(8).Trim();
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryPositionNo()) ? grupo.getString(MDEntryPositionNo.FIELD) : " ").PadLeft(6);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryPx()) ? grupo.getString(MDEntryPx.FIELD) : " ").PadLeft(15);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntrySize()) ? grupo.getString(MDEntrySize.FIELD) : " ").PadLeft(15);
                mensagemMDS = mensagemMDS + (grupo.isSet(new NumberOfOrders()) ? grupo.getString(NumberOfOrders.FIELD) : " ").PadLeft(15);
                mensagemMDS = mensagemMDS + (grupo.isSet(new OrderID()) ? grupo.getString(OrderID.FIELD) : " ").PadLeft(50);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryBuyer()) ? grupo.getString(MDEntryBuyer.FIELD) : " ").PadLeft(10);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntrySeller()) ? grupo.getString(MDEntrySeller.FIELD) : " ").PadLeft(10);
                mensagemMDS = mensagemMDS + (grupo.isSet(new TickDirection()) ? grupo.getString(TickDirection.FIELD) : " ").PadLeft(1);
                mensagemMDS = mensagemMDS + (mensagem.isSetField(NetChgPrevDay.FIELD) ? mensagem.getString(NetChgPrevDay.FIELD) : " ").PadLeft(11);
                mensagemMDS = mensagemMDS + (grupo.isSetField(6032) ? grupo.getString(6032) : " ").PadLeft(20);
                mensagemMDS = mensagemMDS + (grupo.isSet(new OpenCloseSettlFlag()) ? grupo.getInt(OpenCloseSettlFlag.FIELD) : 0).ToString("D1");
                mensagemMDS = mensagemMDS + (grupo.isSet(new TradingSessionSubID()) ? grupo.getString(TradingSessionSubID.FIELD) : " ").PadLeft(2);
                mensagemMDS = mensagemMDS + (grupo.isSetField(326) ? grupo.getInt(326) : 0).ToString("D3");

                if (grupo.isSetField(6932))
                {
                    int ocorrencias = grupo.getInt(6932);
                    mensagemMDS = mensagemMDS + ocorrencias.ToString("D3");

                    for (uint ocorrenciaPrecos = 1;
                         ocorrenciaPrecos <= ocorrencias; ocorrenciaPrecos++)
                    {
                        //ATP: Sinistraço!!!!
                        Group grupoPrecos = new Group(6932, 6934, new int[] { 6934, 6933, 60, 0 });
                        grupo.getGroup(ocorrenciaPrecos, grupoPrecos);

                        mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(6934) ? grupoPrecos.getInt(6934).ToString("D1") : "0");
                        mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(6933) ? grupoPrecos.getString(6933) : " ").PadLeft(15);
                        mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(TransactTime.FIELD) ? grupoPrecos.getString(TransactTime.FIELD) : "").PadLeft(20);
                    }
                }
                else
                {
                    mensagemMDS = mensagemMDS + "000";
                }

                try
                {
                    filaMensagensRetransmissorBMF.Push(mensagemMDS);
                }
                catch (Exception e)
                {
                    logger.Error("Falha na leitura da fila filaMensagensRetransmissorBMF: " +
                                 e.Message, e);
                }

                logger.Debug("SNAPHOT - Instrumento[" +
                             mensagem.getString(Symbol.FIELD) + "] tipo[" +
                             grupo.getChar(MDEntryType.FIELD) + "] Mensagem[" +
                             mensagemMDS + "]");
            }
            catch (FieldNotFound e)
            {
                logger.Error("Instrumento[" + instrumento +
                             "]: Campo nao encontrado na mensagem: " + e.Message);
                return;
            }
            catch (Exception e)
            {
                logger.Error("enviaInstantaneo: " + e.Message, e);
            }
        }
示例#4
0
		public void onMessage(QuickFix.FIX42.MarketDataSnapshotFullRefresh snapshot, SessionID sessionID)
		{
			FIXMarketDataSnapshot MarketDataSnapshotFullRefresh = new FIXMarketDataSnapshot();
			if (snapshot.isSetContractMultiplier())
				MarketDataSnapshotFullRefresh.ContractMultiplier = snapshot.getContractMultiplier().getValue();
			if (snapshot.isSetCorporateAction())
				MarketDataSnapshotFullRefresh.CorporateAction = snapshot.getCorporateAction().getValue();
			if (snapshot.isSetCouponRate())
				MarketDataSnapshotFullRefresh.CouponRate = snapshot.getCouponRate().getValue();
			if (snapshot.isSetEncodedIssuer())
				MarketDataSnapshotFullRefresh.EncodedIssuer = snapshot.getEncodedIssuer().getValue();
			if (snapshot.isSetEncodedIssuerLen())
				MarketDataSnapshotFullRefresh.EncodedIssuerLen = snapshot.getEncodedIssuerLen().getValue();
			if (snapshot.isSetEncodedSecurityDesc())
				MarketDataSnapshotFullRefresh.EncodedSecurityDesc = snapshot.getEncodedSecurityDesc().getValue();
			if (snapshot.isSetEncodedSecurityDescLen())
				MarketDataSnapshotFullRefresh.EncodedSecurityDescLen = snapshot.getEncodedSecurityDescLen().getValue();
			if (snapshot.isSetFinancialStatus())
				MarketDataSnapshotFullRefresh.FinancialStatus = snapshot.getFinancialStatus().getValue();
			if (snapshot.isSetIssuer())
				MarketDataSnapshotFullRefresh.Issuer = snapshot.getIssuer().getValue();
			if (snapshot.isSetMaturityMonthYear())
				MarketDataSnapshotFullRefresh.MaturityMonthYear = snapshot.getMaturityMonthYear().getValue();
			if (snapshot.isSetMDReqID())
				MarketDataSnapshotFullRefresh.MDReqID = snapshot.getMDReqID().getValue();
			if (snapshot.isSetOptAttribute())
				MarketDataSnapshotFullRefresh.OptAttribute = snapshot.getOptAttribute().getValue();
			if (snapshot.isSetSecurityDesc())
				MarketDataSnapshotFullRefresh.SecurityDesc = snapshot.getSecurityDesc().getValue();
			if (snapshot.isSetSecurityExchange())
				MarketDataSnapshotFullRefresh.SecurityExchange = snapshot.getSecurityExchange().getValue();
			if (snapshot.isSetSecurityID())
				MarketDataSnapshotFullRefresh.SecurityID = snapshot.getSecurityID().getValue();
			if (snapshot.isSetSecurityType())
				MarketDataSnapshotFullRefresh.SecurityType = snapshot.getSecurityType().getValue();
			if (snapshot.isSetStrikePrice())
				MarketDataSnapshotFullRefresh.StrikePrice = snapshot.getStrikePrice().getValue();
			if (snapshot.isSetSymbol())
				MarketDataSnapshotFullRefresh.Symbol = snapshot.getSymbol().getValue();
			if (snapshot.isSetSymbolSfx())
				MarketDataSnapshotFullRefresh.SymbolSfx = snapshot.getSymbolSfx().getValue();
			MarketDataSnapshotFullRefresh.NoMDEntries noMdEntries = new MarketDataSnapshotFullRefresh.NoMDEntries();
			for (uint num = 1U; (long)num <= (long)snapshot.getNoMDEntries().getValue(); ++num)
			{
				snapshot.getGroup(num, (Group)noMdEntries);
				FIXMDEntriesGroup group = new FIXMDEntriesGroup(noMdEntries.get(new MDEntryType()).getValue());
				if (noMdEntries.isSetMDEntryDate())
					group.MDEntryDate = noMdEntries.getMDEntryDate().getValue();
				if (noMdEntries.isSetMDEntryTime())
					group.MDEntryTime = noMdEntries.getMDEntryTime().getValue();
				if (noMdEntries.isSetMDEntryPx())
					group.MDEntryPx = noMdEntries.getMDEntryPx().getValue();
				if (noMdEntries.isSetMDEntrySize())
					group.MDEntrySize = noMdEntries.getMDEntrySize().getValue();
				if (noMdEntries.isSetMDEntryBuyer())
					group.MDEntryBuyer = noMdEntries.getMDEntryBuyer().getValue();
				if (noMdEntries.isSetMDEntrySeller())
					group.MDEntrySeller = noMdEntries.getMDEntrySeller().getValue();
				MarketDataSnapshotFullRefresh.AddGroup(group);
			}
			noMdEntries.Dispose();
			if (this.DHHvj9eQf == null)
				return;
			this.DHHvj9eQf((object)this, new FIXMarketDataSnapshotEventArgs(MarketDataSnapshotFullRefresh));
		}