﻿<?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/1061/problemy-s-ostanovkoi-strategii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-20T20:07:16Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=1061" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/3844/</id>
    <title type="text">Свою проблему решил следующим образом: создал список в который добавляются данные из Strategy.Log. д...</title>
    <published>2010-08-26T12:50:00Z</published>
    <updated>2010-08-26T12:50:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Свою проблему решил следующим образом:
создал список в который добавляются данные из Strategy.Log.
добавил таймер на форму и теперь по таймеру синхронизирую гуи и свой
список с логом. пока вроде все работает)&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3843/</id>
    <title type="text">Вот что иногда бывает в лог файле (первые 5 строк): S S 12:33:36.0820929 working 0820929 S запущена....</title>
    <published>2010-08-26T12:39:00Z</published>
    <updated>2010-08-26T12:39:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Вот что иногда бывает в лог файле (первые 5 строк):&lt;/p&gt;
&lt;p&gt;S  S 12:33:36.0820929  working
0820929 S запущена.
S запуS 12:33:36.0977180  working
S 12:33:36.0977180  working
S 12:33:36.1133431  working&lt;/p&gt;
&lt;p&gt;а в OnProcess сделано так:
protected override bool OnProcess()
{
if (this.ProcessState == StrategyProcessStates.Stopping)
return false;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;       int inUse = Interlocked.CompareExchange(ref _inUse, 1, 0);
        if (inUse == 0)
        {
            try
            {
                AddLog(StrategyErrorStates.Error, /
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*DateTime.Now.ToString(&amp;quot;H:mm:ss:fff&amp;quot;) + */&amp;quot; working&amp;quot;, this);
AddLog(StrategyErrorStates.None, /
*DateTime.Now.ToString(&amp;quot;H:mm:ss:fff&amp;quot;) + */&amp;quot; working&amp;quot;, this);
AddLog(StrategyErrorStates.Warning, /
*DateTime.Now.ToString(&amp;quot;H:mm:ss:fff&amp;quot;) + */&amp;quot; working&amp;quot;, this);
}
finally
{
Interlocked.Exchange(ref _inUse, 0);
}
}
return true;
}
а интервал стратегии this.Interval = TimeSpan.Zero;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3842/</id>
    <title type="text">Да, почитал про StreamWriter. Не все так хорошо. Заодно наткнулся на интересный методhttp://msdn.mic...</title>
    <published>2010-08-26T03:20:00Z</published>
    <updated>2010-08-26T03:20:00Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Да, почитал про StreamWriter. Не все так хорошо. Заодно наткнулся на
интересный метод&lt;a href="http://msdn.microsoft.com/en-us/library/system.io.textwriter.synchronized.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/system.io.textwriter.synchronized.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Думаю будет элегантнее, чем вводить в коде свой маркер.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3841/</id>
    <title type="text">Строчки одна за другой, но из разных стратегий, будут идти при любом раскладе -- организовывать в мн...</title>
    <published>2010-08-26T01:05:00Z</published>
    <updated>2010-08-26T01:05:00Z</updated>
    <author>
      <name>Иванов Андрей</name>
      <uri>https://stocksharp.ru/users/28064/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Строчки одна за другой, но из разных стратегий, будут идти при любом
раскладе -- организовывать в многопоточной многопроцессорной среде
ордеринг потоков данных обычно неразумно. Где-то рядом обсуждали про
приход данных об изменении баланса для закрытой сделки или что-то типа
того -- это из той же серии. Если я правильно понял про строки --
каждая строка это одна запись в лог.&lt;/p&gt;
&lt;p&gt;Разрывы в строках да, могут быть. Может быть перемешано. Это в лучшем
случае =) А в худшем можно получить мусор, потому что StreamWriter не
тредсейфовый и можно поломать его состояние. Но такое получить
непросто, надо высокую concurrency иметь, чтобы постоянно ловить.&lt;/p&gt;
&lt;p&gt;Лечится просто.
private object _syncRoot; // вместо этого можно использовать любой
reference type филд&lt;/p&gt;
&lt;p&gt;lock(_syncRoot)
{
_writer.WriteLine(&amp;quot;{0:T} {1}&amp;quot;, DateTime.Now, message);&lt;/p&gt;
&lt;p&gt;Вряд ли синхронизация спасёт автора темы, но с логом всё будет
нормально.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3840/</id>
    <title type="text">А что с ними произойдет? Будут разрыва в строчках? Или просто строчки будут идти одна за другой но и...</title>
    <published>2010-08-25T21:22:00Z</published>
    <updated>2010-08-25T21:22:00Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;А что с ними произойдет? Будут разрыва в строчках? Или просто строчки
будут идти одна за другой но из разных стратегий?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3839/</id>
    <title type="text">Думаю, это когда несколько потоков параллельно пишут в один файл. </title>
    <published>2010-08-25T21:08:00Z</published>
    <updated>2010-08-25T21:08:00Z</updated>
    <author>
      <name>Иванов Андрей</name>
      <uri>https://stocksharp.ru/users/28064/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Думаю, это когда несколько потоков параллельно пишут в один файл.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3838/</id>
    <title type="text">Строки вылазят одна на другую - это как? В LogWindow может быть чуть шустрее, за счет того, что он н...</title>
    <published>2010-08-25T17:00:00Z</published>
    <updated>2010-08-25T17:00:00Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Строки вылазят одна на другую - это как?&lt;/p&gt;
&lt;p&gt;В LogWindow может быть чуть шустрее, за счет того, что он не
конкатенирует текст в контроле, а используется ListView. Попробуйте,
может и хватит скорости. А вообще вариант напрашивается писать в некую
очередь, из которой ГУИ поток выгребает данные и отображает на форме.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3837/</id>
    <title type="text">в файл пишу через StategyLogger все норм. но если часто писать то бывает что строки одна на другую в...</title>
    <published>2010-08-25T16:18:00Z</published>
    <updated>2010-08-25T16:18:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;в файл пишу через StategyLogger все норм. но если часто писать то
бывает что строки одна на другую вылазят) А как обстоят дела с wpf и
LogWindow? там таких проблем нет?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3836/</id>
    <title type="text">А если писать в файл? </title>
    <published>2010-08-25T12:28:00Z</published>
    <updated>2010-08-25T12:28:00Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;А если писать в файл?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3835/</id>
    <title type="text">вызывается минимум раз в секунду, а то и чаще. пробую обновлять данные порциями - не очень информати...</title>
    <published>2010-08-25T12:21:00Z</published>
    <updated>2010-08-25T12:21:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;вызывается минимум раз в секунду, а то и чаще. пробую обновлять данные
порциями - не очень информативно.
видимо нужно придумать прокладку между гуи и логгированием. хотя по
сути логи нужны лишь при тестировании.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3834/</id>
    <title type="text">А как часто вызывается Log событие? Invoke - это ведь синхронизация с ГУИ потоком. Может быть фишка ...</title>
    <published>2010-08-25T12:09:00Z</published>
    <updated>2010-08-25T12:09:00Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;А как часто вызывается Log событие? Invoke - это ведь синхронизация с
ГУИ потоком. Может быть фишка в том, что все время уходит на эту саму
синхронизацию?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3398/</id>
    <title type="text">Михаил, а в чем может быть причина того что во время выполнения стратегии метод ToLog работает норма...</title>
    <published>2010-08-24T23:40:00Z</published>
    <updated>2010-08-24T23:40:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Михаил, а в чем может быть причина того что во время выполнения
стратегии метод ToLog работает нормально, а после OnStopping
происходит зависание?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3397/</id>
    <title type="text">кажется разобрался. я видимо заумно (не правильно) использовал Strategy.Log вот как было: private vo...</title>
    <published>2010-08-24T23:16:00Z</published>
    <updated>2010-08-24T23:16:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;кажется разобрался. я видимо заумно (не правильно) использовал
Strategy.Log
вот как было:&lt;/p&gt;
&lt;p message=""&gt;private void ToLog(string message)
{
if (this.messageBox.InvokeRequired)
{
SetTextDeleg d = new SetTextDeleg(ToLog);
this.Invoke(d, new object[] );
}
else&lt;/p&gt;
&lt;p&gt;messageBox.AppendText(DateTime.Now.ToString(&amp;quot;HH:mm:ss.fff&amp;quot;)+ &amp;quot;: &amp;quot; +
message + &amp;quot;\r\n&amp;quot;);
}&lt;/p&gt;
&lt;p&gt;void Log(Strategy arg1, StrategyErrorStates arg2, string arg3)
{
ToLog(arg3);
}&lt;/p&gt;
&lt;p&gt;strat = new Arbitrage(quik, t1, t2, Convert.ToDouble(textBox1.Text),
1, 20);
strat.Log += new Action&amp;lt;Strategy, StrategyErrorStates, string&amp;gt;(Log);&lt;/p&gt;
&lt;p&gt;избавившись от strat.Log += ... все стало работать нормально.
осталось понять где ошибка. думаю в методе ToLog...&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3396/</id>
    <title type="text">Так прога виснет или стратегия не нотифицирует о своей остановке? Какая версия S#? </title>
    <published>2010-08-24T21:53:00Z</published>
    <updated>2010-08-24T21:53:00Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Так прога виснет или стратегия не нотифицирует о своей остановке?
Какая версия S#?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3395/</id>
    <title type="text">прога виснет. в логах вижу что стратегия останавливается но не вижу что она остановилась. еще раз по...</title>
    <published>2010-08-24T21:41:00Z</published>
    <updated>2010-08-24T21:41:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;прога виснет. в логах вижу что стратегия останавливается но не вижу
что она остановилась. еще раз повторюсь такая ситуация проявляется не
регулярно но довольно часто.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3394/</id>
    <title type="text">А что значит завис? В чем это проявилось? </title>
    <published>2010-08-24T21:31:00Z</published>
    <updated>2010-08-24T21:31:00Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;А что значит завис? В чем это проявилось?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3393/</id>
    <title type="text">после выхода из OnStopping() сразу завис :( </title>
    <published>2010-08-24T21:02:00Z</published>
    <updated>2010-08-24T21:02:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;после выхода из OnStopping() сразу завис :(&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3392/</id>
    <title type="text">ÓÏÂÓÔ×ÅÎÎÁÑ. public class Arbitrage : Strategy { ... ÐÅÒÅÍÅÎÎÙÅ ... public Arbitrage(QuikTrader trad...</title>
    <published>2010-08-24T20:35:00Z</published>
    <updated>2010-08-24T20:35:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;ÓÏÂÓÔ×ÅÎÎÁÑ.
public class Arbitrage : Strategy
{
... ÐÅÒÅÍÅÎÎÙÅ ...
public Arbitrage(QuikTrader trader, TradeSec ts1, TradeSec
ts2, double spreadInPercent, int minimalQty, int maxiQty)
: base()
{
_trader = trader;
this.Interval = TimeSpan.FromSeconds(1);
minQty = minimalQty;
maxQty = maxiQty;
Portf1 = ts1.p;
Portf2 = ts2.p;
ClientCode1 = ts1.client;
ClientCode2 = ts2.client;
Sec1 = ts1.s;
Sec2 = ts2.s;
k1 = ts1.koef;
k2 = ts2.koef;
Spread = spreadInPercent;
md1 = new MarketDepth(Sec1);
md2 = new MarketDepth(Sec2);
_trader.RegisterQuotes(Sec1);
_trader.RegisterQuotes(Sec2);
_trader.QuotesChanged += new
Action&amp;lt;MarketDepth&amp;gt;(_trader_QuotesChanged);
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   void _trader_QuotesChanged(MarketDepth md)
    {
        if (md.Security == Sec1)
        {
            md1 = md;
        }
        if (md.Security == Sec2)
        {
            md2 = md;
        }
    }

   protected override bool OnProcess()
    {
        if (this.ProcessState == StrategyProcessStates.Stopping)
        {
            return false;
        }
        if (!this.buzzy)
        {
            this.buzzy = true;
            var ords = AlgoSpread();
            if (ords != null &amp;amp;&amp;amp; ords.Length &amp;gt;= 2)
            {
                // done ËÌÉÒÉÎÇ?
                if (!Sec1.Exchange.IsTradeTime(Trader) || !
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sec2.Exchange.IsTradeTime(Trader))
{
AddLog(ErrorState, &amp;quot;îÅÔÏÒÇÏ×ÒÅ ×ÒÅÍÑ&amp;quot;, this);
return true;
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;               foreach (Order o in ords)
                {
                    if (o.Portfolio == Portf1)
                        _trader.ClientCode = ClientCode1 + &amp;quot;//&amp;quot; +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;orderParNum.ToString();
else if (o.Portfolio == Portf2)
_trader.ClientCode = ClientCode2 + &amp;quot;//&amp;quot; +
orderParNum.ToString();
else
_trader.ClientCode = &amp;quot;X&amp;quot;;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                   AddLog(ErrorState, &amp;quot;new order &amp;quot; +
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;o.Direction.ToString() + &amp;quot; &amp;quot; +
o.Security.Code + &amp;quot; &amp;quot; + o.Price + &amp;quot; &amp;quot; +
o.Volume,
this);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                   try
                    {
                        RegisterOrder(o);
                    }
                    catch (Exception regOrderError)
                    {
                        AddLog(this.ErrorState, &amp;quot; ïÛÉÂËÁ
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;×ÙÓÔÁ×ÌÅÎÉÑ ÚÁÑ×ËÉ&amp;quot;, this);
AddLog(ErrorState, regOrderError.Message,
this);
}
}
}
this.buzzy = false;
}
return true;
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   protected override void OnRunned()
    {
        base.OnRunned();
        buzzy = false;
    }

   void QuotesChanged(OrderDirections arg1, IDictionary&amp;lt;int,
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quote&amp;gt; arg2)
{
if (!buzzy)
this.OnProcess();
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   protected override void OnStopping()
    {
        Trader.QuotesChanged -= _trader_QuotesChanged;
        base.OnStopping();
    }
&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.ru/posts/m/3391/</id>
    <title type="text">А что за стратегия? Собственная или из примеров? </title>
    <published>2010-08-24T20:21:00Z</published>
    <updated>2010-08-24T20:21:00Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;А что за стратегия? Собственная или из примеров?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/3390/</id>
    <title type="text">Не совсем понимаю почему... ведь первая часть кода вызывается при нажатии кнопки и никак не должна з...</title>
    <published>2010-08-24T20:11:00Z</published>
    <updated>2010-08-24T20:11:00Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Не совсем понимаю почему... ведь первая часть кода вызывается при
нажатии кнопки и никак не должна зацикливаться... или я не прав?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>