← Zurück

Не правильное значение лучшей цены в стакане

АПИ 4.2.72, коннектор Quik lua. Периодически получаю неверное значение лучшей цены в стакане, которая находится в середине противоположных котировок:


            var md = this.Connector.GetFilteredMarketDepth(this.Security);
			Sides? badside = null;
			//проверим, есть ли "плохая" лучшая цена
			if (md.Asks.Count() > 1 && md.Bids.Count() > 1)
			{
				if (md.Asks[0].Price<md.Bids[0].Price)
				{
					//есть попандос
					if (md.Asks[0].Price < md.Bids[1].Price) badside = Sides.Sell;
					else if (md.Bids[0].Price > md.Asks[1].Price) badside = Sides.Buy;
				}
			}
			if (badside != null) this.AddErrorLog("В стакане не верная лучшая цена по направлению {0}", badside);

Вместо Asks и Bids можно использовать GetQuotes, GetFilteredQuotes, вместо GetFilteredMarketDepth использовать GetMarketDepth - результат одинаковый. Закономерность появления "плохой" лучшей цены выявить не удалось. Может выскочить с утра, может к вечеру, а может и вообще несколько дней не появляться.

War dieses Thema hilfreich?

Thema teilen

Kommentare (25)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Сергей Гаврилов

Писал историю лучших бидов/асков фьюча на сбер... Тоже наблюдал, что периодически бид и аск перепутаны.. s# 4.2.70 Lua

RomSunZ
RomSunZ Autor

Они не перепутаны. При формировании стакана в какой-то момент по одной из сторон стакана "зависает" старая цена, которая остается постоянной, пока не перезагрузишь робота. Если она находится "внутри" своей стороны - мы этого не видим, но как только цены сдвигаются на значительное расстояние, она всплывает как "лучшая". Это баг формирования стакана. Кстати есть лог, демонстрирующий этот факт:

