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


АПИ 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 - результат одинаковый. Закономерность появления "плохой" лучшей цены выявить не удалось. Может выскочить с утра, может к вечеру, а может и вообще несколько дней не появляться.

Теги:


Спасибо:




25 Ответов
Сергей Гаврилов

Фотография
Курсы
Дата: 23.03.2015
Ответить


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

RomSunZ

Фотография
Программист
Дата: 23.03.2015
Ответить


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

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

Фотография
Автор статей Программист Трейдер
Дата: 23.03.2015
Ответить


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

RomSunZ

Фотография
Программист
Дата: 23.03.2015
Ответить


Фикс будет?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.03.2015
Ответить


RomSunZ Перейти
Фикс будет?


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

RomSunZ

Фотография
Программист
Дата: 23.03.2015
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.03.2015
Ответить


Квик
Спасибо:

RomSunZ

Фотография
Программист
Дата: 24.03.2015
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.03.2015
Ответить


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

RomSunZ

Фотография
Программист
Дата: 25.03.2015
Ответить


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

Иван З.

Фотография
Курсы Автор статей Благотворитель
Дата: 25.03.2015
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.03.2015
Ответить


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


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

RomSunZ

Фотография
Программист
Дата: 25.03.2015
Ответить


Михаил Сухов Перейти
RomSunZ Перейти
С чем связана такая секретность?


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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.03.2015
Ответить


Вы же сами хотите интерактив.BigGrin
Спасибо:

RomSunZ

Фотография
Программист
Дата: 25.03.2015
Ответить


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

RomSunZ

Фотография
Программист
Дата: 30.03.2015
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 30.03.2015
Ответить


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


https://stocksharp.ru/posts/m/32966/
Спасибо:

merabn

Фотография
Дата: 30.03.2015
Ответить


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

......

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

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

Фотография
Программист
Дата: 23.04.2015
Ответить


Уважаемые разработчики, проверьте пожалуйста коннектор ЛУА, т.к. проблема скорее всего в коннекторе. Я подправил скрипт, который в приложении, он экспортирует лучшую цену в файл. Вот что у меня получилось при работе с 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

Как видно в примерно одинаковое время котировки коннектора идут с неправильными бидами/асками, а ЛУА выводит их без ошибок.
stakan.lua.txt 13 KB (0)
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.04.2015
Ответить


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


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

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

RomSunZ

Фотография
Программист
Дата: 24.04.2015
Ответить


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

Код

				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==, Func`3 #=qByjHri7T4qfIYiyMbykVjQ==, Action`1 #=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==, Func`3 #=qByjHri7T4qfIYiyMbykVjQ==, Action`1 #=qIoFIKYpJwlJ6XnjSBMM1Mg==)
13:54:23.464| |QuikTrader|StartExport

Автор топика
Спасибо:

RomSunZ

Фотография
Программист
Дата: 24.04.2015
Ответить


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

RomSunZ

Фотография
Программист
Дата: 28.04.2015
Ответить


А в ответ тишина...
Использую фикс 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

Ошибок нет.

2.
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...
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 28.04.2015
Ответить


RomSunZ Перейти

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


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

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

RomSunZ

Фотография
Программист
Дата: 29.04.2015
Ответить


Вообще загадка...
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. Михаил, может быть для лучшего быстродействия имеет смысл сделать отдельную очередь и отдельные обработчики для сообщений стакана и для прочих сообщений?
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy