← Zurück

FullOrderLog не работает с RevisionManager?

Обнаружил, что в примере SampleGUI (версия 4.1.3) в RevisionManager не добавлена таблица TableRegistry.AnonymousOrdersLog, очень странно, учитывая какой обьем данных идет через эту таблицу. Сам добавил, не работает, пример вылетает со странными ошибками. Пробовал в своего робота запилить, та же история.

War dieses Thema hilfreich?

Thema teilen

Kommentare (16)

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

Alexander
Alexander

Может стоит ошибки указать с каким-то логом? А то догадаться что за странные ошибки повылетали у вас не удалось.

FiNick
FiNick Autor

SampleGUI, файл MainWindow.xaml.cs в строке 159 (+-1): Trader.ProcessDataError += error => this.GuiAsync(() => MessageBox.Show(this, error.ToString(), "Ошибка обработки данных")); на этой строке вылетает ошибка "An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll" А иногда тупо падает svchost.

Предлагаю в примере в код:

if (IsOrderLog.IsChecked == true)
	{
		Trader.Tables.Add(Trader.TableRegistry.AnonymousOrdersLog);
		Trader.CreateDepthFromOrdersLog = true;
	}

добавить строку revisionManager.Tables.Add(Trader.TableRegistry.AnonymousOrdersLog); и посмотреть что получится.

Mikhail Sukhov
Mikhail Sukhov

FiNick: добавить строку revisionManager.Tables.Add(Trader.TableRegistry.AnonymousOrdersLog); и посмотреть что получится.

У меня работает.

FiNick
FiNick Autor

Mikhail Sukhov:

FiNick: добавить строку revisionManager.Tables.Add(Trader.TableRegistry.AnonymousOrdersLog); и посмотреть что получится.

У меня работает.

Очень странно. Тогда залей этот вариант SampleGUI на codeplex, я скачаю и еще раз попробую запустить

Mikhail Sukhov
Mikhail Sukhov

FiNick:

Mikhail Sukhov:

FiNick: добавить строку revisionManager.Tables.Add(Trader.TableRegistry.AnonymousOrdersLog); и посмотреть что получится.

У меня работает.

Очень странно. Тогда залей этот вариант SampleGUI на codeplex, я скачаю и еще раз попробую запустить

Это то, что залито. Добавил всего одну строчку.

FiNick
FiNick Autor

Короче, провожу такой эксперимент: Добавляю AnonymousOrdersLog в revisionManager, удаляю файлы ревизий, запускаю, все работает нормально, стакан строится, появляются новые файлы ревизий. Отключаюсь, перезапускаю приложение. Ставлю брейкпоинт на событие Trader.ProcessDataError, подключаюсь, сыпется куча ошибок типа:

Котировка для заданной цены не была найдена. Parameter name: price Actual value was 33157.

а также

Объем котировки Бид 15564 1 меньше требуемого объёма для удаления. Parameter name: volume Actual value was 3.

все это в

at StockSharp.BusinessEntities.MarketDepth.Remove(OrderDirections direction, Decimal price, Decimal volume, DateTime lastChangeTime) at StockSharp.Algo.OrderLogMarketDepthBuilder.Update(OrderLogItem item) at StockSharp.Algo.OrderLogHelper.Update(MarketDepth depth, OrderLogItem item)

UPD. Скачал с codeplex последнюю версию stocksharp-18932, проверил примеры с dev и trunk, та же фигня. Такое ощущение, что прога пытается смёржить ордерлог получаемый по сохраненным ревизиям со старыми стаканами (которые у меня не сохраняются?) и потому возникают ошибки.

FiNick
FiNick Autor

Есть идеи?

Может все таки зальем revisionManager.Tables.Add(Trader.TableRegistry.AnonymousOrdersLog); в релизный и trunk пример SampleGUI? Тогда больше народу смогут сказать работает или нет. Я вот из-за этой проблемы тупо не могу использовать OrderLog (за который 4тыщи в месяц плачу), потому что если в середине дня у меня робот отвалится, то при перезапуске он будет стартовать целый час, пока весь ордер лог с прошлой вечерки подгрузит=( Более того, из-за подключенного ордерлога мне обычные стаканы не шлются, я теперь вообще без стаканов вынужден играть

Mikhail Sukhov
Mikhail Sukhov

FiNick: Есть идеи?

Неправильно понимаете, что такое ОЛ и как из него получаются стаканы.

FiNick
FiNick Autor

Mikhail Sukhov:

FiNick: Есть идеи?

Неправильно понимаете, что такое ОЛ и как из него получаются стаканы.

Да вроде понимаю неплохо. Ордерлог - последовательность постановок/снятий/исполнений ордеров. Эти данные агрегируются в стаканы. Стакан в текущий момент времени может зависеть от ордерлог итемов пришедших еще на прошлой вечерке, потому "нельзя просто так взять и"(с) запихать AnonymousOrdersLog в ревижнменеджер. Нужно как-то запоминать состояние стакана вместе с ревизией, чтобы потом можно было стартовать с последней ревизии и все корректно мёржилось. И, я так понял, это все реализовано, раз у вас все хорошо работает. Собственно, вопрос номер раз: почему у меня не работает в точности та же программа, что у вас работает? Вопрос номер два: у меня ли одного не работает, может просто никто больше не проверил? Отсюда просьба залить изменения в пример, чтобы я и другие смогли проверить.

Garic
Garic

FiNick: Нужно как-то запоминать состояние стакана вместе с ревизией, чтобы потом можно было стартовать с последней ревизии и все корректно мёржилось. И, я так понял, это все реализовано, раз у вас все хорошо работает.

Не нужно ничего запоминать, оно транслируется раз в 2 минуты. Дока по плазе - "Особенности использования шлюза" -> восстановление и поздний вход.

Не уверен, но помоему такой поздний старт со снапшота не реализован в S#.

Mikhail Sukhov
Mikhail Sukhov

Garic: Не уверен, но помоему такой поздний старт со снапшота не реализован в S#.

Не сделано. Пока решаем более приоритетные задачи. Но в планах стоит.

FiNick
FiNick Autor

То есть сейчас быстро стартовать с подключенным ордер логом нельзя? У меня вот "медленный" старт под конец дня около 1-1.5 часа занимает, при чем GUI подвисает на все это время, это ппц

Alexander
Alexander

FiNick: при чем GUI подвисает на все это время, это ппц

Запрограммируйте так, чтоб не подвисал. Или вы принципиально все расчёты делаете в гуёвом треде?

FiNick
FiNick Autor

Запрограммируйте так, чтоб не подвисал. Или вы принципиально все расчёты делаете в гуёвом треде? Я пока так не умею=) Я могу запустить одну функцию в другом потоке, но сделать так чтобы сам обьект plazaTrader и все обработчики его событий работали автоматически в другом потоке не могу. Но проблема не в этом. Проблема в том, что стакан придет в актуальное состояние только через час-полтора, пока по сети загрузятся все данные ордерлога, а это пару гигабайт.

Mikhail Sukhov
Mikhail Sukhov

FiNick: Я пока так не умею=) Я могу запустить одну функцию в другом потоке, но сделать так чтобы сам обьект plazaTrader и все обработчики его событий работали автоматически в другом потоке не могу. Но проблема не в этом. Проблема в том, что стакан придет в актуальное состояние только через час-полтора, пока по сети загрузятся все данные ордерлога, а это пару гигабайт.

  1. В ГУИ у вас дружбы нет, и вы его неправильно пишите без относительно ОЛ это или нет.
  2. Про снэпшот в ОЛ я писал, что есть такая задача. Стоит. Но так как людей, кто им пользуется мало, то не самая первоочередная задача.
FiNick
FiNick Autor

Ок, будем ждать)