esper
|
Дата: 25.05.2012
Надо смотреть в сторону Order.WhenRegistered, Order.WhenRegisterFailed и Order.WhenCancelFailed
|
|
Спасибо:
|
|
|
|
|
VirKato
|
Дата: 29.05.2012
|
|
|
|
QUIK быстрая, но надежная программа. Поэтому с некоторой периодичностью ордера зависают: новая регистрируется, но старая заявка CancelFailed, новая RegisterFailed и т.д. Варианты решения этого: 1) Пытаться обработать все варианты с помощью WhenSomeShitHappened. У меня пока не получается. Если можете - приведите пожалуйста примеры. Я пытаюсь сделать что то вроде этого обработчика: Код
CurrSell.WhenCancelFailed().Do((err) =>
{
errorLogStrategy.AddInfoLog(Thread.CurrentThread.ManagedThreadId + "Cancel ask failed order id: "
+ err.Order.Id + " and transId: " + err.Order.TransactionId);
errorLogStrategy.AddInfoLog(Thread.CurrentThread.ManagedThreadId + "Cancel failed order state: "
+ err.Order.State + " and status: " + err.Order.Status);
if (err.Order.State != OrderStates.Done) this.ReCancelOrder(err.Order);
}).Apply(this);
CurrSell.WhenChanged().Do((order) =>
{
if (order.State == OrderStates.Done && order.Balance != 0)
errorLogStrategy.AddInfoLog(Thread.CurrentThread.ManagedThreadId + "Canceled ask order id: "
+ order.Id + " and transId: " + order.TransactionId);
}).Apply(this);
newOrder.WhenRegisterFailed().Do((err) => errorLogStrategy.AddInfoLog(Thread.CurrentThread.ManagedThreadId +
"RegisterFailed ask order id: " + err.Order.Id + " and transId: " + err.Order.TransactionId + " "
+ err.Error.ToString())).Apply(this);
newOrder.WhenRegistered().Do((order) => errorLogStrategy.AddInfoLog(Thread.CurrentThread.ManagedThreadId +
"Registered ask order id: " + order.Id + " and transId: " + order.TransactionId)).Apply(this);
2) Доставать непосредственно из QUIKa все ордера искать все активные и Cancel ненужные. Реализуется за минуту. Но, через некоторое время ордеров становится слишком много. Есть возможность доставать из QUIK только активные ордера?
|
|
Спасибо:
|
|
|
|
|
Alexander
|
Дата: 29.05.2012
Квик апи - не быстрый, а самый медленный из доступных.
|
|
Спасибо:
|
|
|
|
|
Den
|
Дата: 29.05.2012
Alexander Mukhanchikov Квик апи - не быстрый, а самый медленный из доступных. Смарт быстрее работает? У меня знакомые в свое время, кто на прямую под него писали ругались на глюкавость и тормознутость...
|
|
Спасибо:
|
|
|
|
|
Alexander
|
Дата: 29.05.2012
Den Alexander Mukhanchikov Квик апи - не быстрый, а самый медленный из доступных. Смарт быстрее работает? У меня знакомые в свое время, кто на прямую под него писали ругались на глюкавость и тормознутость... смарт глюкавыЙ, у меня такое же впечатление. я работаю под квик апи, не парюсь особо. но смарт по тестам побыстрее. У нас есть пример для тестирования на codeplex - SpeedTest, в Samples\Common
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 29.05.2012
VirKato 1) Пытаться обработать все варианты с помощью WhenSomeShitHappened. У меня пока не получается. Если можете - приведите пожалуйста примеры. Я пытаюсь сделать что то вроде этого обработчика: Если в кратце, то отправляем заявку на регистрацию, пока не будет вызвано Regitered или Failed с заявкой ничего не делаем, даже если прошел таймаут, по одному из событий решаем дальше что делать с заявкой. Если интересуют конкретные примеры, то это лучше в платную поддержку обратиться. VirKato 2) Доставать непосредственно из QUIKa все ордера искать все активные и Cancel ненужные. Реализуется за минуту. Но, через некоторое время ордеров становится слишком много. Есть возможность доставать из QUIK только активные ордера? Код
Trader.Orders.Where(o => o.State == OrderState.Active)
|
|
|
|
|
VirKato
|
Дата: 29.05.2012
Alexander MukhanchikovКвик апи - не быстрый, а самый медленный из доступных. Хех. То, что "QUIK быстрая, но надежная программа" - это стандартная фраза, которую я слышал после кучи мата от трейдеров, которые руками трейдят. esperСпасибо. А отмену заявки при перерегистрации можно так же отловить? WhenCanceleFailed срабатывает, WhenCancel - нет.
|
|
Спасибо:
|
|
|
|
|
Den
|
Дата: 30.05.2012
Alexander Mukhanchikov Den Alexander Mukhanchikov Квик апи - не быстрый, а самый медленный из доступных. Смарт быстрее работает? У меня знакомые в свое время, кто на прямую под него писали ругались на глюкавость и тормознутость... смарт глюкавыЙ, у меня такое же впечатление. я работаю под квик апи, не парюсь особо. но смарт по тестам побыстрее. У нас есть пример для тестирования на codeplex - SpeedTest, в Samples\Common Сегодня брокер осчастливил апгрейдом Quik'а с 5.24 на 6.02 наконец-то. Все стало еще шустрее работать...
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 30.05.2012
VirKato А отмену заявки при перерегистрации можно так же отловить? WhenCanceleFailed срабатывает, WhenCancel - нет. На плазе WhenCancel точно срабатывает, должно и на квике работать.
|
|
Спасибо:
|
|
|
|
|
VirKato
|
Дата: 30.05.2012
Хм, самым надежным способом оказалось просматривать все активные ордера и пытаться убить лишние: Код
var activeOrders = Trader.Orders.Where(o => ((o.State == OrderStates.Active) && (o.Status == OrderStatus.Accepted)));
Через некоторое время появляются ордера которые реально уже сняты, но отображаются как активные. Причем со временем их количество растет. Может быть до Trader просто не доходят сообщения от квика о том, что они сняты. Если переподключить Trader к квику, то проблема снимается. Можно ли создать Clone шлюза и стратегии и подключить их до того как отключить предыдущие, что бы сократить до минимума время рестарта стратегии?
|
|
Спасибо:
|
|
|
|