Комментарии и предложения

Комментарии и предложения
Atom
3/11/2011


Заметил пару нюансов по PlazaTrader:
1)
Code

_plazaStreamManager = new PlazaStreamManager(_plazaConnectionPool, TRequestType.RT_COMBINED_DYNAMIC, 1000);

Почему рекваест тайп фиксированный? надо конкретно задавать, например у меня так было:
Quote:

"FORTS_FUTAGGR20_REPL" - RT_REMOTE_ONLINE
"FORTS_FUTTRADE_REPL" - RT_REMOTE_ONLINE
"FORTS_FUTINFO_REPL" - RT_COMBINED_DYNAMIC
"FORTS_FUTCOMMON_REPL" - RT_REMOTE_ONLINE
"FORTS_POS_REPL" - RT_COMBINED_DYNAMIC
"FORTS_PART_REPL" - RT_COMBINED_DYNAMIC
"FORTS_VM_REPL" - RT_COMBINED_DYNAMIC

Допустим если FORTS_FUTCOMMON_REPL задать в RT_COMBINED_DYNAMIC, то при реконнекте будет перекачиваться весь поток заново.
+Revision тоже надо указывать в некоторых потоках.
2) в PlazaStreamManager void Run()
Не обрабатывает состояния типа DS_STATE_ERROR или DS_STATE_CLOSE, те в случае чего будет затык и поток будет висеть закрытым или с ошибкой.
Я для себя брал реализацию с примера(могу выложить если что)
PS У меня несколько сместились приоритеты - придется задержаться на квике, но постораюсь не пропадать.

Tags:


Thanks:


<< < 3 4 5 6  >
aspirant

Avatar
Date: 4/1/2011
Reply


Mikhail Sukhov Go to
Отредактировал. Кое что поменял. Например, идентификатор Плазы лучше засунуть по внутрь. Чтобы можно было без проблем его менять. Сейчас идентификатор составной из кода и класса для единообразия с остальными ITrader.


В методе OnNewDataFromPosition нужно находить уже существующую бумагу, а известен только IsinId. Создавать еще один Dictionary, или все таки не использовать составной идентификатор. Кстати, такая же проблема будет встречаться в других потоках.
Thanks:

aspirant

Avatar
Date: 4/1/2011
Reply


skuvv Go to
Сделайте плиз OnNewDataFromPosition, у меня не получается [confused]


Пока сделал заглушку, чтобы код компилился. Есть вопрос к Михаилу + не знаю, что делать внутри лямбды Func<Portfolio, Security, Position> createPosition.
Thanks:

skuvv

Avatar
Date: 4/2/2011
Reply


aspirant Go to
Mikhail Sukhov Go to
Отредактировал. Кое что поменял. Например, идентификатор Плазы лучше засунуть по внутрь. Чтобы можно было без проблем его менять. Сейчас идентификатор составной из кода и класса для единообразия с остальными ITrader.


В методе OnNewDataFromPosition нужно находить уже существующую бумагу, а известен только IsinId. Создавать еще один Dictionary, или все таки не использовать составной идентификатор. Кстати, такая же проблема будет встречаться в других потоках.

Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных
Thanks:

Mikhail Sukhov

Avatar
Date: 4/2/2011
Reply


skuvv Go to

Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных


Сначала опишу проблему с идентификаторами Плазы. Если сейчас взять за основу IsinId и записывать его в Security.Id, то для таких инструментов не будет работать ни Гидра, ни тестирование на истории, так как S# использует единую систему именования Code@Class. Поэтому, мне кажется, что будет правильный вариант skuvv дождаться информации об инструменте, и только затем формировать производную информацию.
Thanks:

aspirant

Avatar
Date: 4/2/2011
Reply


Mikhail Sukhov Go to
Мне нравится второй вариант.


Тогда конструктор PlazaListener должен быть internal. Правлю?
Thanks:

aspirant

Avatar
Date: 4/2/2011
Reply


Mikhail Sukhov Go to
skuvv Go to

Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных


S# использует единую систему именования Code@Class. Поэтому, мне кажется, что будет правильный вариант skuvv дождаться информации об инструменте, и только затем формировать производную информацию.


Насчет поэтапности - сделаем. Вопрос остается с IsinId. Посмотри еще раз реализацию OnNewDataFromPosition. Из потока приходит запись с IsinId бумаги. Ее класс (opt или fut) я не знаю. Именно поэтому я написал:
Code
base.GetSecurity(CreateSecurityId(plazaId.ToString(), "InvalidClass")), // TODO Поменять


Я могу найти бумагу, например, так:
Code
var sec = this.Securities.Where(x => x.ExtensionInfo["IsinId"].ToString() == "123456");


Но эту будет перебор списка, а не поиск по словарю. Или можно сделать по-другому?

Thanks:

aspirant

Avatar
Date: 4/2/2011
Reply


Mikhail Sukhov Go to
И каждому члену PlazaTableRegistry внутри класса PlazaTrader будет соответствовать открытая переменная типа PlazaListener


Добавил все переменные. Пока создаются со всеми колонками в методе CreateUserListeners().

Теперь: ты предлагаешь, чтобы при запуске PlazaTrader парсил файлы-схемы в заданной папке и создавал переменные PlazaListener с наборами колоннок, заданными пользователем. Вопрос: в каком месте пользователь будет задавать эти колоннки?
Thanks:

Mikhail Sukhov

Avatar
Date: 4/2/2011
Reply


aspirant Go to
Теперь: ты предлагаешь, чтобы при запуске PlazaTrader парсил файлы-схемы в заданной папке и создавал переменные PlazaListener с наборами колоннок, заданными пользователем.


Не PlazaListener, а PlazaTable, который передается в PlazaListener.

aspirant Go to
Вопрос: в каком месте пользователь будет задавать эти колоннки?


У себя в коде. До Connect, я так понимаю (после подключение ведь нельзя уже править метаданные?)
Thanks:

Mikhail Sukhov

Avatar
Date: 4/2/2011
Reply


aspirant Go to

Но эту будет перебор списка, а не поиск по словарю. Или можно сделать по-другому?


Вопрос уже содержит ответ.[smile]
Thanks:

aspirant

Avatar
Date: 4/2/2011
Reply


Mikhail Sukhov Go to
skuvv Go to

Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных


Поэтому, мне кажется, что будет правильный вариант skuvv дождаться информации об инструменте, и только затем формировать производную информацию.


Залил исправление. Кстати, дожидаться, похоже, нужно не OnStreamDataEnd, а OnPlazaStreamStateChanged, где state == TDataStreamState.DS_STATE_ONLINE. Может быть это из-за того, что сегодня выходной, но по потокам FORTS_FUTCOMMON_REPL\common и FORTS_OPTCOMMON_REPL\common, OnStreamDataEnd я так и не дождался.
Thanks:
<< < 3 4 5 6  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy