Событие наличия активных заявок


Событие наличия активных заявок
Atom
2/23/2013


Как сделать такое событие, которое бы мониторило ордера и передавала в обработчик коллекцию активных заявок? Ну типа trader.ActiveOrders += actords => и т.д.
Просто сложность для меня пока в том, что данные действия должны скорее всего выполняться асинхронно, а в многопоточном программировании я пока не очень, да и инфы с примерами использования async/await пока маловато. Там внутри, наверное, должен быть зацикленный или рекурсивный метод?

И заодно подкину ещё пара вопросов:
1) Почему свойство Quote.Volume возвращает тип decimal, а не что-нибудь целочисленное?
2) Можно ли вернуть позу, отфильтрованную по фирме, типа: trader.GetPosition(account, sec, "SPBFUT") ?

Tags:


Thanks:


1 2 3  >
Творог

Avatar
Date: 2/24/2013
Reply


Продолжаю поток новичковских вопросов [rolleyes] Что такое Правило и Токен?
Например, создаю переменную rule. Как я её могу практически использовать во благо?

Code
MarketRule<Security, MarketDepth> rule = MarketRuleHelper.WhenMarketDepthChanged(sec);
Thanks:

Moadip

Avatar
Date: 2/24/2013
Reply


Quote:
Как сделать такое событие, которое бы мониторило ордера и передавала в обработчик коллекцию активных заявок? Ну типа trader.ActiveOrders += actords => и т.д.

Класс, в нем таймер. По таймеру проверяется наличие активных заявок и вызывается событие.
Два вопроса.
Зачем это надо и как часто должен будет срабатывать таймер.

OrdersChanged - может это подойдет.

Quote:
Что такое Правило и Токен?

Справку читать не пробовали? Событийная модель.
Thanks:

Творог

Avatar
Date: 2/24/2013
Reply


Moadip Go to
Quote:
Как сделать такое событие, которое бы мониторило ордера и передавала в обработчик коллекцию активных заявок? Ну типа trader.ActiveOrders += actords => и т.д.

Класс, в нем таймер. По таймеру проверяется наличие активных заявок и вызывается событие.
Два вопроса.
Зачем это надо и как часто должен будет срабатывать таймер.

OrdersChanged - может это подойдет.

Quote:
Что такое Правило и Токен?

Справку читать не пробовали? Событийная модель.


Пока думаю над оптимальным алгоритмом. Получается, без всяких заморочек просто рефрешить таблицу и генерировать своё событие? А если периодичность задавать через MarketTimeChanged, там счёт идёт на единицы миллисекунд? А если такую функцию зациклить, то ведь лучше это сделать асинхронно, в другом потоке?

Справку читать пробовал, но не получилось. Не нашёл. Спасиб за наводку. Неплохо было бы делать ссылки в хэлпе на подобные материалы по ключевым словам, это вопрос по организации навигации.
Thanks:

Moadip

Avatar
Date: 2/25/2013
Reply


Quote:
Получается, без всяких заморочек просто рефрешить таблицу и генерировать своё событие?

Какую таблицу?[blink]

Quote:
А если периодичность задавать через MarketTimeChanged, там счёт идёт на единицы миллисекунд?

Период срабатывания таймера можно задать любой. Хоть в мс, хоть нс.

Quote:
А если такую функцию зациклить, то ведь лучше это сделать асинхронно, в другом потоке?

Зачем что то циклить. Если использовать таймер, то это тот же бесконечный цикл. Будет работать до тех пор, пока не остановить таймер.
Метод который вызывается по таймеру, будет отрабатывать в отдельном потоке.

Вы напишите зачем вам это надо, возможно это можно сделать без циклов, рекурсии, таймеров, потоков, async/await и прочей хрени.[smile]
Thanks:

Творог

Avatar
Date: 2/25/2013
Reply


Сейчас у меня в QPILE так: раз в секунду пробегаюсь по заявкам. Если заявка активна, то беру её цену и проверяю насколько она адекватна текущей ситуации в стакане. Если не адекватна - снимаю. В следующую секунду выставляю новую заявку и по новой начинаю её мониторить.
Thanks:

Moadip

Avatar
Date: 2/25/2013
Reply


Подписаться на событие изменения стакана MarketDepthsChanged. Сработало. Проверять что с ордерам.

Или использовать правило WhenMarketDepthChanged.
Thanks:

Творог

Avatar
Date: 2/25/2013
Reply


Moadip Go to

Или использовать правило WhenMarketDepthChanged.


А, возвращаясь ко второму посту, можно показать пример как использовать?

Thanks:

Moadip

Avatar
Date: 2/25/2013
Reply


Нашли нужный инструмент, зарегистрировали стакан, создали правило.

Code
_quikTrader.NewSecurities += securities =>
{
	if (_security.IsNull())
	{
		_security = securities.FirstOrDefault(sec => sec.Code == _securityCode);
		_quikTrader.RegisterMarketDepth(_security);

		_security
			.WhenMarketDepthChanged()
			.Do(MarketDepthChaged)
			.Apply();
	}
};

...

private void MarketDepthChaged()
{
	что то делаем
}


Если внутри стратегии, то вместо Apply(), Apply(this);
Thanks:

Творог

Avatar
Date: 2/25/2013
Reply


А в чём преимущества правил перед событиями? В каких случаях предпочтительнее применять и те и другие?
Thanks:

Moadip

Avatar
Date: 2/25/2013
Reply


Все зависит от конкретной ситуации.
Если на примере MarketDepthsChanged и WhenMarketDepthChanged

Допустим зарегистрировали стаканы по 10 инструментам.
И теперь каждый раз когда будет изменятся стакан по одному из этих инструментов, каждый раз будет срабатывать событие MarketDepthsChanged.
Что может быть не совсем удобно. Поэтому создаем правило для конкретного инструмента и обрабатываем изменение стакана именно по нему.

C правилами много чего можно делать. Почитайте справку, попробуйте применить, посмотрите как работает.
Thanks: Творог
1 2 3  >

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

loading
clippy