Table of Contents

Состояния заявок

Заявка во время своей жизни проходит следующие состояния:

OrderStates

  • OrderStates.None - заявка была создана в роботе и еще не была отправлена на регистрацию.
  • OrderStates.Pending - заявка была отправлена на регистрацию (ITransactionProvider.RegisterOrder(StockSharp.BusinessEntities.Order order )) и для нее было вызвано событие ITransactionProvider.NewOrder. Для заявки ожидается подтверждение ее принятия от биржи. В случае успеха принятия будет вызвано событие ITransactionProvider.OrderChanged, и заявка будет переведена в состояние OrderStates.Active. Также будут проинициализированы свойства Order.Id и Order.Time. В случае отвержения заявки будет вызвано событие ITransactionProvider.OrderRegisterFailed с описанием ошибки, и заявка будет переведена в состояние OrderStates.Failed.
  • OrderStates.Active - заявка активна на бирже. Такая заявка будет активна до тех пор, пока не исполнится весь ее выставленный объем Order.Volume, или она не будет снята принудительно через ITransactionProvider.CancelOrder(StockSharp.BusinessEntities.Order order ). Если заявка исполняется частично, то вызываются события ITransactionProvider.NewMyTrade о новых сделках по выставленной заявке, а так же событие ITransactionProvider.OrderChanged, где передается уведомление об изменении баланса по заявке Order.Balance. Последнее событие будет выведено и в случае отмены заявки.
  • OrderStates.Done - заявка более не активна на бирже (была полностью исполнена или снята).
  • OrderStates.Failed - заявка не была принята биржей (или промежуточной системой, как, например, серверная часть торговой платформы) по какой-либо причине.

Для того, чтобы узнать, в каком торговом состоянии находится заявка (какой объем реализован, была ли полностью удовлетворена заявка и т.д.) необходимо использовать методы Extensions.IsCanceled(StockSharp.Messages.IOrderMessage order ), Extensions.IsMatchedEmpty(StockSharp.Messages.IOrderMessage order ), Extensions.IsMatchedPartially(StockSharp.Messages.IOrderMessage order ), Extensions.IsMatched(StockSharp.Messages.IOrderMessage order ) и Extensions.GetMatchedVolume(StockSharp.Messages.IOrderMessage order ):

// любая заявка
Order order = ....
// отменена ли
Console.WriteLine(order.IsCanceled());
// исполнилась ли полностью
Console.WriteLine(order.IsMatched());
// исполнилась ли частично
Console.WriteLine(order.IsMatchedPartially());
// исполнилась ли хотя бы одна часть заявки 
Console.WriteLine(order.IsMatchedEmpty());
// получить реализованный объем
Console.WriteLine(order.GetMatchedVolume());