Ejemplo n.º 1
0
        private static bool AddBidAskQueryClause(Message msg, string ticker)
        {
            var simGroup = new QuickFix44.MarketDataRequest.NoRelatedSym(); // 146=1

            // подписаться на символ по его коду?
            if (subscribeBySecurityId)
            {
                int tickerCode;
                if (!TickerCodeDictionary.Instance.tickerCode.TryGetValue(ticker, out tickerCode))
                {
                    Logger.ErrorFormat("Запрос котировки {0} - нет кода", ticker);
                    return false;
                }

                simGroup.setField(new SecurityID(tickerCode.ToString())); // 48=4006 symbol
                simGroup.setField(new SecurityIDSource("8")); // 22=8 symbol
            }
            else
            // подписаться по названию
            {
                simGroup.setField(new Symbol(TickerCodeDictionary.Instance.GetTickerNameFormatted(ticker)));
            }

            // два отдельных запроса на bid-ask?
            if (distinctQueriesForBidAsk)
            {
                var group = new QuickFix44.MarketDataRequest.NoMDEntryTypes(); // 267=2
                group.setField(new MDEntryType('0')); // 269=0 (bid)
                simGroup.addGroup(group);

                group = new QuickFix44.MarketDataRequest.NoMDEntryTypes();
                group.setField(new MDEntryType('1')); // 269=1 (offer)
                simGroup.addGroup(group);
            }
            else
            // один запрос
            {
                var group = new QuickFix44.MarketDataRequest.NoMDEntryTypes(); // 267=2
                group.setField(new MDEntryType('2')); // 269=0 (bid + offer)
                simGroup.addGroup(group);
            }
            msg.addGroup(simGroup);

            msg.setField(new NoRelatedSym(1)); // 1 subscription
            msg.setField(new Symbol(ticker));

            return true;
        }