﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Ошибка при отмене заявки</title>
  <id>~/topic/4720/oshibka-pri-otmene-zayavki/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-14T12:33:36Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=4720" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/31621/</id>
    <title type="text">VirKato: Состояние Done согласно документации выставляется, когда заявка полностью удовлетворена или...</title>
    <published>2014-09-09T15:20:16Z</published>
    <updated>2014-09-09T15:23:03Z</updated>
    <author>
      <name>pma37592</name>
      <uri>https://stocksharp.com/users/50555/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(31620)" rel="nofollow" target="_blank"&gt;VirKato&lt;/a&gt;:&lt;/strong&gt;
Состояние Done согласно документации выставляется, когда заявка полностью удовлетворена или снята. Чтож вы с ней еще хотите сделать?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Проблема в том, что вызывается не то событие об ошибке, а в некоторых случаях вообще не вызывается.&lt;/p&gt;
&lt;p&gt;Если добавить код.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
...
order.WhenMatched().Do(_OrderMatched).Apply(this);
...

private void _OrderMatched(Order order)
{
 var msg = String.Format(&amp;quot;[OrderMatched]: Заявка полностью исполнена: {0}; ThreadID: {1}; IsMatched={2}; IsMatchedEmpty={3}; IsMatchedPartially={4}; Vol={5}; Bal={6}; State={7}&amp;quot;,
        order.Id, Thread.CurrentThread.ManagedThreadId, order.IsMatched(), order.IsMatchedEmpty(), order.IsMatchedPartially(),
        order.Volume, order.Balance, order.State);
      Logs.LogMsg(msg);
      this.AddInfoLog(msg);

      CancelOrder(order);
      msg = &amp;quot;[OrderMatched]: Заявку отменили&amp;quot;;
      Logs.LogMsg(msg);
      this.AddInfoLog(msg);
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;То лог будет, таким&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;Имя	Время	Тип	Сообщение
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:12	Info	Стратегия запущена. [0,-1]. Позиция 0.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	Регистрация новой Limit (0x228E01D) заявки на Buy с ценой 125170 и объемом 2.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	Заявка ID=0; TrasID=68866896; IsMatched=False; IsMatchedEmpty=True; IsMatchedPartially=False; Vol=2; Bal=2; State=Pending
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	Отмена заявки 68866896 (0x228E01D).
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	Заявку отменили
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Error	Заявка 68866896 (0x228E01D) не была принята по причине System.InvalidOperationException: Ошибка снятия заявки 0. Текст 'vy ne mozhete snyat' dannuyu zayavku'..
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	[_OrderFailed]: Ошибка при регистрации заявки: 0; ThreadID: 15; Ошибка: System.InvalidOperationException: Ошибка снятия заявки 0. Текст 'vy ne mozhete snyat' dannuyu zayavku'.; IsMatched=False; IsMatchedEmpty=True; IsMatchedPartially=False; Vol=2; Bal=2; State=Pending
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	Заявка 68866896 (0x228E01D) больше не активна.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	Новая позиция: SPBFUT00J13-RIU4@FORTS=2.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	Новая Buy сделка 115716930 по цене 125170 на 1 заявки 68866896.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	Новая Buy сделка 115716931 по цене 125170 на 1 заявки 68866896.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	[_OrderMatched]: Заявка полностью исполнена: 2442481882; ThreadID: 15; IsMatched=True; IsMatchedEmpty=False; IsMatchedPartially=False; Vol=2; Bal=0; State=Done
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Warning	Для заявки 68866896 (0x228E01D) уже был послан сигнал на отмену.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	[_OrderMatched]: Заявку отменили
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 19:08:25	Info	Заявка 68866896 (0x228E01D) больше не активна.&lt;/summary&gt;
&lt;/details&gt;
&lt;p&gt;Вообще не вызывается ничего, получается ошибка - отмена уже не существующего ордера. При этом запрос на отмену отсылается, но квик сообщает,
что не может отменить заявку.
Возникает вопрос: если все же отменяем заявку, которая на бирже уже исполнилась, а квик эту информацию еще не получил.
Будет вызвано сообщение об ошибке WhenCancelFailed?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/31620/</id>
    <title type="text">Andrii: присоединяюсь, 2014/09/09 15:53:25.451| |QuikTrader|OrderCancelFailed: 52681380/2442218035 П...</title>
    <published>2014-09-09T14:54:12Z</published>
    <updated>2014-09-09T14:57:05Z</updated>
    <author>
      <name>VirKato</name>
      <uri>https://stocksharp.com/users/460/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(31618)" rel="nofollow" target="_blank"&gt;Andrii&lt;/a&gt;:&lt;/strong&gt;
присоединяюсь,&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-plain"&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;2014/09/09 15:53:25.451|       |QuikTrader|OrderCancelFailed: 52681380/2442218035 Продажа Цена=1152.6 Объем=1 [b]Сост=Done[/b] Бал=0
System.InvalidOperationException: Ошибка снятия заявки 2442218035. Текст 'vy ne mozhete snyat' dannuyu zayavku'.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
Состояние Done согласно документации выставляется, когда заявка полностью удовлетворена или снята. Чтож вы с ней еще хотите сделать?

&amp;gt; **pma37592:**
&amp;gt; Есть такой код. В нем в стратегии выставляем заявку, а потом сразу же отменяем.
На сколько - сразу: по заявке успевает прийти биржевой ID? Судя по логу событие о том, что она зарегистрировано от биржи приходит одновременно с ошибкой. Не уверен на счет forts, но на стоках так точно делать нельзя. May be try sleep(100)?
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/31618/</id>
    <title type="text">присоединяюсь, 2014/09/09 15:53:25.451| |QuikTrader|OrderCancelFailed: 52681380/2442218035 Продажа Ц...</title>
    <published>2014-09-09T13:56:21Z</published>
    <updated>2014-09-09T13:56:21Z</updated>
    <author>
      <name>Andrii</name>
      <uri>https://stocksharp.com/users/27996/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;присоединяюсь,&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-plain"&gt;2014/09/09 15:53:25.451|       |QuikTrader|OrderCancelFailed: 52681380/2442218035 Продажа Цена=1152.6 Объем=1 Сост=Done Бал=0 
System.InvalidOperationException: Ошибка снятия заявки 2442218035. Текст 'vy ne mozhete snyat' dannuyu zayavku'.
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/31615/</id>
    <title type="text">Есть такой код. В нем в стратегии выставляем заявку, а потом сразу же отменяем. Версия stocksharp 4....</title>
    <published>2014-09-09T09:02:07Z</published>
    <updated>2014-09-09T09:03:48Z</updated>
    <author>
      <name>pma37592</name>
      <uri>https://stocksharp.com/users/50555/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Есть такой код. В нем в стратегии выставляем заявку, а потом сразу же отменяем.
Версия stocksharp 4.2.22. Для тестирования использовался терминал Quik Junior брокера finam. Коннектор Lua.
Лог следующий:&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;Имя	Время	Тип	Сообщение
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:02	Info	Стратегия запущена. [0,-1]. Позиция 0.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:10	Info	Регистрация новой Limit (0x19D013B) заявки на Buy с ценой 124770 и объемом 8.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:10	Info	Заявка UserOrderID=0b7f703e-e375-45a9-9f83-32ffe3209d8b; ID=0; TrasID=45327796; IsMatched=False; IsMatchedEmpty=True; IsMatchedPartially=False; Vol=8; Bal=8; State=Pending
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:10	Info	Отмена заявки 45327796 (0x19D013B).
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:10	Info	Заявку отменили
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Error	Заявка 45327796 (0x19D013B) не была принята по причине System.InvalidOperationException: Ошибка снятия заявки 0. Текст 'vy ne mozhete snyat' dannuyu zayavku'..
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	[_OrderFailed]: Ошибка при регистрации заявки: 0; ThreadID: 16; Ошибка: System.InvalidOperationException: Ошибка снятия заявки 0. Текст 'vy ne mozhete snyat' dannuyu zayavku'.; IsMatched=False; IsMatchedEmpty=True; IsMatchedPartially=False; Vol=8; Bal=8; State=Pending
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Заявка 45327796 (0x19D013B) больше не активна.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Новая позиция: SPBFUT00J13-RIU4@FORTS=8.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Новая Buy сделка 115669077 по цене 124770 на 1 заявки 45327796.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Новая позиция: SPBFUT00J13-RIU4@FORTS=1.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	[_OrderRegistered]: Заявка зарегистрирована: 2441834779; ThreadID: 16; IsMatched=False; IsMatchedEmpty=False; IsMatchedPartially=True; Vol=8; Bal=7; State=Active
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Новая позиция: SPBFUT00J13-RIU4@FORTS=8.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Новая Buy сделка 115669079 по цене 124770 на 5 заявки 45327796.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Новая позиция: SPBFUT00J13-RIU4@FORTS=6.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Новая позиция: SPBFUT00J13-RIU4@FORTS=8.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Новая Buy сделка 115669080 по цене 124770 на 2 заявки 45327796.
OCOS_RIU4@FORTS_SPBFUT00J13	09.09.2014 12:37:11	Info	Заявка 45327796 (0x19D013B) больше не активна.&lt;/summary&gt;
&lt;/details&gt;
&lt;p&gt;По логу видно, что при отмене заявки, если заявка еще выставляется на сервере вызывается функция _OrderFailed, а не функция _OrderCanceledFailed.
Заявка ведь отменяется и ошибка отмены заявки. Так же не происходит реальной отмены заявки. Заявка выставляется и не происходит ее отмены.
Так же хотелось бы иметь какие-то коды ошибок для заявок.&lt;/p&gt;
&lt;p&gt;Код под катом:&lt;/p&gt;
&lt;div class="spoiler"&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using StockSharp.Algo;
using StockSharp.Algo.Strategies;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Testing;
using StockSharp.BusinessEntities;
using StockSharp.Logging;

namespace OrderTest
{
  class OpenCancelOrderStrategy:Strategy
  {
    CandleManager _candleManager; //Менеджер свечек
    CandleSeries _series;     //Серия однотиковых свечек
    
    protected override void OnStarted()
    {
      //Начало 
      _candleManager = new CandleManager(this.Connector);
      _series = new CandleSeries(typeof(TickCandle), this.Security, 1);

      Connector.RegisterMarketDepth(this.Security);

      _series
        .WhenCandlesFinished() //Когда закончится тик
        .Do(ProcessCandle) //Вызывать процедуру
        .Apply(this);

      _candleManager.Start(_series);
      base.OnStarted();
    }

    protected override void OnStopped()
    {
      _candleManager.Stop(_series);
      _series.Dispose();
      _candleManager.Dispose();
      base.OnStopped();
    }

    private int IsOrder = 0;
   
    private void ProcessCandle(Candle candle)
    {
      if (IsOrder &amp;lt; 1)
      {
        if (Security.BestAsk == null)
          return;

        IsOrder++;

        //var order = this.BuyAtMarket(this.Volume);
        
        var price = Security.BestAsk.Price;
        var order = this.CreateOrder(StockSharp.Messages.Sides.Buy, price, Volume);

        order
          .WhenRegistered()
          .Do(_OrderRegistered)
          .Apply(this);

        order
          .WhenRegisterFailed()
          .Do(_OrderFailed)
          .Apply(this);

        order
          .WhenCanceled()
          .Do(_OrderCanceled)
          .Apply(this);

        order
          .WhenCancelFailed()
          .Do(_OrderCanceledFailed)
          .Apply(this);

        RegisterOrder(order);

        var msg = String.Format(&amp;quot;Заявка UserOrderID={0}; ID={1}; TrasID={2}; IsMatched={3}; IsMatchedEmpty={4}; IsMatchedPartially={5}; Vol={6}; Bal={7}; State={8}&amp;quot;, order.UserOrderId, order.Id, order.TransactionId, order.IsMatched(), order.IsMatchedEmpty(), order.IsMatchedPartially(), order.Volume, order.Balance, order.State);
        this.AddInfoLog(msg);

        CancelOrder(order);
        msg = &amp;quot;Заявку отменили&amp;quot;;   
        this.AddInfoLog(msg);
      }
    }

    private void _OrderFailed(OrderFail Error)
    {
      var msg = String.Format(&amp;quot;[OnOrderFailed]: Ошибка при регистрации заявки: {0}; ThreadID: {1}; Ошибка: {2}; IsMatched={3}; IsMatchedEmpty={4}; IsMatchedPartially={5}; Vol={6}; Bal={7}; State={8}&amp;quot;, Error.Order.Id, Thread.CurrentThread.ManagedThreadId, Error.Error, Error.Order.IsMatched(), Error.Order.IsMatchedEmpty(), Error.Order.IsMatchedPartially(), Error.Order.Volume, Error.Order.Balance, Error.Order.State);
      this.AddInfoLog(msg);
    }


    private void _OrderRegistered(Order order)
    {
      var msg = String.Format(&amp;quot;[OnOrderRegistered1]: Заявка зарегистрирована: {0}; ThreadID: {1}; IsMatched={2}; IsMatchedEmpty={3}; IsMatchedPartially={4}; Vol={5}; Bal={6}; State={7}&amp;quot;, order.Id, Thread.CurrentThread.ManagedThreadId, order.IsMatched(), order.IsMatchedEmpty(), order.IsMatchedPartially(), order.Volume, order.Balance, order.State);
      this.AddInfoLog(msg);
    }

    private void _OrderCanceled(Order order)
    {
      var msg = String.Format(&amp;quot;[_OrderCanceled]: Заявка успешно отменена: {0}; ThreadID: {1}; IsMatched={2}; IsMatchedEmpty={3}; IsMatchedPartially={4}; Vol={5}; Bal={6}; State={7}&amp;quot;, order.Id, Thread.CurrentThread.ManagedThreadId, order.IsMatched(), order.IsMatchedEmpty(), order.IsMatchedPartially(), order.Volume, order.Balance, order.State);
      this.AddInfoLog(msg);
    }

    private void _OrderCanceledFailed(OrderFail Error)
    {
      var msg = String.Format(&amp;quot;[_OrderCanceledFailed]: Ошибка при отмене заявки: {0}; ThreadID: {1}; Ошибка: {2}; IsMatched={3}; IsMatchedEmpty={4}; IsMatchedPartially={5}; Vol={6}; Bal={7}; State={8}&amp;quot;, Error.Order.Id, Thread.CurrentThread.ManagedThreadId, Error.Error, Error.Order.IsMatched(), Error.Order.IsMatchedEmpty(), Error.Order.IsMatchedPartially(), Error.Order.Volume, Error.Order.Balance, Error.Order.State);
      this.AddInfoLog(msg);
    }
  }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>