﻿<?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">Баг в EmulationTrader</title>
  <id>~/topic/3425/bag-v-emulationtrader/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-06T02:21:16Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3425" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/24229/</id>
    <title type="text">Накатил 4.1.8 проблема пропала. Спасибо. </title>
    <published>2013-02-26T05:19:09Z</published>
    <updated>2013-02-26T05:19:09Z</updated>
    <author>
      <name>AASorokovoy</name>
      <uri>https://stocksharp.ru/users/6304/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Накатил 4.1.8 проблема пропала.&lt;br /&gt;Спасибо. </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24226/</id>
    <title type="text">При использовании EmulationTrader наблюдаются следующие проблемы (наблюдал на версия 4.1.7, но судя ...</title>
    <published>2013-02-25T17:55:47Z</published>
    <updated>2013-02-25T17:55:47Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;AASorokovoy &lt;a href="https://stocksharp.ru/posts/m/24212/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;При использовании EmulationTrader наблюдаются следующие проблемы (наблюдал на версия 4.1.7, но судя по сорцам проявиться и в 4.1.8) &lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Посмотрите релиз 4.1.8 Там есть такая проблема?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24212/</id>
    <title type="text">При использовании EmulationTrader наблюдаются следующие проблемы (наблюдал на версия 4.1.7, но судя ...</title>
    <published>2013-02-25T09:57:58Z</published>
    <updated>2013-02-25T09:57:58Z</updated>
    <author>
      <name>AASorokovoy</name>
      <uri>https://stocksharp.ru/users/6304/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">При использовании EmulationTrader наблюдаются следующие проблемы (наблюдал на версия 4.1.7, но судя по сорцам проявиться и в 4.1.8) &lt;br /&gt;&lt;br /&gt;Заявка отправляется в эмулятор.&lt;br /&gt;Получает статус Active и после этого зависает (Не вызывает никаких событий, не исполняется и не отменяется). &lt;br /&gt;При изучении логов наталкиваемся на сообщение &lt;br /&gt;&amp;quot;Невозможно зарегистрировать заявку {0}: нет ни стаканов ни последней цены.&amp;quot; Что выводит нас на код в MarketEmulator&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

	if (depth == null)
				{
					// без стакана маркетные(они всегда новые) и новые лимитные-в-рынок матчатся по посл. сделке
					var last = si.LastTrade;

					if (last != null &amp;amp;&amp;amp; last.Price != 0)
					{
						EvaluateByLast(order, last);
						//if (EvaluateByLast(order, last))
						//	return true;
					}
					else
					{	
						// если нет никаких цен, то фэйл
						ProcessError(order,action, new InvalidOperationException(&amp;quot;Невозможно зарегистрировать заявку {0}: нет ни стаканов ни последней цены.&amp;quot;.Put(order.TransactionId)));
						si.Remove(newNode);
					}
				}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;внутри функции: private void EvaluateNew(Order order, OrderTraceActions action) ( MarketEmulator.cs:1568 )&lt;br /&gt;&lt;br /&gt;Здесь мы видим, что при наступлении некоторого условия, пытаемся сделать статус заявки Fail.&lt;br /&gt;&lt;br /&gt;Далее смотрим кто вызывает эту функцию. Вызывается она в одном единственном месте. Там написано, что то типа:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

					if (state.State != OrderStates.Active)
						throw new InvalidOperationException(&amp;quot;State!=Active&amp;quot;);
					EvaluateNew(state, action);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Что наталкивает нас на мысль, что при выполнении верхнего участка кода статус заявки ВСЕГДА будет Active. Что при выполнении ветки &lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

                    else
                    {   
                        // если нет никаких цен, то фэйл
                        ProcessError(order,action, new InvalidOperationException(&amp;quot;Невозможно зарегистрировать заявку {0}: нет ни стаканов ни последней цены.&amp;quot;.Put(order.TransactionId)));
                        si.Remove(newNode);
                    }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Приведет к тому, что мы попытаемся Active заявку перевести в состояние Fail что противоречит логике работы объекта Order (и что выливается в ошибки при ее обработке объектом Strategy и т.п.)&lt;br /&gt;&lt;br /&gt;Предлагаю правку: &lt;br /&gt;Код MarketEmulator &lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

private void EvaluateNew(Order order, OrderTraceActions action)
		{
			var si = GetSecurityAuction(order.Security);
			
			var newNode = si.PutInQueue(order);	// запоминаем тк надо сделки потом сводить по этим заявкам

			try
			{
				var depth = si.GetDepth(si);

				if (EvaluateConditional(depth, order))
					return/* true*/;

				if (EvaluateByDepth(order, depth, true))
					return/* true*/;

				if (depth == null)
				{
					// без стакана маркетные(они всегда новые) и новые лимитные-в-рынок матчатся по посл. сделке
					var last = si.LastTrade;

					if (last != null &amp;amp;&amp;amp; last.Price != 0)
					{
						EvaluateByLast(order, last);
						//if (EvaluateByLast(order, last))
						//	return true;
					}
					else
					{	
						// если нет никаких цен, то фэйл
						ProcessError(order,action, new InvalidOperationException(&amp;quot;Невозможно зарегистрировать заявку {0}: нет ни стаканов ни последней цены.&amp;quot;.Put(order.TransactionId)));
						si.Remove(newNode);
					}
				}
			}
			catch (Exception e)
			{
				ProcessDataError(e);
			}

			//return false;
		}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;заменить на &lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

private void EvaluateNew(Order order, OrderTraceActions action)
		{
			var si = GetSecurityAuction(order.Security);
			
			var newNode = si.PutInQueue(order);	// запоминаем тк надо сделки потом сводить по этим заявкам

			try
			{
				var depth = si.GetDepth(si);

				if (EvaluateConditional(depth, order))
					return/* true*/;

				if (EvaluateByDepth(order, depth, true))
					return/* true*/;

				if (depth == null)
				{
					// без стакана маркетные(они всегда новые) и новые лимитные-в-рынок матчатся по посл. сделке
					var last = si.LastTrade;
					if (last != null &amp;amp;&amp;amp; last.Price != 0)
						EvaluateByLast(order, last);
                           }

			}
			catch (Exception e)
			{
				ProcessDataError(e);
			}

			//return false;
		}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Что дает стабильную работу, по крайней мере на моих тестах. </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>