По логике стратегии нужно перевыставлять ордера каждую секунду при определенных условиях. Поэтому я из дочерней стратегии наследованной от timeFrameStrategy вызываю каждую секунду CheckOrders. И при выставлении запоминаю ордер в свойство. Это почти работает. Но, периодически ордера дублируются. При этом в свойстве запоминается только один из них, а второй остается висеть. Сижу думаю как отлавливать. Если подкинете мысли - в чем может быть ошибка, буду очень признателен. Да, ордера выставляются через квик (быструю, но надежную программу).
Кусок кода. Функция CheckOrders вызывается только из OnProcess дочерней, раз в секунду:
class aStratagy: Strategy
{
private Order CurrBuy { get; set; }
public void CheckOrders(){
//проверка условий
var newBuy = this.CreateOrder(OrderDirections.Buy, bid, qbuy);
ReRegisterBuy(newBuy);
}
private void ReRegisterBuy(Order newBuy)
{
this.ReRegisterOrder(CurrBuy, newBuy);
this.CurrBuy = newBuy;
}
}
评论 (10)
登录 或 创建账户, 登录或注册以发表评论
Надо смотреть в сторону Order.WhenRegistered, Order.WhenRegisterFailed и Order.WhenCancelFailed
QUIK быстрая, но надежная программа. Поэтому с некоторой периодичностью ордера зависают: новая регистрируется, но старая заявка CancelFailed, новая RegisterFailed и т.д. Варианты решения этого:
Квик апи - не быстрый, а самый медленный из доступных.
смарт глюкавыЙ, у меня такое же впечатление. я работаю под квик апи, не парюсь особо. но смарт по тестам побыстрее.
У нас есть пример для тестирования на codeplex - SpeedTest, в Samples\Common
Сегодня брокер осчастливил апгрейдом Quik'а с 5.24 на 6.02 наконец-то. Все стало еще шустрее работать...
Хм, самым надежным способом оказалось просматривать все активные ордера и пытаться убить лишние:
Через некоторое время появляются ордера которые реально уже сняты, но отображаются как активные. Причем со временем их количество растет. Может быть до Trader просто не доходят сообщения от квика о том, что они сняты. Если переподключить Trader к квику, то проблема снимается. Можно ли создать Clone шлюза и стратегии и подключить их до того как отключить предыдущие, что бы сократить до минимума время рестарта стратегии?