skuvv
|
Date: 3/18/2011
Пофиксил
_dataStream.Close(); не нужно в OnStreamLifeNumChanged
|
|
|
|
Thanks:
|
|
|
|
|
|
skuvv
|
Date: 3/18/2011
Проверил и пофиксил все таблицы(метаданные) начинающиеся на Futures. Можно принимать.
|
|
|
|
Thanks:
|
|
|
|
|
|
skuvv
|
Date: 3/25/2011
События OnNewDataFromFuturesSessionContents и OnNewDataFromOptionSessionContents
иногда не заполняют полностью Security - только создается new Security по id.
Возможно метод GetSecurity не thread safe
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 3/25/2011
skuvv:
События OnNewDataFromFuturesSessionContents и OnNewDataFromOptionSessionContents
иногда не заполняют полностью Security - только создается new Security по id.
Возможно метод GetSecurity не thread safe
Больше вероятность, что при инициализации происходит ошибка. А GetSecurity сначала добавляется Security, и только уже потом вызывается делегат на заполнение полей. Вот там видимо и падает. Подозреваю, что не все понял проводятся. Например:
sec.MaxPrice = record[metadata.LimitUp].To<double>();
может упасть, если неправильный тип данных (например, РТС прислала пустое значение). Посмотрите на ProcessDataError.
|
|
|
|
Thanks:
|
|
|
|
|
|
aspirant
|
Date: 3/25/2011
Mikhail Sukhov:
может упасть, если неправильный тип данных (например, РТС прислала пустое значение)
Если будет неправильный тип данных, внутри обработчиков OnNewDataFromFuturesSessionContents и OnNewDataFromOptionSessionContents произойдет исключение. Я сначала пытался конвертировать данные из потока в DateTime через extenstion-метод To<DateTime>(). У меня срабатывало исключение. Потому уже воспользовался любезно кем-то добавленным PlazaRecord.GetAsDateTime().
Еще: надо было мне конечно предупредить, что я еще не дописал методы StartExport и StopExport. Сейчас, когда начал заливать PlazaTrader, увидел обновления skuvv'a. Вроде все вместе смержил.
Вопросы: все стандартные потоки добавлены?
Предложенная skuvv'ом фильтрация подойдет? Я вроде видел, что у PlazaTrader есть свой стандартный интерфейс влкючения/выключения фильтрации (RegisterSecurity/UnregisterSecurity)?
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 3/26/2011
aspirant:
Предложенная skuvv'ом фильтрация подойдет? Я вроде видел, что у PlazaTrader есть свой стандартный интерфейс влкючения/выключения фильтрации (RegisterSecurity/UnregisterSecurity)?
Мне не нравиться:
- Делается тоже самое, что и через RegisterXXX, но требует изменение внешнего контракта.
- Я думал фильтр передается внутрь стрима. Делать фильтр в самой PlazaTrader как-то не очень.
- Операция Exists очень медленная (фактически там полный перебор). На потоке тиков и стаканов все помрет.
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 3/26/2011
|
|
|
|
|
aspirant:
Я сначала пытался конвертировать данные из потока в DateTime через extenstion-метод To(). У меня срабатывало исключение. Потому уже воспользовался любезно кем-то добавленным PlazaRecord.GetAsDateTime().
Все методы по переводу в и из плазовский формат нужно переносить в специальный класс - PlazaFormatter.
Работа с PlazaRecord требует рефакторинг (прямо таки кричит):
ODE0� Это кто так учил писать?[smile] Нужно заменить на Dictionary.
PlazaColumnList.Names не нужно ни в коем случае. Мы не работает со строчками. Мы работает с колонками - PlazaColumn. Соответственно, ключом в _data должен быть не string а PlazaColumn.
Индексаторы у PlazaRecord не нужны. Лучше сделать в нем метод вида T Get(PlazaColumn), который бы конвертировал значение и при возникновении ошибки, перехватывал бы ее и выбрасывал свою с описанием того, что за колонка, что пришло на вход. Так пользователю будет проще понять ошибку (да и нам).
[*]Опять возвращаемся к метаданным. Не нужно передавать в PlazaListener PlazaColumns. PlazaColumns - это абстрактный базовый класс для всех колонок. Для ограничения колонок необходимым нам множеством полей нужно использовать PlazaTable.Columns. Еще раз. PlazaTable - это как раз те настройки, которые описываю наши схемы на клиенте. PlazaColumns - базовый вспомогательный класс. PlazaColumnRegistry - коллекция всех возможных колонок. PlazaTableRegistry - коллекция всех возможных таблиц.
|
|
|
|
Thanks:
|
|
|
|
|
|
skuvv
|
Date: 3/26/2011
aspirant:
Вопросы: все стандартные потоки добавлены?
Предложенная skuvv'ом фильтрация подойдет? Я вроде видел, что у PlazaTrader есть свой стандартный интерфейс влкючения/выключения фильтрации (RegisterSecurity/UnregisterSecurity)?
Это наброски, понятно что надо все напильником доделывать.
К примеру я сравнил проект со своей старой программой plaza2, данные в текущий s# проект поступают медленнее на 6-10мс(время снимал с OnNewSecurityChanged к примеру). А если включить реал плазу и стаканы глубиной 50, проект может не взлететь вообще )
|
|
|
|
Thanks:
|
|
|
|
|
|
aspirant
|
Date: 3/26/2011
|
|
|
|
|
Mikhail Sukhov:
Все методы по переводу в и из плазовский формат нужно переносить в специальный класс - PlazaFormatter.
Добавил для плазовской даты. Так подойдет:
sec.ExpiryDate = record[metadata.DateEndTrade].ToString().FromPlazaString<DateTime>();
// или сделать:
sec.ExpiryDate = record[metadata.DateEndTrade].FromPlazaType<DateTime>();
Mikhail Sukhov:
ODE1� Это кто так учил писать?[smile] Нужно заменить на Dictionary.
PlazaColumnList.Names не нужно ни в коем случае. Мы не работает со строчками. Мы работает с колонками - PlazaColumn. Соответственно, ключом в _data должен быть не string а PlazaColumn.
Знаю, что кричит. Но когда ключом был string, нужно было использовать такого монстра, чтобы работал индексатор по номеру колонки. Dictionary отсортировал бы свои элементы по алфавиту (ключи ведь string).
Сейчас я переделал на Dictionary с ключом PlazaColumn. Крик ушел[smile]
Mikhail Sukhov:
Индексаторы у PlazaRecord не нужны. Лучше сделать в нем метод вида T Get<T>(PlazaColumn)
Добавил. Посмотри, пожалуйста. Кстати, я все-таки оставил индексатор по PlazaColumn.
Mikhail Sukhov:
Опять возвращаемся к метаданным...
Я изменил класс PlazaListener. Посмотри, пожалуйста, нужны твои комментарии + желательно кусок псевдокода - твое видение, как пользователь создает таблицу с набором колонок для передачи ее в PlazaListener.
|
|
|
|
Thanks:
|
|
|
|
|
|
aspirant
|
Date: 3/26/2011
skuvv:
К примеру я сравнил проект со своей старой программой plaza2, данные в текущий s# проект поступают медленнее на 6-10мс(время снимал с OnNewSecurityChanged к примеру).
Получается, ты делал свою реализацию PlazaTrader?
|
|
|
|
Thanks:
|
|
|
|
|