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


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

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

Теги:


Спасибо:


1 2 3  >
Творог

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


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

Код
MarketRule<Security, MarketDepth> rule = MarketRuleHelper.WhenMarketDepthChanged(sec);
Спасибо:

Moadip

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


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

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

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

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

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

Творог

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


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

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

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

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

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


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

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

Moadip

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


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

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

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

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

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

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

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

Творог

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


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

Moadip

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


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

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

Творог

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


Moadip Перейти

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


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

Спасибо:

Moadip

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


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

Код
_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);
Спасибо:

Творог

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


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

Moadip

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


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

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

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

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

loading
clippy