13:36:25.047| По заявке котирования новая сделка средняя цена=6739 объем=3 проскальзывание=-11 нач.цена=6750 Sell SRM5@FORTS 13:36:25.048| По заявке котирования новая сделка средняя цена=6739 объем=3 проскальзывание=-11 нач.цена=6750 Sell SRM5@FORTS 13:42:01.100| По заявке котирования новая сделка средняя цена=6742 объем=3 проскальзывание=0 нач.цена=6742 Buy SRM5@FORTS 13:42:47.042| По заявке котирования новая сделка средняя цена=6745 объем=3 проскальзывание=0 нач.цена=6745 Buy SRM5@FORTS 13:54:13.204| По заявке котирования новая сделка средняя цена=6728.4 объем=5 проскальзывание=-21.6 нач.цена=6750 Sell SRM5@FORTS 13:54:13.749| По заявке котирования новая сделка средняя цена=6730 объем=6 проскальзывание=1 нач.цена=6731 Buy SRM5@FORTS 13:54:13.858| По заявке котирования новая сделка средняя цена=6728 объем=1 проскальзывание=-22 нач.цена=6750 Sell SRM5@FORTS 13:54:15.063| По заявке котирования новая сделка средняя цена=6730 объем=6 проскальзывание=0 нач.цена=6730 Buy SRM5@FORTS 13:54:17.911| По заявке котирования новая сделка средняя цена=6727 объем=1 проскальзывание=-23 нач.цена=6750 Sell SRM5@FORTS 13:54:17.913| По заявке котирования новая сделка средняя цена=6727 объем=5 проскальзывание=-23 нач.цена=6750 Sell SRM5@FORTS 13:54:17.915| По заявке котирования новая сделка средняя цена=6727 объем=6 проскальзывание=-23 нач.цена=6750 Sell SRM5@FORTS 13:54:18.464| По заявке котирования новая сделка средняя цена=6729 объем=6 проскальзывание=0 нач.цена=6729 Buy SRM5@FORTS 13:54:19.769| По заявке котирования новая сделка средняя цена=6728 объем=6 проскальзывание=2 нач.цена=6730 Buy SRM5@FORTS 13:54:20.369| По заявке котирования новая сделка средняя цена=6726 объем=5 проскальзывание=-24 нач.цена=6750 Sell SRM5@FORTS 13:54:20.370| По заявке котирования новая сделка средняя цена=6726 объем=1 проскальзывание=-24 нач.цена=6750 Sell SRM5@FORTS 13:54:20.803| По заявке котирования новая сделка средняя цена=6729 объем=2 проскальзывание=-1 нач.цена=6728 Buy SRM5@FORTS 13:54:22.992| По заявке котирования новая сделка средняя цена=6726 объем=1 проскальзывание=-24 нач.цена=6750 Sell SRM5@FORTS 13:54:22.993| По заявке котирования новая сделка средняя цена=6726 объем=1 проскальзывание=-24 нач.цена=6750 Sell SRM5@FORTS 13:54:24.965| По заявке котирования новая сделка средняя цена=6727 объем=1 проскальзывание=-23 нач.цена=6750 Sell SRM5@FORTS 13:54:24.969| По заявке котирования новая сделка средняя цена=6727 объем=2 проскальзывание=-23 нач.цена=6750 Sell SRM5@FORTS 13:54:27.914| По заявке котирования новая сделка средняя цена=6730 объем=2 проскальзывание=-1 нач.цена=6729 Buy SRM5@FORTS 13:54:28.026| По заявке котирования новая сделка средняя цена=6728 объем=1 проскальзывание=-22 нач.цена=6750 Sell SRM5@FORTS 13:54:28.789| По заявке котирования новая сделка средняя цена=6727 объем=1 проскальзывание=-23 нач.цена=6750 Sell SRM5@FORTS 13:54:31.988| По заявке котирования новая сделка средняя цена=6727 объем=2 проскальзывание=-23 нач.цена=6750 Sell SRM5@FORTS 13:54:57.821| По заявке котирования новая сделка средняя цена=6737 объем=5 проскальзывание=-6 нач.цена=6731 Buy SRM5@FORTS 13:56:34.427| По заявке котирования новая сделка средняя цена=6731 объем=1 проскальзывание=-19 нач.цена=6750 Sell SRM5@FORTS 13:56:35.849| По заявке котирования новая сделка средняя цена=6735 объем=6 проскальзывание=0 нач.цена=6735 Buy SRM5@FORTS 13:56:39.017| По заявке котирования новая сделка средняя цена=6733 объем=5 проскальзывание=-17 нач.цена=6750 Sell SRM5@FORTS 13:57:08.023| По заявке котирования новая сделка средняя цена=6739 объем=1 проскальзывание=-11 нач.цена=6750 Sell SRM5@FORTS Перед запуском котирования я записываю лучшую цену (нач.цена). Далее робот выставляет заявку по этой "лучшей" цене, но она попадает в глубь стакана по цене 6750, а потом перекотируется уже на нормальную цену. Вот сравнение лучших цен (приходится делать, чтобы избежать этого бага): 13:54:12.986|Error ||Рассинхронизация цен: MD best ask=6731, bid=6750, Security best ask=6731, bid=6729, newPrice=6729, best quote=6750 MD - это стакан.

merabn
Mikhail Sukhov
Mikhail Sukhov

Ошибки идут из Луа. Тоесть получаются уже неправильные стаканы.

merabn
merabn

Они не перепутаны. При формировании стакана в какой-то момент по одной из сторон стакана "зависает" старая цена, которая остается постоянной, пока не перезагрузишь робота. Если она находится "внутри" своей стороны - мы этого не видим, но как только цены сдвигаются на значительное расстояние, она всплывает как "лучшая". Это баг формирования стакана.

......

Вот сравнение лучших цен (приходится делать, чтобы избежать этого бага):

13:54:12.986|Error ||Рассинхронизация цен: MD best ask=6731, bid=6750, Security best ask=6731, bid=6729, newPrice=6729, best quote=6750 MD - это стакан.

Спасибо за информацию. Можно попробовать импорт через DDE. Если это действительно конфликт lua скрипта и Квика, то избавитесь от ошибки. Напишите, пожалуйста, о результате, если проведете такой эксперимент.

RomSunZ
RomSunZ Autor

Фикс будет?

Mikhail Sukhov
Mikhail Sukhov

RomSunZ: Фикс будет?

Будет. Но я не могу пофиксить Квик.

RomSunZ
RomSunZ Autor

Так проблема в квике или в коннекторе ЛУА?

Mikhail Sukhov
Mikhail Sukhov

Квик

RomSunZ
RomSunZ Autor

А обращение на этот счет было в техподдержку квика?

Mikhail Sukhov
Mikhail Sukhov

По этому отчетов перед юзерами не будет

RomSunZ
RomSunZ Autor

С чем связана такая секретность? Это ведь не просто баг, это жопа. Я на этом баге потерял 12% депо, пока не понял в чем дело. А у вас нигде намека на это нет, хотя вы и в курсе судя по всему. И ведь эталона кроме глаз нету. В Security.BestAsk/BestBid тоакже транслируется неверные значения в момент проявления этого бага...

Mikhail Sukhov
Mikhail Sukhov

RomSunZ: С чем связана такая секретность?

Дело не в секретности. Сырцы на Гите. Точка останова и вперед. Или логи.

RomSunZ
RomSunZ Autor

Михаил Сухов:

RomSunZ: С чем связана такая секретность?

Дело не в секретности. Сырцы на Гите. Точка останова и вперед. Или логи.

Как сырцы помогут, если, по вашим словам, проблема в квике? Плюс к тому же я не разработчик и не имею доступа к исходникам коннектора. Я привел код, который позволяет поймать этот баг. Будьте добры, как разработчик и знаток платформы, заняться доработкой коннектора LUA (если проблема все же в нем).

Mikhail Sukhov
Mikhail Sukhov

Вы же сами хотите интерактив.😀

Иван З.
Иван З.

Я как то обновился, с версии S# 4.2.61 на более высокую, именно коннектор обновлял. У меня появились проблемы со стаканом, похожие по описанию на ваши. Я сразу откатился назад. Я не утверждаю что проблема в коннекторе, возможно стратегия моя не столь требовательна к стаканам и я просто не замечаю косяки. Но на S# 4.2.61 проблемы не наблюдаю. В общем прорвете на 4.2.61.

RomSunZ
RomSunZ Autor

Не понял ваш ответ, что имеете в виду под я хотел интерактив? Или это типа троллинг?

RomSunZ
RomSunZ Autor

Михаил, внятно можете пояснить, было обращение в квик по поводу не верной трансляции данных по стакану или нет?

Mikhail Sukhov
Mikhail Sukhov

RomSunZ: Михаил, внятно можете пояснить, было обращение в квик по поводу не верной трансляции данных по стакану или нет?

http://stocksharp.com/posts/m/32966/

RomSunZ
RomSunZ Autor

Уважаемые разработчики, проверьте пожалуйста коннектор ЛУА, т.к. проблема скорее всего в коннекторе. Я подправил скрипт, который в приложении, он экспортирует лучшую цену в файл. Вот что у меня получилось при работе с SRM5@FORTS: лог робота:

14:35:34.736|Error |BS_SRM5@FORTS_SPBFUT|Рассинхронизация цен (2): MD best ask=7405, bid=7449, Security best ask=7405, bid=7449, quote[0]=7449, quote[1]=7448, Расчетная цена исполнения 7404 направление Sell 14:35:35.016|Error |BS_SRM5@FORTS_SPBFUT|Рассинхронизация цен (2): MD best ask=7405, bid=7449, Security best ask=7405, bid=7449, quote[0]=7405, quote[1]=7406, Расчетная цена исполнения 7450 направление Buy 14:35:35.022|Error |BS_SRM5@FORTS_SPBFUT|Рассинхронизация цен (2): MD best ask=7405, bid=7449, Security best ask=7405, bid=7449, quote[0]=7405, quote[1]=7406, Расчетная цена исполнения 7450 направление Buy 14:35:35.302|Error |BS_SRM5@FORTS_SPBFUT|Рассинхронизация цен (2): MD best ask=7404, bid=7449, Security best ask=7404, bid=7449, quote[0]=7404, quote[1]=7405, Расчетная цена исполнения 7450 направление Buy 14:35:35.304|Error |BS_SRM5@FORTS_SPBFUT|Рассинхронизация цен (2): MD best ask=7404, bid=7449, Security best ask=7404, bid=7449, quote[0]=7404, quote[1]=7405, Расчетная цена исполнения 7450 направление Buy

Лог луа-скрипта, который экспортирует лучшие цены:

DATE TIME BEST ASK BEST BID 23.04.2015 14:35:34.734 7405 7402 23.04.2015 14:35:35.015 7405 7402 23.04.2015 14:35:35.023 7404 7402 23.04.2015 14:35:35.304 7404 7403 23.04.2015 14:35:35.306 7404 7403 Как видно в примерно одинаковое время котировки коннектора идут с неправильными бидами/асками, а ЛУА выводит их без ошибок.

Mikhail Sukhov
Mikhail Sukhov

RomSunZ: Уважаемые разработчики, проверьте пожалуйста коннектор ЛУА, т.к. проблема скорее всего в коннекторе.

Надо проверку вот сюда воткнуть https://github.com/StockSharp/StockSharp/blob/master/Connectors/Quik/Lua/LuaFixServer.cs#L473 и напишите, что она даст.

Исходники лучше качать ДО https://github.com/StockSharp/StockSharp/commit/9cc21b7d6f3b89e8fd3ad9f495d7b32f43a8cff6 (включительно). Все что позднее сейчас нестабильно.

RomSunZ
RomSunZ Autor

Добавил такую проверку:


				case MessageTypes.QuoteChange:
				{
					var quoteMsg = (QuoteChangeMessage)message;
					_sessionHolder.ReplaceSecurityId(quoteMsg.SecurityId, id => quoteMsg.SecurityId = id);
					quoteMsg.ServerTime = _sessionHolder.CurrentTime.Convert(TimeHelper.Moscow);
					var ask = quoteMsg.GetBestAsk().Price;
					var bid = quoteMsg.GetBestBid().Price;
					if (ask <= bid)
					{
						LogReceiver.AddErrorLog("Не верные значения лучших цен! best ask={0} best bid={1} sec={2}", ask, bid, quoteMsg.SecurityId);
					}
					break;
				}

В момент получения ошибки по стакану в роботе в логе луа ошибок нет, т.е. ошибка появляется где-то дальше. Где еще посмотреть можно?

P.S. Периодически в трейдере получаю такую ошибку на сборке, указанной выше:

13:54:23.464| |Quik |From server: MarketDataSnapshotFullRefresh 13:54:23.464|Error |QuikTrader|System.InvalidOperationException: Tags should be BodyLength but received BeginString. в #=qJublOOhstNGuOqciA4pO0IxEbqusgq8AzTUZ$z4_I7QdDamhxix_6xIpo0q08gJs.#=qFSkNH1E6ksrvdnmrGezbbA==(IFixReader #=qyHB14XScGdVE06FHEgMxZQ==, FixTags #=qHKHjSlBEl8dJccjTaFV94Q==) в #=qJublOOhstNGuOqciA4pO0IxEbqusgq8AzTUZ$z4_I7QdDamhxix_6xIpo0q08gJs.#=qYxLyRp9D4RLNmE615p0bhg==(IFixReader #=qjMUDTw7SUe_0KRt5Hr3OIw==, Boolean #=qeHLVtncL2jAcnczVF92hWEFOYnbsI6LNDKA14vzcvxE=, String #=qnp5_Jgq80L$XMFuCxSTvbuW9g7dT2OzNoyyy4yKpxiY=, ILogReceiver #=qLy6FlbS2B0nlLuQVBJrlLA==, String #=qqHxlCuzlbwviGaQ3NdXv5Q==, Func3 #=qByjHri7T4qfIYiyMbykVjQ==, Action1 #=qIoFIKYpJwlJ6XnjSBMM1Mg==) 13:54:23.464|Error |QuikTrader|System.InvalidOperationException: Tags should be BodyLength but received BeginString. в #=qJublOOhstNGuOqciA4pO0IxEbqusgq8AzTUZ$z4_I7QdDamhxix_6xIpo0q08gJs.#=qFSkNH1E6ksrvdnmrGezbbA==(IFixReader #=qyHB14XScGdVE06FHEgMxZQ==, FixTags #=qHKHjSlBEl8dJccjTaFV94Q==) в #=qJublOOhstNGuOqciA4pO0IxEbqusgq8AzTUZ$z4_I7QdDamhxix_6xIpo0q08gJs.#=qYxLyRp9D4RLNmE615p0bhg==(IFixReader #=qjMUDTw7SUe_0KRt5Hr3OIw==, Boolean #=qeHLVtncL2jAcnczVF92hWEFOYnbsI6LNDKA14vzcvxE=, String #=qnp5_Jgq80L$XMFuCxSTvbuW9g7dT2OzNoyyy4yKpxiY=, ILogReceiver #=qLy6FlbS2B0nlLuQVBJrlLA==, String #=qqHxlCuzlbwviGaQ3NdXv5Q==, Func3 #=qByjHri7T4qfIYiyMbykVjQ==, Action1 #=qIoFIKYpJwlJ6XnjSBMM1Mg==) 13:54:23.464| |QuikTrader|StartExport

Mikhail Sukhov
Mikhail Sukhov

RomSunZ: В момент получения ошибки по стакану в роботе в логе луа ошибок нет, т.е. ошибка появляется где-то дальше.

Получается, что из Луа приходит нормальные стакана. Видимо порча идет дальше. Выставите в скрипте IncrementalDepthUpdates=false Стакан должен слаться как есть.

Подписка на стаканы идет по одному инструменту или по нескольким?

RomSunZ
RomSunZ Autor

Михаил, подскажите где в коде устанавливается флаг message.IsSorted для LUA?

RomSunZ
RomSunZ Autor

А в ответ тишина... Использую фикс a5aee499, все, что выше работает не стабильно.

  1. Код в LuaFixServer функиця public override void SendOutMessage(Message message):

				switch (message.Type)
				{
......
					case MessageTypes.QuoteChange:
					{
						var quoteMsg = (QuoteChangeMessage)message;
						SessionHolder.ReplaceSecurityId(quoteMsg.SecurityId, id => quoteMsg.SecurityId = id);
						quoteMsg.ServerTime = SessionHolder.CurrentTime.Convert(TimeHelper.Moscow);

						var bask = quoteMsg.GetBestAsk().Price;
						var bbid = quoteMsg.GetBestBid().Price;
						if (quoteMsg.SecurityId.SecurityCode == "SRM5")
						{
							if (bask <= bbid)
							{
								SessionHolder.AddErrorLog("(0)Не верные значения лучших цен в message! best ask={0} best bid={1} sec={2}", bask, bbid, quoteMsg.SecurityId.SecurityCode);
							}
							else
							{
								SessionHolder.AddErrorLog("(1)Значения лучших цен в message: best ask={0} best bid={1} sec={2}", bask, bbid, quoteMsg.SecurityId.SecurityCode);
							}
						}
						break;
					}
.....
				}


Лог:

2015/04/28 14:21:59.828|Error |Quik |(1)Значения лучших цен в message: best ask=7503 best bid=7502 sec=SRM5 2015/04/28 14:22:00.107|Error |Quik |(1)Значения лучших цен в message: best ask=7504 best bid=7502 sec=SRM5 2015/04/28 14:22:00.401|Error |Quik |(1)Значения лучших цен в message: best ask=7504 best bid=7502 sec=SRM5 2015/04/28 14:22:00.402|Error |Quik |(1)Значения лучших цен в message: best ask=7504 best bid=7502 sec=SRM5 2015/04/28 14:22:00.685|Error |Quik |(1)Значения лучших цен в message: best ask=7504 best bid=7502 sec=SRM5 Ошибок нет.

Connector_ProcessMessage.cs функция private void ProcessQuotesMessage(Security security, QuoteChangeMessage message)


			var md = GetMarketDepth(security);
			var bask = message.GetBestAsk().Price;
			var bbid = message.GetBestBid().Price;
			if (bask <= bbid)
			{
				this.AddErrorLog("(0)Не верные значения лучших цен в message! best ask={0} best bid={1} sec={2}", bask, bbid, security.Id);
			}
			if (md != null && md.BestAsk != null && md.BestBid != null)
			{
				if (md.BestAsk.Price <= md.BestBid.Price ||
					bask <= bbid)
				{
					this.AddErrorLog("(1)Не верные значения лучших цен! best ask={0} best bid={1} sec={2} md ask={3} md bid={4}", bask, bbid, security.Id, md.BestAsk.Price, md.BestBid.Price);
				}
			}
......

Лог:

14:21:59.541|Error |QuikTrader|(0)Не верные значения лучших цен в message! best ask=7503 best bid=7538 sec=SRM5@FORTS 14:21:59.541|Error |QuikTrader|(1)Не верные значения лучших цен! best ask=7503 best bid=7538 sec=SRM5@FORTS md ask=7503 md bid=7538 14:22:00.121|Error |QuikTrader|(0)Не верные значения лучших цен в message! best ask=7504 best bid=7538 sec=SRM5@FORTS 14:22:00.121|Error |QuikTrader|(1)Не верные значения лучших цен! best ask=7504 best bid=7538 sec=SRM5@FORTS md ask=7503 md bid=7538 14:22:00.411|Error |QuikTrader|(0)Не верные значения лучших цен в message! best ask=7504 best bid=7538 sec=SRM5@FORTS 14:22:00.411|Error |QuikTrader|(1)Не верные значения лучших цен! best ask=7504 best bid=7538 sec=SRM5@FORTS md ask=7504 md bid=7538 14:22:00.695|Error |QuikTrader|(0)Не верные значения лучших цен в message! best ask=7504 best bid=7538 sec=SRM5@FORTS 14:22:00.695|Error |QuikTrader|(1)Не верные значения лучших цен! best ask=7504 best bid=7538 sec=SRM5@FORTS md ask=7504 md bid=7538 Ошибка есть. От куда вызывается ProcessQuotesMessage и что происходит с message между luaserver и коннектором пока не выяснил. Вызывается из private void MarketDataAdapterOnNewOutMessage(Message message), там message тоже с ошибкой. MarketDataAdapterOnNewOutMessage вызывается по подписке в _marketDataAdapter.NewOutMessage...

