﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Событие при изменении Order.State</title>
  <id>~/topic/2487/sobytie-pri-izmenenii-order_state/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-07-05T05:11:30Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=2487" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/17282/</id>
    <title type="text">maximv20: спасибо! если уж на то пошло, то можно добавить уведомление OrderStateChange. Оч. нужно на...</title>
    <published>2012-03-15T15:59:29Z</published>
    <updated>2012-03-15T15:59:29Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(17281)" rel="nofollow" target="_blank"&gt;maximv20&lt;/a&gt;:&lt;/strong&gt;
спасибо! если уж на то пошло, то можно добавить уведомление OrderStateChange. Оч. нужно например для того чтобы сделать какие-то действия, после того как заявка исполнилась, зафейлилась или выставилась. Например, при реализации айсберга, или снять стазу, если стала активной. Сейчас это сделать штатно нельзя, а при предполагаемом фиксе 4.1 придеться сравнивать строчки, что не очень производительно. предлагаю обсудить.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Не вариант. Подобное событие может потребоваться для любого свойства что есть в объектах. Нецелесообразно.&lt;/p&gt;
&lt;p&gt;Надо работать со State - заводите словарь &amp;lt;заявка, последний_обработанный_State&amp;gt; и работайте с событием OrdersChanged.
Это наиболее правильный вариант.&lt;/p&gt;
&lt;p&gt;Тут надо понимать для чего вам изменение State. Для того чтоб понять исполнена заявка или отклонена? Для этого есть множество правил, которые изрядно покрывают все возможные состояния заявки.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/17281/</id>
    <title type="text">спасибо! если уж на то пошло, то можно добавить уведомление OrderStateChange. Оч. нужно например для...</title>
    <published>2012-03-15T15:45:37Z</published>
    <updated>2012-03-15T15:45:37Z</updated>
    <author>
      <name>maximv20</name>
      <uri>https://stocksharp.ru/users/28027/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;спасибо! если уж на то пошло, то можно добавить уведомление OrderStateChange. Оч. нужно например для того чтобы сделать какие-то действия, после того как заявка исполнилась, зафейлилась или выставилась. Например, при реализации айсберга, или снять стазу, если стала активной. Сейчас это сделать штатно нельзя, а при предполагаемом фиксе 4.1 придеться сравнивать строчки, что не очень производительно. предлагаю обсудить.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/17280/</id>
    <title type="text">Ок, в 4.1 пофикшу. Не то чтобы это баг. По сути эти нотифаеры используются в основном лишь в гуе, пр...</title>
    <published>2012-03-15T15:34:27Z</published>
    <updated>2012-03-15T15:34:38Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Ок, в 4.1 пофикшу.
Не то чтобы это баг. По сути эти нотифаеры используются в основном лишь в гуе, при байндинге.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/17279/</id>
    <title type="text">Alexander Mukhanchikov: inotifypropertychanged в MSDN - будет понятно почему много раз событие прихо...</title>
    <published>2012-03-15T15:23:10Z</published>
    <updated>2012-03-15T15:23:10Z</updated>
    <author>
      <name>maximv20</name>
      <uri>https://stocksharp.ru/users/28027/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(17275)" rel="nofollow" target="_blank"&gt;Alexander Mukhanchikov&lt;/a&gt;:&lt;/strong&gt;
&lt;a href="http://msdn.microsoft.com/ru-ru/library/system.componentmodel.inotifypropertychanged.propertychanged.aspx" target="_blank"&gt;inotifypropertychanged в MSDN&lt;/a&gt; - будет понятно почему много раз событие приходит.&lt;/p&gt;
&lt;p&gt;Далее смотрите &lt;a href="http://msdn.microsoft.com/ru-ru/library/system.componentmodel.propertychangedeventargs.aspx" target="_blank"&gt;PropertyChangedEventArgs в MSDN&lt;/a&gt; и обращаете внимание на замечательное свойство под названием PropertyName.&lt;/p&gt;
&lt;p&gt;Осталось лишь сравнить это поле с &amp;quot;State&amp;quot; на равенство.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Не понятно почему. Если описать свойство Order.State в соответствии с документацией (&amp;quot;Происходит при изменении значения свойства.&amp;quot;) и с примером получим следущее.
[DataMember]
public OrderStates State
{
get
{
return this._state;
}
set
{
if (value != this._state)
{
this._state = value;
this.Notify(&amp;quot;State&amp;quot;);
}
}
}&lt;/p&gt;
&lt;p&gt;а в реале имеем в библиотеке&lt;/p&gt;
&lt;p&gt;[DataMember]
public OrderStates State
{
get
{
return this._state;
}
set
{
this._state = value;
this.Notify(&amp;quot;State&amp;quot;);
}
}&lt;/p&gt;
&lt;p&gt;что я пытаюсь сказать. т.е. намекаю на баг.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/17275/</id>
    <title type="text">inotifypropertychanged в MSDN - будет понятно почему много раз событие приходит. Далее смотрите Prop...</title>
    <published>2012-03-15T14:04:50Z</published>
    <updated>2012-03-15T14:04:50Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;&lt;a href="http://msdn.microsoft.com/ru-ru/library/system.componentmodel.inotifypropertychanged.propertychanged.aspx" target="_blank"&gt;inotifypropertychanged в MSDN&lt;/a&gt; - будет понятно почему много раз событие приходит.&lt;/p&gt;
&lt;p&gt;Далее смотрите &lt;a href="http://msdn.microsoft.com/ru-ru/library/system.componentmodel.propertychangedeventargs.aspx" target="_blank"&gt;PropertyChangedEventArgs в MSDN&lt;/a&gt; и обращаете внимание на замечательное свойство под названием PropertyName.&lt;/p&gt;
&lt;p&gt;Осталось лишь сравнить это поле с &amp;quot;State&amp;quot; на равенство.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/17274/</id>
    <title type="text">Извиняюсь, не понял как. Вот мне приходит (сократил из предыдущего): 16:34:21.490 | | POStrategy | O...</title>
    <published>2012-03-15T13:55:38Z</published>
    <updated>2012-03-15T13:55:38Z</updated>
    <author>
      <name>maximv20</name>
      <uri>https://stocksharp.ru/users/28027/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Извиняюсь, не понял как. Вот мне приходит (сократил из предыдущего):
16:34:21.490 | | POStrategy | OnOrderPropertyChanged: State: ST=Done/-;
16:34:21.555 | | POStrategy | OnOrderPropertyChanged: State: ST=Done/-;
Если состояние не меняеться (OrderState==Done) то почему приходят события об изменении?&lt;/p&gt;
&lt;p&gt;Допустим я хочу сделать какое-то действие при переходе заявки в состояние Done. Если я буду получать вызовы как выше, то мое действие будет выполнено 2 раза, а мне надо только один.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/17273/</id>
    <title type="text">и искать изменения с &amp;quot;State&amp;quot; я сразу написал выше проверяйте ваш PropertyChangedEventArgs </title>
    <published>2012-03-15T13:14:01Z</published>
    <updated>2012-03-15T13:14:01Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;и искать изменения с &amp;quot;State&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;я сразу написал выше
