﻿<?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/3372/rabota-s-sobstvennymi-pravilami/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-30T00:42:35Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3372" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/23954/</id>
    <title type="text">Версия 4.0.23 уже давно не поддерживается, текущая актуальная версия - 4.1.8. При переходе на 4.1 бы...</title>
    <published>2013-02-12T05:51:20Z</published>
    <updated>2013-02-12T05:51:20Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.ru/users/5990/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Версия 4.0.23 уже давно не поддерживается, текущая актуальная версия - 4.1.8. При переходе на 4.1 было множество изменений в правилах.&lt;br /&gt;&lt;br /&gt;Если нет возможности перейти на последнюю версию, попробуйте упростить ваш код, т.к. в нем много различных объектов синхронизации, возможно из-за них и возникают дедлоки.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23943/</id>
    <title type="text"> //Правило регистрации заявки с подтверждением ее регистрации и получения сделок //после регистрации...</title>
    <published>2013-02-11T17:06:37Z</published>
    <updated>2013-02-11T17:28:14Z</updated>
    <author>
      <name>bogoslovsvb</name>
      <uri>https://stocksharp.ru/users/26881/</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;

//Правило регистрации заявки с подтверждением ее регистрации и получения сделок
//после регистрации заявки вызывется метод Activate(_close) но прикрепленное действие активируется через раз если не ставить задержку sleep(220)
 // какие то проблемы в синхронизации ?
// версия s# - 4.0.23
        private sealed class RegisterOrderRule : StrategyRule&amp;lt;CloseOrder&amp;gt; //CloseOrder, EMAIO - собственные классы
        {
            private CloseOrder _Close;
            private bool terminated = false;
            private readonly AutoResetEvent ev = new AutoResetEvent(false);
            private Thread _thread;
            private EMAIO emaIO
            {
                get { return (EMAIO)_Close.Strat.Fantom; }
            }

            public RegisterOrderRule(CloseOrder Close)
            {
                _Close = Close;
                init();
            }

            protected override void DisposeManaged()
            {
                terminated = true;
                _isfail = true;
                _isregistry = true;
                IsNewTrade = true;
                //_Close.IsTerminate = true;
                //_Close.Strat.Trader.PositionsChanged -= PosChange;
                ev.Set();
                if (emaIO.IsTraining)
                    _Close.OnChange -= Emulate;
                foreach (var rule in rules)
                    try
                    {
                        if (_Close.Strat.Rules.FirstOrDefault(p =&amp;gt; p == rule) != null)
                            _Close.Strat.Rules.Remove(rule);
                        rule.Dispose();
                    }
                    catch
                    {
                    }
                
                base.DisposeManaged();
            }

            public void RegisterOrder(Order order)
            {
                MethodInfo met = _Close.Strat.GetType().GetMethod(&amp;quot;Register_Order&amp;quot;, BindingFlags.Instance | BindingFlags.Public);
                if (met != null)
                    met.Invoke(_Close.Strat, new object[] { order });
            }

            bool IsNewTrade = false;
            bool _isregistry = false;
            bool _isfail = false;
            private readonly object sync = new object();
            List&amp;lt;IStrategyRule&amp;gt; rules = new List&amp;lt;IStrategyRule&amp;gt;();
            private void init()
            {
                if (!emaIO.IsTraining)
                {
                    //Регистрируются правила на регистрацию заявки и на получение сделок   
                    rules.Add(_Close.Strat.When(_Close.order.Registered())
                       .Do(ReactRegistry).Periodical(() =&amp;gt; _isregistry));
                    rules.Add(_Close.Strat.When(_Close.order.RegisterFailed())
                       .Do(ReactRegistryFail).Periodical(() =&amp;gt; _isfail));
                    IsNewTrade = false;
                    rules.Add(_Close.Strat.When(_Close.order.NewTrades())
                        .Do(ReactNewTrades).Periodical(() =&amp;gt; IsNewTrade));
                    _Close.Strat.Trader.RegisterOrder(_Close.order);
                }
            }
            private void Actives()
            {
                lock (sync)
                    try
                    {
                        this.Activate(_Close);
                    }
                    catch
                    {
                    }
            }

            private void ReactNewTrades(IEnumerable&amp;lt;MyTrade&amp;gt; trades)
            {
                foreach (var my in trades)
                    my.ExtensionInfo.Clear();
                _Close.MyTrades = _Close.MyTrades == null ? trades.ToList() : _Close.MyTrades.Union(trades.ToList()).ToList();

                decimal sum = _Close.MyTrades.Sum(p =&amp;gt; p.Trade.Volume);
                if (sum &amp;gt;= _Close.order.Volume)
                {
                    _Close.IsTerminate = true;
                    _Close.IsAbort = false;
                    IsNewTrade = true;
                    _Close.TypAction = TypeActionClose.CreateOrderInfo | TypeActionClose.CreateProfitLoss;
                    _Close.ResultTrade = TypeBalance.All;
                }
                else
                {
                    sum = 0;
                    _Close.ResultTrade = TypeBalance.Partial;
                }
                lock (syncSave)
                    try
                    {
                        _Close.IsAbort = false;
                        _Close.StatusProcess = StatusMarketOrder.Trade;
                        Actives();
                    }
                    catch (Exception ex)
                    {
                        _Close.Strat.AddErrorLog(ex);
                    }
            }
            private readonly object syncSave = new object();
            private bool _saved = false;
            private void ReactRegistry(Order order)
            {
                _isregistry = true;
                _Close.StatusProcess = StatusMarketOrder.Register;
                TimeSpan.FromMilliseconds(220).Sleep();
       //после регистрации заявки вызывется метод Activate(_close) но прикрепленное действие активируется через раз если не ставить задержку sleep(220)
       // какие то проблемы в синхронизации ?
                Actives();
            }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23942/</id>
    <title type="text">Код невозможно читать. Отформатируйте пожалуйста (шестая кнопка в редакторе сообщения).</title>
    <published>2013-02-11T15:48:09Z</published>
    <updated>2013-02-11T15:48:09Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Код невозможно читать. Отформатируйте пожалуйста (шестая кнопка в редакторе сообщения).</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23939/</id>
    <title type="text">Покажите код, который воспроизводит эту проблему.</title>
    <published>2013-02-11T12:12:38Z</published>
    <updated>2013-02-11T12:12:38Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.ru/users/5990/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Покажите код, который воспроизводит эту проблему.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23936/</id>
    <title type="text">При вызове метода StrategyRule.Activate() &amp;quot;изнутри&amp;quot; кода собственного правила не всегда вызывается п...</title>
    <published>2013-02-11T11:08:38Z</published>
    <updated>2013-02-11T11:08:38Z</updated>
    <author>
      <name>bogoslovsvb</name>
      <uri>https://stocksharp.ru/users/26881/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">При вызове метода StrategyRule.Activate() &amp;quot;изнутри&amp;quot; кода собственного правила не всегда вызывается прикрепленное к нему действие  (.Do(MyAction)), но если перед вызовом StrategyRule.Activate() поставить задержку ~200mls, действие (MyAction) будет вызываться гарантированно. Как уйти от этой неопределенности</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>