﻿<?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">Событие OrderChanged + MyTrades</title>
  <id>~/topic/1638/sobytie-orderchanged--mytrades/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-04T09:20:05Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=1638" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/8705/</id>
    <title type="text">Доброго времени суток! Михаил, просветите, пожалуйста(((</title>
    <published>2011-06-08T14:07:03Z</published>
    <updated>2011-06-08T14:07:03Z</updated>
    <author>
      <name>Артем_2</name>
      <uri>https://stocksharp.com/users/27723/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Доброго времени суток! &lt;br /&gt;&lt;br /&gt;Михаил, просветите, пожалуйста(((</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/8610/</id>
    <title type="text">Добрый день! Версия 3.1.8 Trader.IsAsyncMode = false; Обнаружил непонятную ситуацию в работе события...</title>
    <published>2011-06-05T08:19:11Z</published>
    <updated>2011-06-05T08:21:28Z</updated>
    <author>
      <name>Артем_2</name>
      <uri>https://stocksharp.com/users/27723/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Добрый день!&lt;br /&gt;&lt;br /&gt;Версия 3.1.8&lt;br /&gt;Trader.IsAsyncMode = false;&lt;br /&gt;&lt;br /&gt;Обнаружил непонятную ситуацию в работе события OrderChanged  для Strategy, суть следующая:&lt;br /&gt;В моей зааче необходимо приявязать алгоритм стратегии к цене последней сделки по заявке. Например. объем заявки 100 контрактов, при срабатывании заявки в таблице Мои сделки появлется несколько сделок с объемом 25, 25 и 50, вот мне необходимо привязаться к цене последней сделки (50). Для решения задачи я добавил обработчик события OrderChanged в стратегию и в нем проверяю статус заявки...- Когда он равен OrderStates.Done, пытаюсь получить последнюю сделку по зявке, но ничего не получается т.к.:&lt;br /&gt;1) Когда в OrderChanged  заявка становится Done, в коллекции Strategy.MyTrades или Trader.MyTrades последней сделки по зявке может еще не быть, более того вообще сделок может не быть по этой заявке. Т.е. если в этот момент  просуммировать объем контрактов по сделкам, то он не равен объему заявки.&lt;br /&gt;2) Событие OrderChanged  может возникать несколько раз, для заявки со статусом Done&lt;br /&gt;&lt;br /&gt;Код для теcта следующий:&lt;br /&gt;&lt;br /&gt;private void OptionCorrection_OrderChanged(Ecng.Trading.BusinessEntities.Order Order)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            Boolean _orderIsDone = Order.State == Ecng.Trading.BusinessEntities.OrderStates.Done;&lt;br /&gt;            if (_orderIsDone)&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;                var _my_trade = GetLastDoneTrade(&amp;quot;Отрисовка&amp;quot;, Order);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;  public Ecng.Trading.BusinessEntities.MyTrade GetLastDoneTrade(String Sender_method, Ecng.Trading.BusinessEntities.Order Order)&lt;br /&gt;        {&lt;br /&gt;            DateTime _start_time = DateTime.Now;&lt;br /&gt;            String _method_msg_view = &amp;quot;---[GetLastDoneTrade] вызов из &amp;lt;&amp;quot; + Sender_method + &amp;quot;&amp;gt; Заявка &amp;quot; + Order.ToView() + &amp;quot;--&amp;gt;&amp;quot;;&lt;br /&gt;&lt;br /&gt;            IEnumerable&amp;lt;Ecng.Trading.BusinessEntities.MyTrade&amp;gt; _order_trades = null;&lt;br /&gt;&lt;br /&gt;            int _counter = 0;&lt;br /&gt;            while (_counter &amp;lt; 1000)&lt;br /&gt;            {&lt;br /&gt;                _counter++;&lt;br /&gt;                _order_trades = Trader.MyTrades.Where(t =&amp;gt; t.Order.Id == Order.Id);&lt;br /&gt;                int _volume = _order_trades.Sum(o =&amp;gt; o.Trade.Volume);&lt;br /&gt;                if (_volume == Order.Volume)&lt;br /&gt;                {&lt;br /&gt;                    //Все ОК, Сумма МОИХ сделок равна объему заявки&lt;br /&gt;                    break;&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    System.Threading.Thread.Sleep(100);&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                QuickExhanger.Сообщить(_method_msg_view + &amp;quot;попытка № &amp;lt;&amp;quot; + _counter.ToString() &lt;br /&gt;                    + &amp;quot;&amp;gt; --&amp;gt; Не было всех Моих сделок, когда заявка уже исполнилась&amp;quot;,Globals.СтатусСообщения.Важное);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if (_order_trades != null &amp;amp;&amp;amp; _order_trades.Count() &amp;gt; 0)&lt;br /&gt;            {&lt;br /&gt;                long _last_trade_ID = (long)_order_trades.Max(t =&amp;gt; t.Trade.Id);&lt;br /&gt;                this.QuickExhanger.Сообщить(_method_msg_view + &amp;quot;время исполнения метода &amp;quot; + (DateTime.Now - _start_time).TotalMilliseconds.ToString() + &amp;quot; мс&amp;quot;);&lt;br /&gt;                return _order_trades.Where(m =&amp;gt; m.Trade.Id == _last_trade_ID).FirstOrDefault();&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                this.QuickExhanger.Сообщить(_method_msg_view + &amp;quot; не смогли определить последнюю сделку по заявке&amp;quot;, Globals.СтатусСообщения.Важное);&lt;br /&gt;                this.QuickExhanger.Сообщить(_method_msg_view + &amp;quot;время исполнения метода &amp;quot; + (DateTime.Now - _start_time).TotalMilliseconds.ToString() + &amp;quot; мс&amp;quot;);&lt;br /&gt;                return Trader.MyTrades.Where(t =&amp;gt; t.Order.Id == Order.Id).LastOrDefault();&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Вопросы следующие:&lt;br /&gt;1) Является ли нормальной ситуацией. что OrderChanged может срабатывать еще несколько раз, после того как заявка становится Done, или это является ошибкой? Если ошибкой, то можно ли рассчитывать, что она будет устранена в будущих обновлениях S#&lt;br /&gt;2) Является ли ошибкой, что при изменении статуса заявки на Done в событии OrderChanged, всех сделок по заявке в коллекции MyTrdes для Strategy или Trader может не быть? Если это ошибка, можно ли рассчитывать, что она будет устранена в будущих обновлениях S#&lt;br /&gt;&lt;br /&gt;Заранее благодарю за ответ!</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>