﻿<?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/3911/bag-s-sobytiyami-orderov-esli-vystavlyat-ih-rukami-v-kvike/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-19T00:13:32Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3911" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/27430/</id>
    <title type="text">Уважаемые разработчики! Пофиксите, пожалуйста, багу! Ведь даже transactionId каждый раз новый получа...</title>
    <published>2013-09-12T15:37:42Z</published>
    <updated>2013-09-12T15:38:52Z</updated>
    <author>
      <name>Den</name>
      <uri>https://stocksharp.com/users/6003/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Уважаемые разработчики!&lt;/p&gt;
&lt;p&gt;Пофиксите, пожалуйста, багу!
Ведь даже transactionId каждый раз новый получается и workaround не написать...&lt;/p&gt;
&lt;p&gt;Фикс - это один if:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;			
var isNew = false;

Order order = _cache.TryGetOrder(security, id);
                        
if (order == null) 
{

			order = _cache.GetOrder(security, id, key =&amp;gt;
			{
				isNew = true;

				var o = createOrder(key);

				if (o == null)
					throw new InvalidOperationException(&amp;quot;Заявка под номером {0} не была создана.&amp;quot;.Put(id));

				o.LatencyRegistration = o.GetLatency(true);

				o.Trader = this;

				if (o.ExtensionInfo == null)
					o.ExtensionInfo = new Dictionary&amp;lt;object, object&amp;gt;();

				return o;
			});
}                        
var isChanged = changeOrder(order);


&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/27313/</id>
    <title type="text">Нашел где надо пофиксить багу. BaseTrader, метод protected Order GetOrder(Security security, long id...</title>
    <published>2013-09-05T11:04:10Z</published>
    <updated>2013-09-05T11:35:24Z</updated>
    <author>
      <name>Den</name>
      <uri>https://stocksharp.com/users/6003/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Нашел где надо пофиксить багу.
&lt;strong&gt;BaseTrader&lt;/strong&gt;, метод &lt;strong&gt;protected Order GetOrder(Security security, long id, Func&amp;lt;long, Order&amp;gt; createOrder, Func&amp;lt;Order, bool&amp;gt; changeOrder)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Всегда присваивается &lt;strong&gt;isNew = true&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;			var order = _cache.GetOrder(security, id, key =&amp;gt;
			{
				isNew = true;

				var o = createOrder(key);

				if (o == null)
					throw new InvalidOperationException(&amp;quot;Заявка под номером {0} не была создана.&amp;quot;.Put(id));

				o.LatencyRegistration = o.GetLatency(true);

				o.Trader = this;

				if (o.ExtensionInfo == null)
					o.ExtensionInfo = new Dictionary&amp;lt;object, object&amp;gt;();

				return o;
			});

			var isChanged = changeOrder(order);

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Далее идет проверка, которая ВСЕГДА будет кидать NewOrder:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;			if (isNew)
			{
				if (order.TransactionId != 0)
				{
					AddOrderByTransactionId(order);
				}

				RaiseNewOrder(order);
			}
			else if (isChanged)
				RaiseOrderChanged(order);


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Для фикса видимо нужно сначала поискать ордер в кэше, и только если его нет создавать...&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27098/</id>
    <title type="text">S# 4.1.17 Quik 6.7.3.2 Настройки трейдера: // включаем асинхронный режим (не ждем Order.Id от биржи)...</title>
    <published>2013-08-22T16:30:07Z</published>
    <updated>2013-08-23T18:47:45Z</updated>
    <author>
      <name>Den</name>
      <uri>https://stocksharp.com/users/6003/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;S# 4.1.17
Quik 6.7.3.2
Настройки трейдера:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
// включаем асинхронный режим (не ждем Order.Id от биржи)
   this.Trader.IsAsyncMode = true;

// включаем поддержку режима ручных заявок 
   this.Trader.SupportManualOrders = true;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Выставляю руками заявку в стакан (заведомо неисполнимую, остается висеть в стакане).
Корректно прилетает &lt;strong&gt;NewOrders&lt;/strong&gt;. У ордера State: Active&lt;/p&gt;
&lt;p&gt;Снимаю руками заявку.
Опять прилетает &lt;strong&gt;NewOrders&lt;/strong&gt;. У ордера State: Done;  Cancelled: True
Событие &lt;strong&gt;OrdersChanged&lt;/strong&gt;не приходит...&lt;/p&gt;
&lt;p&gt;Если ордер исполняется частично тоже прилетает &lt;strong&gt;NewOrders&lt;/strong&gt; с Partially: True и правильным балансом&lt;/p&gt;
&lt;p&gt;В случает когда ордер исполняется опять прилетает &lt;strong&gt;NewOrders&lt;/strong&gt; с Matched: True  Balance: 0  State: Done&lt;/p&gt;
&lt;p&gt;P.S. для &lt;strong&gt;стоп&lt;/strong&gt;-ордеров, выставленных руками в квике, все работает правильно...&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>