Банальная задача, но непонятно как решать.

Банальная задача, но непонятно как решать.
Atom
4/6/2012
igork


Задача - написать отдельный сервис, который бы срабатывал в моменты 18:45:20 и 23:45:20, снимал бы статус всех счетов (балансы, открытые позиции) и отключался. В связи с асинхронной моделью задача кажется некрасиво реализуемой.

Что делаем:
1. Подписываемся на .NewPortfolios += portfolios => .... Trader.RegisterPortfolio() здесь.
Подписываемся на .NewPositions += positions => ... (хотя наверное этого можно и не делать).
2. Запускаем StartExport
3. Тупо в цикле делаем Thread.Sleep(1000) 20-30 раз, за это время приходят события по портфелям и по позициям. Подозреваю, что в моменты клиринга и ночью этого времени достаточно, но если времени не хватит - как понять, что вся инфомация пришла? Использовать вариант waitHandle нереально, так как кол-во портфелей может поменяться (в теории) и позиции точно каждый день разные, и сколько их - заранее неизвестно.
4. После паузы делаем
Trader.portfolios.ForEach(снять данные портфеля)
Trader.positions.ForEach(снять позиции по портфелям).

5. Далее проще - регистрируем акции/фюьчи из портфеля, смотрим их котировки/ГО и все считаем.
6. Отключаемся.

Господа авторы, подскажите пожалуйста правильный путь. Есть ли какие-то варианты того, как убедиться в том, что
(1) пришла / актуализировалась информация по всем портфелям
(2) прошла информация по всем позициям?

Заранее благодарю.

Tags:


Thanks:


OvcharenkoVI

Avatar
Date: 4/8/2012
Reply


Не понятно зачем 3 пункт. Зачем подписываться на NewProtfilios и New Positions. Можно сделать таймер, например, при Trader.MarketTime = 18:45 запросить Trader.Positions. Дальше Trader.Disconnect();, а таймер Stop();

Может не так понял конечно.
Thanks:

ra81

Avatar
Date: 4/9/2012
Reply


Во первых не мешало бы казать что за платформа используется, то есть терминал. Это роляет как говорится. Во вторых почему бы не запускать экспорт за 5 минут до нужного времени, считывать данные тогда когда нужно и отключаться? Возможности знать точно что пришли все данные нет :). Для этого надо знать какие данные должны прийти, а коннектор этого в общем не знает.
Thanks:

igork

Avatar
Date: 4/9/2012
Reply


to OvcharenkoVI:

я тоже так сделал сначала, но получил Positions и Securities, в которых все поля нулевые (MarginBy, MarginSell, BestAskPrice и т.д. и т.д.). Без этих данных невозможно посчитать ГО, а также (предполагаемую) ликвидационную стоимость. Вот поэтому пришлось подписываться на все эти события, что очень удивило. Возможно, проблема крылась в том, что я гонял проект только в отладочном режиме VS2010. До тех пор, пока не подписался на обновление информации по позиция и инструметам, не смог получить актуальную информацию по ним.

to ra81: не очень понял, при чем тут терминал. Какой бы не использовался (SmartTrade), данные нужно брать все равно с сервера и не через терминальное API. А вот Ваша идея нравится на счет того, чтобы просыпаться на пару минут раньше и ждать назначенного времени, чтобы сразу снять последнюю информацию.

Спасибо.
Thanks:

ra81

Avatar
Date: 4/9/2012
Reply


igork

to ra81: не очень понял, при чем тут терминал. Какой бы не использовался (SmartTrade), данные нужно брать все равно с сервера и не через терминальное API. А вот Ваша идея нравится на счет того, чтобы просыпаться на пару минут раньше и ждать назначенного времени, чтобы сразу снять последнюю информацию.

Спасибо.

Суть в том что разные терминалы по разному получают информацию и тут могут быть ньюансы :).
Thanks:


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

loading
clippy