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


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


Задача - написать отдельный сервис, который бы срабатывал в моменты 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) прошла информация по всем позициям?

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

Теги:


Спасибо:


OvcharenkoVI

Фотография
Дата: 08.04.2012
Ответить


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

Может не так понял конечно.
Спасибо:

ra81

Фотография
Дата: 09.04.2012
Ответить


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

igork

Фотография
Дата: 09.04.2012
Ответить


to OvcharenkoVI:

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

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

Спасибо.
Спасибо:

ra81

Фотография
Дата: 09.04.2012
Ответить


igork Перейти

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

Спасибо.

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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy