Вопрос по асинхронному режиму и классу стратегии
Atom Ответить
24.05.2010


Здраствуйте.
1) Мне необходима максимальная скорость выставления заявок, поэтому
был поставлен интервал стратегии 125мс. Это 8 срабатываний в секунду
без учета факторов времени работы логики стратегии и отправке
транзакции в квиковский апи. Насколько я понял интервал играет роль
sleepa передавая управление потоку стратегии. Вопрос в том какой
минимальный интервал можно поставить, не будет ли создаватся очередей
на выполнение стратегии ну или чего-то подобного?
2) При частичном выполнении заявки она переходит в состояние
исполненная, а биржа создает заявку на оставшийся невыполненным объем
ордера и у этого ордера будет ID биржи? Получилось что не сталкивался
пока что с таким вариантом событий и хотелось бы знать чего ожидать.
3) Если разнести на 2 разных класса стратегии логику на покупку и на
продажу по одному инструменту, то значения выводимые менеджерами PnL,
позиции, задержки и тд придется как-то суммировать?
4) И еще скорость работы от разных классов стратегии не возрастет
потому как они будут по очереди занимать транзквик?

Теги:


Спасибо:




12 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2010
Ответить


1. Интервал стратегии влияет на скорость реалирования на изменения
рынка. На скорость выставления влияет сервер брокера. Минимальный
интверва - это 0. Тогда будет стратегия вызываться вообще без
ожидания. Но думаю, у Вас компьютер не выдержит и подвиснут все другие
приложения. Насчет очередей, нет такого.
2. Нет, при частичном исполнения заявка не переходит в состояние
Matched. Она по прежнему Active, но у нее изменился Balance.
3. Если разная логика у стратегий - зачем их вообще сравнивать в
сумме? Это даст какой-то показатель? А так, есть классы
TraderPnLManager TraderSlippageManager и т.д.
4. Думаю, на Квик это вообще не влияет, сколько именно стратегий. Он
обрабатывает тразнакции одну за другой в очереди.

Спасибо:

Dord

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


1. Как я понял при асинхронном режиме мы ждем ответа только от квика,
что он получил транзакцию.
Получается что во время отправки транзакции транзквик не доступен, для
выставления другой заявки. То как скоро это заявка придет на биржу и
впоследствии появится у меня в квике в таблице заявок меня мало
интересует. Меня больше интересует время работы транзквика на отправку
заявки в квик и то как скоро я могу отправить следующую. Еще маленько
не понятно если интервал например 1 мс, метод OnProcess стратегии
будет вызываться через 1 мс после окончания работы предыдущего вызова
метода OnProcess или через 1 мс после начала работы метода OnProcess
он будет вызываться еще 1 раз?
И еще подскажите как подсчитать время затраченное компьютером на
выполнение какого-либо куска кода программы?
2. А после регистрации ордера в квике Balance и Volume будут
одинаковыми если зявка еще даже не отправлена на биржу?

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2010
Ответить


1. Нет. Биржа работает в асихнронном режиме. Тоесть она не сразу
выставляет заявку, а присвыивает ей номер после некоторых проверок. В
асинхронном режиме Квик не блокирует поток для получения этого самого
номера. И выдает номер в последствии через событие. Так что как раз
наоборот, в сихнронном режиме Квик не доступен, что я и показал в
тестахhttp://stockmarketdotnet.blogspot.com/2010/03/blog-post.html


2. После окончания работы OnProcess.

Спасибо:

Dord

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


1. Ваши тесты по ссылке я читал, но видимо не так понял. Получается
при асинхронном режиме транзакция через апи поступает в квик, он
формирует заявку и отправляет ее на биржу, биржа после некоторых
проверок присваивает заявке TransactionID который отправляет назад в
квик, а тот уже отправляет эти данные в программу. Поэтому время
выполнения этого участка кода зависит и от скорости канала до сервера
брокера и от того как быстро сервер обработает заявку присвоив ей
номер, теперь правильно понял?)

"2. После окончания работы OnProcess." Это ответ на вопрос про
интервал в стратегии?

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2010
Ответить


TransactionID - это чисто Квик специфик. В биржей общение тоже идет по
такому индентификатору, но он другой.

1. Насколько я понял вопрос, да.
2. Да, про интервал. Стратегия может обрабатываться только одним
потоком.

Спасибо:

Dord

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


1. Так получается метод RegisterOrder() отправляет транзакцию в квик и
квик присвает TransactionID заявке.
А дальше что происходит в асинхронном режиме:
1) квик отправляет TransactionID назад в программу и завершает
исполнение метода RegisterOrder() и дальше отправляет заявку на биржу?
2) или квик сначала отправляет заявку на биржу, та присваивает ей
номер(кстати этот номер - Order.ID или что-то другое?) после некоторых
проверок и после прихода номера в квик, квик отправляет его в
программу и завершает исполнение метода RegisterOrder()?

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2010
Ответить


Спасибо:

Dord

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


Тогда при выполнении RegisterOrder() в асинхронном режиме от квика
придет ID?
Мне просто необходимо знать, что заявка отправлена и ее номер для
работы логики в моей стратегии.

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2010
Ответить


Да, когда биржа примет заявку, Квик перешлет TransID и биржевой номер.

Заявка отправлена и зарегистрирована - ITrader.NewOrders. Насчет
номера - напишите по подробнее.

Спасибо:

Dord

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


"Квик перешлет TransID и биржевой номер" Если биржевой номер и есть
ID, то этого мне достаточно. В принципе мне нужен любой номер Ordera
без разницы TransID или ID, я после RegisterOrder() добавляю его по
номеру в список ордеров на исполнение, чтобы постоянно контролировать
необходимый объем активных заявок. И это мне нужно делать в классе
стратегии чтобы не привысить лимит на активные заявки.

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2010
Ответить


Так я думаю Вы явно идете не той дорогой. Вернее, направление то, но
очень окольно. Вот же простое решение:

Strategy.Orders.Where(o => o.State == OrderStates.Active).Count() >
maxActiveCount

Спасибо:

Dord

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


Да ваш вариант намного проще, но я еще не разбирался с добавлением
завок в стратегию и сначала проверял максимальную скорость выставления
заявок и возможность работы по меняющимся лимитам на объем активных
ордеров.

Автор топика
Спасибо:


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

loading
clippy