← Atrás

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

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

¿Le resultó útil este tema?

Compartir tema

Comentarios (16)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

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

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