RomSunZ
RomSunZ Autor

Вообще загадка... luafixserver public override void SendOutMessage(Message message) получает message без ошибок, далее в ней вызывается base.SendOutMessage(message), который как я понимаю находится в messageadapter.cs и вызывает public virtual void SendOutMessage(Message message) для постановки message в очередь на обработку. А там уже ошибка есть... Код в messageadapter.cs:


		public virtual void SendOutMessage(Message message)
		{
			InitMessageLocalTime(message);

			if (message.Type == MessageTypes.QuoteChange)
			{
				var quoteMsg = (QuoteChangeMessage)message;

				if (quoteMsg.SecurityId.SecurityCode == "SRM5")
				{
					var bask = quoteMsg.GetBestAsk().Price;
					var bbid = quoteMsg.GetBestBid().Price;
					if (bask <= bbid)
					{
						SessionHolder.AddErrorLog("(2)Не верные значения лучших цен в messageAdapter! best ask={0} best bid={1} sec={2}", bask, bbid, quoteMsg.SecurityId.SecurityCode);
					}
					else
					{
						SessionHolder.AddErrorLog("(3)Значения лучших цен в messageAdapter: best ask={0} best bid={1} sec={2}", bask, bbid, quoteMsg.SecurityId.SecurityCode);
					}
				}
			}

			_outMessageProcessor.EnqueueMessage(message, this, false);
....
}

Лог луа-сервер:

2015/04/29 13:12:13.622|Error |Quik |(1)Значения лучших цен в message: best ask=7635 best bid=7633 sec=SRM5 2015/04/29 13:12:13.625|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7631 sec=SRM5 2015/04/29 13:12:13.628|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7631 sec=SRM5 2015/04/29 13:12:13.896|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:13.898|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:13.908|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:13.978|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:14.260|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7631 sec=SRM5 2015/04/29 13:12:14.265|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:14.745|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:15.025|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:15.305|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:16.110|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:16.509|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:17.670|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:17.767|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:18.045|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:18.050|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:18.325|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:18.606|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7631 sec=SRM5 2015/04/29 13:12:18.665|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7632 sec=SRM5 2015/04/29 13:12:18.947|Error |Quik |(1)Значения лучших цен в message: best ask=7634 best bid=7631 sec=SRM5 2015/04/29 13:12:18.956|Error |Quik |(1)Значения лучших цен в message: best ask=7632 best bid=7630 sec=SRM5

лог messageadapter

13:12:13.635|Error |Quik |(3)Значения лучших цен в messageAdapter: best ask=7635 best bid=7634 sec=SRM5 13:12:13.912|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5 13:12:14.278|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5 13:12:14.760|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5 13:12:15.038|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5 13:12:15.318|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5 13:12:16.122|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5 13:12:16.522|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5 13:12:17.686|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5 13:12:18.622|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5 13:12:18.960|Error |Quik |(2)Не верные значения лучших цен в messageAdapter! best ask=7634 best bid=7634 sec=SRM5

И еще похоже на то, что часть message теряется и не проходит в принципе судя по количеству вызовов в луа-сервере и в адаптере... Этот вариант без IncrementalDepthUpdates=false, позже попробую с ней. Подписка на несколько стаканов, просто чтобы было меньше каши в логах сделал выгрузку только по одному.

P.S. включение флага IncrementalDepthUpdates=false не помогает. P.P.S. Для luafixserver SessionHolder пишет лог в файл сервера StockSharp.QuikLua.log, а для messageadapter SessionHolder пишет лог в файл трейдера QuikTrader.txt. И как тогда поймать передачу данных от одного к другому? P.P.P.S. Михаил, может быть для лучшего быстродействия имеет смысл сделать отдельную очередь и отдельные обработчики для сообщений стакана и для прочих сообщений?