aspirant
|
Дата: 01.04.2011
Mikhail Sukhov Отредактировал. Кое что поменял. Например, идентификатор Плазы лучше засунуть по внутрь. Чтобы можно было без проблем его менять. Сейчас идентификатор составной из кода и класса для единообразия с остальными ITrader. В методе OnNewDataFromPosition нужно находить уже существующую бумагу, а известен только IsinId. Создавать еще один Dictionary, или все таки не использовать составной идентификатор. Кстати, такая же проблема будет встречаться в других потоках.
|
|
Спасибо:
|
|
|
|
|
aspirant
|
Дата: 01.04.2011
skuvv Сделайте плиз OnNewDataFromPosition, у меня не получается [confused] Пока сделал заглушку, чтобы код компилился. Есть вопрос к Михаилу + не знаю, что делать внутри лямбды Func<Portfolio, Security, Position> createPosition.
|
|
Спасибо:
|
|
|
|
|
skuvv
|
Дата: 02.04.2011
aspirant Mikhail Sukhov Отредактировал. Кое что поменял. Например, идентификатор Плазы лучше засунуть по внутрь. Чтобы можно было без проблем его менять. Сейчас идентификатор составной из кода и класса для единообразия с остальными ITrader. В методе OnNewDataFromPosition нужно находить уже существующую бумагу, а известен только IsinId. Создавать еще один Dictionary, или все таки не использовать составной идентификатор. Кстати, такая же проблема будет встречаться в других потоках. Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 02.04.2011
skuvv Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных
Сначала опишу проблему с идентификаторами Плазы. Если сейчас взять за основу IsinId и записывать его в Security.Id, то для таких инструментов не будет работать ни Гидра, ни тестирование на истории, так как S# использует единую систему именования Code@Class. Поэтому, мне кажется, что будет правильный вариант skuvv дождаться информации об инструменте, и только затем формировать производную информацию.
|
|
Спасибо:
|
|
|
|
|
aspirant
|
Дата: 02.04.2011
Mikhail Sukhov Мне нравится второй вариант. Тогда конструктор PlazaListener должен быть internal. Правлю?
|
|
Спасибо:
|
|
|
|
|
aspirant
|
Дата: 02.04.2011
Mikhail Sukhov skuvv Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных
S# использует единую систему именования Code@Class. Поэтому, мне кажется, что будет правильный вариант skuvv дождаться информации об инструменте, и только затем формировать производную информацию. Насчет поэтапности - сделаем. Вопрос остается с IsinId. Посмотри еще раз реализацию OnNewDataFromPosition. Из потока приходит запись с IsinId бумаги. Ее класс (opt или fut) я не знаю. Именно поэтому я написал: Кодbase.GetSecurity(CreateSecurityId(plazaId.ToString(), "InvalidClass")), // TODO Поменять Я могу найти бумагу, например, так: Кодvar sec = this.Securities.Where(x => x.ExtensionInfo["IsinId"].ToString() == "123456"); Но эту будет перебор списка, а не поиск по словарю. Или можно сделать по-другому?
|
|
Спасибо:
|
|
|
|
|
aspirant
|
Дата: 02.04.2011
Mikhail Sukhov И каждому члену PlazaTableRegistry внутри класса PlazaTrader будет соответствовать открытая переменная типа PlazaListener Добавил все переменные. Пока создаются со всеми колонками в методе CreateUserListeners(). Теперь: ты предлагаешь, чтобы при запуске PlazaTrader парсил файлы-схемы в заданной папке и создавал переменные PlazaListener с наборами колоннок, заданными пользователем. Вопрос: в каком месте пользователь будет задавать эти колоннки?
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 02.04.2011
aspirant Теперь: ты предлагаешь, чтобы при запуске PlazaTrader парсил файлы-схемы в заданной папке и создавал переменные PlazaListener с наборами колоннок, заданными пользователем. Не PlazaListener, а PlazaTable, который передается в PlazaListener. aspirant Вопрос: в каком месте пользователь будет задавать эти колоннки? У себя в коде. До Connect, я так понимаю (после подключение ведь нельзя уже править метаданные?)
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 02.04.2011
aspirant Но эту будет перебор списка, а не поиск по словарю. Или можно сделать по-другому?
Вопрос уже содержит ответ.[smile]
|
|
Спасибо:
|
|
|
|
|
aspirant
|
Дата: 02.04.2011
Mikhail Sukhov skuvv Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных
Поэтому, мне кажется, что будет правильный вариант skuvv дождаться информации об инструменте, и только затем формировать производную информацию. Залил исправление. Кстати, дожидаться, похоже, нужно не OnStreamDataEnd, а OnPlazaStreamStateChanged, где state == TDataStreamState.DS_STATE_ONLINE. Может быть это из-за того, что сегодня выходной, но по потокам FORTS_FUTCOMMON_REPL\common и FORTS_OPTCOMMON_REPL\common, OnStreamDataEnd я так и не дождался.
|
|
Спасибо:
|
|
|
|