﻿<?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">Не срабатывает правило при регистрации заявки</title>
  <id>~/topic/3323/ne-srabatyvaet-pravilo-pri-registratsii-zayavki/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-16T17:31:07Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3323" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/23630/</id>
    <title type="text">Коллеги, помогите добавляю правило при регистрации ордера. вот кусок кода var order = new Order { Ty...</title>
    <published>2013-01-28T05:22:39Z</published>
    <updated>2013-01-28T05:22:39Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.ru/users/5973/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;IvanV8 &lt;a href="https://stocksharp.ru/posts/m/23627/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&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;

 var order = new Order
                {
                    Type = OrderTypes.Limit,
                    ExpiryDate = now + new TimeSpan(1, 0, 0, 0),   // срок ордера - день
                    Trader = _trader,
                    Portfolio = portfolio,
                    Security = security,
                    Volume = quantaty,
                    Price = selected_p.securities[i].order_price,
                    Direction = d
                };
                //регистрируем ордер
  var ruleRegisterFailed = order.WhenRegisterFailed();
  ruleRegisterFailed
                    .Do(() =&amp;gt; System.Windows.Forms.MessageBox.Show( string.Format(&amp;quot;ОТКАЗ выставления  заявки: {0} инструмент={1},  количество={2}, цена={3} !!!!&amp;quot;,
                    order.Direction.ToString(), order.Security.Code, order.Volume, order.Price), &amp;quot;Ошибка регистрации&amp;quot;, MessageBoxButtons.OK, MessageBoxIcon.Error))
                    .Once() 
                    .Apply(); 
  _trader.RegisterOrder(order);

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;MessageBox не срабатывает. Также не срабатывает никакое другое действие, например вывод сообщения в окно RichTextBox&lt;br /&gt;В чем причина?&lt;br /&gt;Код вызывается в процедуре, в отдельной форме&lt;/div&gt;&lt;/div&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;

.Do(() =&amp;gt; {})
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;

.Do((orderFail) =&amp;gt; {})
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;
.Do(orderFail =&amp;gt; System.Windows.Forms.MessageBox.Show(string.Format(&amp;quot;ОТКАЗ выставления  заявки: {0} инструмент={1},  количество={2}, цена={3} !!!!&amp;quot;, orderFail.Order.Direction.ToString(), orderFail.Order.Security.Code, orderFail.Order.Volume, orderFail.Order.Price), &amp;quot;Ошибка регистрации&amp;quot;, MessageBoxButtons.OK, MessageBoxIcon.Error))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;И лучше вынести обработчик в отдельный именованный метод, для наглядности.&lt;br /&gt;Вместо стандартного построения &lt;b&gt;MessageBox&lt;/b&gt; можно использовать &lt;b&gt;MessageBoxBuilder&lt;/b&gt;, который находится в &lt;b&gt;Ecng.Xaml.dll&lt;/b&gt;.&lt;br /&gt;Вместо &lt;b&gt;string.Format&lt;/b&gt; можно использовать методы-расширения &lt;b&gt;Put()&lt;/b&gt; или &lt;b&gt;PutEx()&lt;/b&gt; класса &lt;b&gt;StringHelper&lt;/b&gt;, находится в &lt;b&gt;Ecng.Common.dll&lt;/b&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;

var order = new Order
                {
                    Type = OrderTypes.Limit,
                    ExpiryDate = now + new TimeSpan(1, 0, 0, 0),   // срок ордера - день
                    Trader = _trader,
                    Portfolio = portfolio,
                    Security = security,
                    Volume = quantaty,
                    Price = selected_p.securities[i].order_price,
                    Direction = d
                };
                //регистрируем ордер
  var ruleRegisterFailed = order.WhenRegisterFailed();
  ruleRegisterFailed
                    .Do(RegisterFail)
                    .Once() 
                    .Apply(); 
  _trader.RegisterOrder(order);


private void RegisterFail(OrderFail orderFail)
{
		new MessageBoxBuilder()
			.Caption(&amp;quot;Ошибка регистрации&amp;quot;)
			.Text(&amp;quot;ОТКАЗ выставления  заявки: {Order.Direction} инструмент={Order.Security.Code},  количество={Order.Volume}, цена={Order.Price} !!!!&amp;quot;.PutEx(orderFail))
			.Owner(this)
			.Error()
			.Show();
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Если &lt;b&gt;ruleRegisterFailed&lt;/b&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;

  var ruleRegisterFailed = order.WhenRegisterFailed();
  ruleRegisterFailed
                    .Do(RegisterFail)
                    .Once() 
                    .Apply(); 
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;

order
	.WhenRegisterFailed()
	.Do(RegisterFail)
	.Once()
	.Apply();
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;P.S.: Использовать &lt;b&gt;MessageBox&lt;/b&gt; не самое удачное решение. &lt;br /&gt;Вместо это лучше использовать какой либо другой контрол для визуального мониторинга.&lt;br /&gt;&lt;a href="http://www.stocksharp.com/doc/html/T_StockSharp_Xaml_Monitor.htm" title="http://www.stocksharp.com/doc/html/T_StockSharp_Xaml_Monitor.htm"&gt;Monitor&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.stocksharp.com/doc/html/T_StockSharp_Xaml_MonitorWindow.htm" title="http://www.stocksharp.com/doc/html/T_StockSharp_Xaml_MonitorWindow.htm"&gt;MonitorWindow&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.stocksharp.com/doc/html/T_StockSharp_Xaml_LogControl.htm" title="http://www.stocksharp.com/doc/html/T_StockSharp_Xaml_LogControl.htm"&gt;LogControl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Посмотреть как с ними работать можно или в примерах, или в справке - &lt;a href="http://www.stocksharp.com/doc/html/82437493-cd53-41eb-b756-d913af0f4f8e.htm" title="http://www.stocksharp.com/doc/html/82437493-cd53-41eb-b756-d913af0f4f8e.htm"&gt;&lt;b&gt;Логирование&lt;/b&gt;&lt;/a&gt;.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23629/</id>
    <title type="text">.Apply(this); Если я верно помню нонешний синтаксис.</title>
    <published>2013-01-28T03:33:17Z</published>
    <updated>2013-01-28T03:33:17Z</updated>
    <author>
      <name>ra81</name>
      <uri>https://stocksharp.ru/users/16581/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
.Apply(this);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Если я верно помню нонешний синтаксис.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23628/</id>
    <title type="text">Обработчики событий в c# назначаются по-другому. </title>
    <published>2013-01-27T19:36:31Z</published>
    <updated>2013-01-27T19:36:31Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Обработчики событий в c# назначаются по-другому. </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23627/</id>
    <title type="text">Коллеги, помогите добавляю правило при регистрации ордера. вот кусок кода var order = new Order { Ty...</title>
    <published>2013-01-27T18:55:18Z</published>
    <updated>2013-01-27T18:55:18Z</updated>
    <author>
      <name>IvanV8</name>
      <uri>https://stocksharp.ru/users/6450/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Коллеги, помогите&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;

 var order = new Order
                {
                    Type = OrderTypes.Limit,
                    ExpiryDate = now + new TimeSpan(1, 0, 0, 0),   // срок ордера - день
                    Trader = _trader,
                    Portfolio = portfolio,
                    Security = security,
                    Volume = quantaty,
                    Price = selected_p.securities[i].order_price,
                    Direction = d
                };
                //регистрируем ордер
  var ruleRegisterFailed = order.WhenRegisterFailed();
  ruleRegisterFailed
                    .Do(() =&amp;gt; System.Windows.Forms.MessageBox.Show( string.Format(&amp;quot;ОТКАЗ выставления  заявки: {0} инструмент={1},  количество={2}, цена={3} !!!!&amp;quot;,
                    order.Direction.ToString(), order.Security.Code, order.Volume, order.Price), &amp;quot;Ошибка регистрации&amp;quot;, MessageBoxButtons.OK, MessageBoxIcon.Error))
                    .Once() 
                    .Apply(); 
  _trader.RegisterOrder(order);

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;MessageBox не срабатывает. Также не срабатывает никакое другое действие, например вывод сообщения в окно RichTextBox&lt;br /&gt;В чем причина?&lt;br /&gt;Код вызывается в процедуре, в отдельной форме</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>