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; }