Список задач 2

Список задач 2
Atom
2/21/2011
aspirant


По просьбе Михаила, хочу собрать воедино весь более-менее подробный список задач. Пишите в эту тему, у кого что есть? Если есть задачи, которыми можно поделиться указывайте отдельно. Спасибо.

Tags:


Thanks:


< 1 2 3  >
Mikhail Sukhov

Avatar
Date: 3/8/2011
Reply


aspirant

Два момента:
  1. После редактирования первых конфигов нужно обязательно перезагружать роутер.
  2. В теории создавать первые конфиги на лету тоже можно. Но я бы не стал: путь к client_router.ini указывается в коммандной строке сервиса Windows роутера (и прописывается в системном реестре). Придется колдовать и с этим.



А зачем client_router.ini вообще редактировать? С ini файлами по схемам понятно. А вот зачем роутер.

Так, понял почему вылезает AcessViolationException. В папке нужен файл P2ClientGate.ini, который не создается на лету (а должен, по идее). Подсунул этот файл, упало дальше, что нет p2fortsgate_messages.ini (тоже нужно на лету создавать). Вот как то так. Хотел практическое направление - это как раз оно.[smile]
Thanks:

aspirant

Avatar
Date: 3/8/2011
Reply


Mikhail Sukhov
А зачем client_router.ini вообще редактировать?


Ты спрашивал про логин и пароль. Он указываются в этом файле (+ адрес сервера Плазы и номер порта). В этом случае в коде ничего не нужно указывать. И, да, ты прав, его лучше не трогать во время исполнения программы.
Thanks:

Mikhail Sukhov

Avatar
Date: 3/8/2011
Reply


aspirant
Mikhail Sukhov
А зачем client_router.ini вообще редактировать?


Ты спрашивал про логин и пароль. Он указываются в этом файле (+ адрес сервера Плазы и номер порта). В этом случае в коде ничего не нужно указывать. И, да, ты прав, его лучше не трогать во время исполнения программы.


А вообще возможно напрямую обращаться к серверу Плазы минуя этот роутер?
Thanks:

aspirant

Avatar
Date: 3/9/2011
Reply


Mikhail Sukhov
А вообще возможно напрямую обращаться к серверу Плазы минуя этот роутер?

Я так понял, что нет (см. п. 5.1. Топология сети - стр. 7 P2ClientGate.doc).

Кстати, есть ощущение, что, если нужно распараллелить получение данных, через один роутер это не получится. Я добавил PlazaConnectionPool, который создает отдельный CP2ConnectionClass для каждого стрима. Вчера тестировал: данные с разных потоков все равно приходят последовательно[sad]
Thanks:

aspirant

Avatar
Date: 3/9/2011
Reply


Mikhail Sukhov
А вообще возможно напрямую обращаться к серверу Плазы минуя этот роутер?


Сегодня весь день пытался получить список инструментов из таблицы opt_vcb. Путем тыкания и активного общения с поддержкой РТС только что наконец получилось. Почерпнул для себя две важные вещи, которыми хочу поделиться:
  1. Quote:
    дело не в Appname'е. А в том, что в client_router.ini стоит одинаковый адрес в параметрах default и direct. Для тестового полигона direct можно вообще закомментировать.

    От себя добавлю: комментировать не можно, а нужно. Иначе из роутера через раз будут валиться ошибки.

  2. Номер тестового порта 3001 нужно прописать не только в client_router.ini, но и в volatvmsrv\local_inter.ini и volatvmsrv\forts_volatvm.ini. Здесь, если этого не сделать, программа будет подключаться, но по некоторым потокам данные не будут приходить.
Thanks:

aspirant

Avatar
Date: 3/22/2011
Reply


Mikhail Sukhov
Но данные из потока не так интересны. Их нужно перегнать в объект Security.

Можете посмотреть метод PlazaTrader.OnNewDataFromOptionSessionContents()? Не совсем уверен насчет правильности мапинга данных из потока в свойства Security[confused]
Thanks:

Mikhail Sukhov

Avatar
Date: 3/23/2011
Reply


aspirant
Mikhail Sukhov
Но данные из потока не так интересны. Их нужно перегнать в объект Security.

Можете посмотреть метод PlazaTrader.OnNewDataFromOptionSessionContents()? Не совсем уверен насчет правильности мапинга данных из потока в свойства Security[confused]


Все отлично. Ошибку заметил в другом месте.[smile] Ты в StartExport подписываешься на событие? А отписываешься где? Утечка памяти... Ладно, это потом. Мне вообще кажется не стоит каждый раз создавать PlazaListener. Но я пока не вижу всей картинки с запуском пользователей доп потоков. Это тебе виднее.
Thanks:

aspirant

Avatar
Date: 3/24/2011
Reply


Mikhail Sukhov
Мне вообще кажется не стоит каждый раз создавать PlazaListener.


Да, ты прав. Это должна быть переменная внутри класса. Начал править и тут несколько вопросов:

  1. Чтобы быть последовательным, что ты делаешь в QuickTrader'е, если клиент при запущенных стандартных потоках повторно вызывает StartExport? Выбрасываешь исключение? Перезапускаешь стандартные потоки? Не делаешь ничего?
  2. В качестве уникального ID для инструментов используем isin или isin_id? Плаза в своих потоках использует isin_id (см., например, схемы таблиц opt_exp_orders, opt_rejected_orders).
  3. В ExtensionInfo запихиваем все, или только то, что не получается замапить? В качестве ключей используем названия колонок Плазы или названия переменных наших классов метаданных?



Mikhail Sukhov
А отписываешься где? Утечка памяти...

Утечка памяти была бы, если optionListener (раздатчик событий) жил бы дольше, чем PlazaTrader (подписчик на события) (см. здесь). Почему тогда в C# есть анонимные event handlers?
Thanks:

Mikhail Sukhov

Avatar
Date: 3/25/2011
Reply


aspirant
Mikhail Sukhov
Мне вообще кажется не стоит каждый раз создавать PlazaListener.


Да, ты прав. Это должна быть переменная внутри класса. Начал править и тут несколько вопросов:

  1. Чтобы быть последовательным, что ты делаешь в QuickTrader'е, если клиент при запущенных стандартных потоках повторно вызывает StartExport? Выбрасываешь исключение? Перезапускаешь стандартные потоки? Не делаешь ничего?
  2. В качестве уникального ID для инструментов используем isin или isin_id? Плаза в своих потоках использует isin_id (см., например, схемы таблиц opt_exp_orders, opt_rejected_orders).
  3. В ExtensionInfo запихиваем все, или только то, что не получается замапить? В качестве ключей используем названия колонок Плазы или названия переменных наших классов метаданных?



1. Перезапуск.
2. Вроде бы нет колонки isin. Или я не понял вопроса.
3. Все, что не входит в свойства такие как ExpiryDate, MinStepPrice и т.д. Ни то, ни другое - объекты PlazaColumn.

Mikhail Sukhov
А отписываешься где? Утечка памяти...

Утечка памяти была бы, если optionListener (раздатчик событий) жил бы дольше, чем PlazaTrader (подписчик на события) (см. здесь). Почему тогда в C# есть анонимные event handlers?[/quote]

Потому что это порочное решение. Я сам их пользую, но только из-за удобства. В системных классах я никогда не подписываюсь на событие анонимным методом или лямбдой. Последние, кстати, придумали для Линка, тоесть когда мы не в цепочки вставляем наш обработчик, а просто передаем делегат как аргумент в некий метод.
Thanks:

aspirant

Avatar
Date: 3/25/2011
Reply


Mikhail Sukhov
2. Вроде бы нет колонки isin. Или я не понял вопроса.

В классе PlazaOptionSessionContentsColumns есть переменные Isin (Символьный код инструмента) и IsinId (Уникальный числовой идентификатор инструмента). Сейчас я в качестве ключа использую Isin:
Code
private void OnNewDataFromFuturesSessionContents(PlazaRecord record)
{
    var metadata = PlazaColumnRegistry.FuturesSessionContents;

    base.ProcessEvents(() =>
    {
        base.GetSecurity(record[metadata.Isin].ToString(), sec =>
        {
            // мапим...
        });
    });
}


Можно использовать IsinId?
Code
base.GetSecurity(record[metadata.IsinId].ToString(), sec =>

Или символьное представление удобнее, где-то используется и т.д.?

Mikhail Sukhov
Все, что не входит в свойства такие как ExpiryDate, MinStepPrice и т.д.

Ключи называем FuturesIsinId или fut_isin_id, IsEuropean или europe и т.д.?

Mikhail Sukhov
Я сам их пользую, но только из-за удобства.

Сам все сказал: так легче. Если контроль за такими вещами, как использование памяти, критичен, тогда нужно использовать C++.
Thanks:
< 1 2 3  >

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

loading
clippy