проверяйте ваш PropertyChangedEventArgs&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/17272/</id>
    <title type="text">у меня приходит событие изменения хотя само свойство не меняеться: _order = this.CreateOrder(OrderDi...</title>
    <published>2012-03-15T12:59:20Z</published>
    <updated>2012-03-15T12:59:20Z</updated>
    <author>
      <name>maximv20</name>
      <uri>https://stocksharp.ru/users/28027/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;у меня приходит событие изменения хотя само свойство не меняеться:&lt;/p&gt;
&lt;p&gt;_order = this.CreateOrder(OrderDirections.Buy, price);
_order.Type = OrderTypes.Limit;
((INotifyPropertyChanged) _order).PropertyChanged += OnOrderPropertyChanged;
RegisterOrder(_order);&lt;/p&gt;
&lt;p&gt;void OnOrderPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) {
var sb = new StringBuilder(&amp;quot;OnOrderPropertyChanged: &amp;quot;);
sb.Append(e.PropertyName).Append(&amp;quot;: &amp;quot;);
if(sender&lt;mark&gt;null)
sb.Append(&amp;quot;sender&lt;/mark&gt;null&amp;quot;);
else {
var order = sender as Order;
if(order==null) {
sb.Append(&amp;quot;sender is not Order&amp;quot;);
}else {
sb.Append(OrderToString(order));
}
}
this.AddInfoLog(sb.ToString);
}&lt;/p&gt;
&lt;p&gt;очищено от ненужного:
16:34:21.401 |            | PlazaTrader     | CancelOrder: TransactionId=59303270, Id=2722330316, Price=169650, Balance=1, Security=RIM2@RTS, State=Active
16:34:21.490 |            | POStrategy      | OnOrderPropertyChanged: State: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.490;
16:34:21.490 |            | POStrategy      | OnOrderChanged: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.490;
16:34:21.555 |            | POStrategy      | OnOrderPropertyChanged: State: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.472;
16:34:21.555 |            | POStrategy      | OnOrderChanged: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.472;&lt;/p&gt;
&lt;p&gt;полный лог:
16:34:21.401 |            | PlazaTrader     | CancelOrder: TransactionId=59303270, Id=2722330316, Price=169650, Balance=1, Security=RIM2@RTS, State=Active
16:34:21.490 |            | POStrategy      | OnOrderPropertyChanged: Balance: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.490;
16:34:21.490 |            | POStrategy      | OnOrderPropertyChanged: CancelTime: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.490;
16:34:21.490 |            | POStrategy      | OnOrderPropertyChanged: State: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.490;
16:34:21.490 |            | POStrategy      | OnOrderChanged: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.490;
16:34:21.555 |            | PlazaTrader     | OnOrdersLogInserted: orderId=2722330316; sessId=4002; moment=2012-03-15 16:34:21.472; status=2102273; action=0; isinId=159336; direction=True; price=169650; amountOperation=1; amountRest=0;
16:34:21.555 |            | POStrategy      | OnOrderPropertyChanged: CancelTime: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.472;
16:34:21.555 |            | POStrategy      | OnOrderPropertyChanged: Balance: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.472;
16:34:21.555 |            | POStrategy      | OnOrderPropertyChanged: State: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.472;
16:34:21.555 |            | POStrategy      | OnOrderChanged: TID=59303270; ID=2722330316; ST=Done/-; L=92; Buy 1/1@169650 RIM2@RTS; CT=2012-03-15 16:34:21.472;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/17264/</id>
    <title type="text">((INotifyPropertyChanged)order).PropertyChanged и искать изменения с &amp;quot;State&amp;quot; </title>
    <published>2012-03-15T10:52:54Z</published>
    <updated>2012-03-15T10:52:54Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;pre&gt;&lt;code class="language-csharp"&gt;((INotifyPropertyChanged)order).PropertyChanged
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;и искать изменения с &amp;quot;State&amp;quot;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/17260/</id>
    <title type="text">Можно ли отследить изменения конкретно Order.State (а не вообще какой-то информации по ордеру)? У ме...</title>
    <published>2012-03-15T10:38:50Z</published>
    <updated>2012-03-15T10:38:50Z</updated>
    <author>
      <name>maximv20</name>
      <uri>https://stocksharp.ru/users/28027/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Можно ли отследить изменения конкретно Order.State (а не вообще какой-то информации по ордеру)? У меня например приходит 2 OnOrderChanged с изменяющися CancelTime. Я же хочу отслеживать только Order.State. Как правильно это делать?&lt;/p&gt;
&lt;p&gt;14:01:05.577 |            | PlazaTrader     | RegisterOrder: TransactionId=50327216, Id=0, Price=174030, Balance=1, Security=RIH2@RTS, State=None
14:01:05.662 |            | PlazaTrader     | New order: TransactionId=50327216, Id=2722005545, Price=174030, Balance=1, Security=RIH2@RTS, State=Active
14:01:05.686 |            | POStrategy      | OnOrderChanged: TID=50327216; ID=2722005545; ST=Active/-; L=84; Buy 1/1@174030 RIH2@RTS;
14:01:05.687 |            | POStrategy      | OnOrderChanged: cancel
14:01:05.687 |            | PlazaTrader     | CancelOrder: TransactionId=50327216, Id=2722005545, Price=174030, Balance=1, Security=RIH2@RTS, State=Active
14:01:05.831 |            | POStrategy      | OnOrderChanged: TID=50327216; ID=2722005545; ST=Done/-; L=84; Buy 1/1@174030 RIH2@RTS; CT=2012-03-15 14:01:05.831;
14:01:05.909 |            | POStrategy      | OnOrderChanged: TID=50327216; ID=2722005545; ST=Done/-; L=84; Buy 1/1@174030 RIH2@RTS; CT=2012-03-15 14:01:05.788;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>