﻿<?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">StopLoss и тестирование на истории</title>
  <id>~/topic/3006/stoploss-i-testirovanie-na-istorii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-21T15:41:55Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3006" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/21421/</id>
    <title type="text">Gii: все остальное как в первом сообщении, логи прикрепил. Интересовали логи именно стратегии, где п...</title>
    <published>2012-09-18T09:02:46Z</published>
    <updated>2012-09-18T09:02:46Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(21372)" rel="nofollow" target="_blank"&gt;Gii&lt;/a&gt;:&lt;/strong&gt;
все остальное как в первом сообщении, логи прикрепил.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&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.com/posts/m/21372/</id>
    <title type="text">Mikhail Sukhov: Gii: Mikhail Sukhov: Можете проверить, изменилось ли поведение после последнего комм...</title>
    <published>2012-09-14T15:01:50Z</published>
    <updated>2012-09-14T15:01:50Z</updated>
    <author>
      <name>Gii</name>
      <uri>https://stocksharp.com/users/5912/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(21360)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(21352)" rel="nofollow" target="_blank"&gt;Gii&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(21345)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Можете проверить, изменилось ли поведение после последнего коммита?
Добрый день!
Михаил извините, но я не совсем понял что вы имели в виду под &amp;quot;коммит&amp;quot;, если build 19259 то не помогло.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;С уважением GII&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Тогда разберем ситуацию. Можно привести более короткий диапазон времени (час-полчаса) для теста? И лог за непосредственно неправильный период, должно быть где-то порядка нескольких минут, если у вас стоп не очень большой.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Добрый день!&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;var timeFrame = TimeSpan.FromMinutes(2);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;все остальное как в первом сообщении, логи прикрепил.&lt;/p&gt;
&lt;p&gt;Михаил не могли бы вы решить еще одну проблему, при использовании новых сборок начиная 18833 при компилировании кода (индикаторов)&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;MacdH.Process((DecimalIndicatorValue) candle.ClosePrice);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;выдается ошибка&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ошибка	1	Тип &amp;quot;StockSharp.Algo.Indicators.DecimalIndicatorValue&amp;quot; существует как в &amp;quot;c:\Users\Gii\Documents\Visual Studio 2010\Projects\Pulse v4.5 (SS 4-1-4 bild 0 NewChart)\WpfApplication1\bin\Debug\StockSharp.Algo.Indicators.dll&amp;quot;, так и в &amp;quot;i:\C#\StockSharp\Дистрибутивы\stocksharp-19263\trunk\References\StockSharp.Algo.dll&amp;quot;	C:\Users\Gii\Documents\Visual Studio 2010\Projects\Pulse v4.5 (SS 4-1-4 bild 0 NewChart)\WpfApplication1\PulseStrategy.cs	217	32	Pulse&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;С уважением GII.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21360/</id>
    <title type="text">Gii: Mikhail Sukhov: Можете проверить, изменилось ли поведение после последнего коммита? Добрый день...</title>
    <published>2012-09-14T10:12:04Z</published>
    <updated>2012-09-14T10:12:04Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(21352)" rel="nofollow" target="_blank"&gt;Gii&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(21345)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Можете проверить, изменилось ли поведение после последнего коммита?
Добрый день!
Михаил извините, но я не совсем понял что вы имели в виду под &amp;quot;коммит&amp;quot;, если build 19259 то не помогло.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;С уважением GII&lt;/p&gt;
&lt;/blockquote&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/21352/</id>
    <title type="text">Mikhail Sukhov: Можете проверить, изменилось ли поведение после последнего коммита? Добрый день! Мих...</title>
    <published>2012-09-13T22:38:02Z</published>
    <updated>2012-09-13T22:38:02Z</updated>
    <author>
      <name>Gii</name>
      <uri>https://stocksharp.com/users/5912/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(21345)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Можете проверить, изменилось ли поведение после последнего коммита?
Добрый день!
Михаил извините, но я не совсем понял что вы имели в виду под &amp;quot;коммит&amp;quot;, если build 19259 то не помогло.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;С уважением GII&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21345/</id>
    <title type="text">Можете проверить, изменилось ли поведение после последнего коммита? </title>
    <published>2012-09-13T14:05:37Z</published>
    <updated>2012-09-13T14:05:37Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</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.com/posts/m/21339/</id>
    <title type="text">Посмотрим, спасибо за конкретные исходники на которых можно попытаться воспроизвести </title>
    <published>2012-09-13T10:41:58Z</published>
    <updated>2012-09-13T10:41:58Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</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.com/posts/m/21329/</id>
    <title type="text">Добрый день! Суть проблемы, начиная с версии StockSharp 4.1.3 (далее SS) не работает StopLoss,причем...</title>
    <published>2012-09-12T17:24:42Z</published>
    <updated>2012-09-12T17:32:30Z</updated>
    <author>
      <name>Gii</name>
      <uri>https://stocksharp.com/users/5912/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день!
Суть проблемы, начиная с версии StockSharp 4.1.3 (далее SS) не работает StopLoss,причем только с EmulationTrader. Более корректно - при включенном IsTrailing = true,  StopLoss ведет себя как будто IsTrailing отключен. Конечно это суждение основанное только на результатах теста, что реально происходит мне неизвестно.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Для приготовления теста взят &amp;quot;SampleHistoryTesting&amp;quot; &amp;quot;SS 4.1.4&amp;quot; из него удален класс SmaStrategy и вставлен простой класс для тестирования  StopLoss приведенный ниже.&lt;/li&gt;
&lt;li&gt;Тестирование проводилось на всех SS начиная с версии &amp;quot;SS 4.1.2&amp;quot;  и заканчивая &amp;quot;SS 4.1.4 bild 19213&amp;quot;&lt;/li&gt;
&lt;li&gt;Тестирование проводилось на одних и тех же данных &amp;quot;SBER@EQBR&amp;quot; 02.05.12 по 10.08.12. Тиковые сделки получены через программу &amp;quot;Hydra (SS 4.1.3)&amp;quot;, а так же &amp;quot;RIU9@RTS&amp;quot;&lt;/li&gt;
&lt;li&gt;Тестирование проводилось с разными значениями ProtectiveLevel начиная с минимального =Security.MinStepSize.&lt;/li&gt;
&lt;li&gt;Для исключения влияния характера исходных данных на полученный результат менялась дата начала теста. Картина в целом оставалась такой же, менялось только количество сделок StopLoss стратегии совершенных в начале тестирования.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Результаты тестирования&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;В версии &amp;quot;SS 4.1.2&amp;quot; получен адекватный результат, ниже приведен фрагмент лога и картинка работы стратегии&lt;/li&gt;
&lt;li&gt;Начиная с версии &amp;quot;SS 4.1.3&amp;quot; результаты были повторяющимися но не соответствующими ожиданиям в приведенном ниже логе и на картинке видно как StopLoss срабатывает один раз а затем после следующей сделки находясь в активном режиме не реагирует на изменение цены даже при ProtectiveLevel=Security.MinStepSize.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;С уважением GII&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Logging;
using StockSharp.Algo;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;

namespace SampleHistoryTesting
{
    class MyStopLossStrategy : Strategy
    {
        private readonly CandleSeries _series;
        private readonly TimeSpan _timeFrame;
        private Exchange _excheng;
        private Random _random;
        private Order _order=new Order();
        private static readonly object Locker = new object ();

        public MyStopLossStrategy( CandleSeries series, TimeSpan timeFrame )
        {
            _series = series;
            _timeFrame = timeFrame;
        }

        protected override void OnStarted()
        {
            _excheng = Security.Exchange;
            _series
                .WhenCandlesFinished ()
                .Do ( ProcessCandle ).Apply ( this );
            
            // Инициализируем генератор случ величин
            _random = new Random ( 1 );
            base.OnStarted ();
        }

        private void ProcessCandle( Candle candle )
        {

            /* Три условия вхождения в сделку 
             * 1. пришла последняя свечка
             * 2. Protective стратегия больше не активна
             */
            var lastTime = _timeFrame.GetCandleBounds ( Trader.GetMarketTime (_excheng) ).Min - _timeFrame;

            #region InfoLog
            this.AddInfoLog(string.Format(&amp;quot;LastTime / candle.OpenTime // {0} / {1} //&amp;quot;, lastTime, candle.OpenTime));
            this.AddInfoLog(string.Format(&amp;quot;StopLoss (активна -true) = {0}&amp;quot;, IsActiveChildStrat()));
            #endregion

            lock (Locker)
            {
                //var lastTime = Trader.GetMarketTime ( _excheng );
                //var endInterval = candle.CloseTime + TimeSpan.FromSeconds ( 5 );
                if (lastTime &amp;lt;= candle.OpenTime)
                {
                    if (_order.State == OrderStates.Active) CancelActiveOrders ();
                    if (!IsActiveChildStrat ())
                    {
                        _order = null;
                        // Определяем направление сделки
                        var rd = 1 - 2 * _random.NextDouble (); // -1 &amp;lt; rd &amp;lt; 1
                        var direction = OrderDirections.Sell;
                        if (rd &amp;gt;= 0) direction = OrderDirections.Buy;
                        _order = this.CreateOrder ( direction, (decimal)Security.GetCurrentPrice ( direction ), Volume );
                        //Обрабатываем новые сделки только от _order.
                        _order.WhenNewTrades ().Do ( NewMyTrade ).Apply ( this );
                        RegisterOrder ( _order );
                        this.AddOrderInfoLog ( _order, &amp;quot;&amp;quot; );
                    }
                }
            }
        }

        private void NewMyTrade( IEnumerable&amp;lt;MyTrade&amp;gt; trades )
        {
            try
            {
                lock (Locker)
                {
                    var trade = trades.Last ();
                    
                    var sl = new StopLossStrategy ( trade, (int)UnitTypes.Absolute )
                        {
                            IsTrailing = true,
                            ProtectiveLevel =Security.MinStepSize,
                            Security = Security,
                        };
                    
                    // Удоляем следы работы дочерней стратегии
                    sl.WhenStopped ().Do ( strategy =&amp;gt;
                        {
                            ChildStrategies.Remove ( strategy );
                            this.AddInfoLog ( string.Format ( &amp;quot;Кол. StopLoss активных стратегий = {0}&amp;quot;,ChildStrategies.Count));
                        } ).Once ().Apply ( this );
                    ChildStrategies.Add ( sl );

                    this.AddInfoLog ( string.Format ( &amp;quot;ProtectivePrice / ProtectiveDirection= //{0} / {1} &amp;quot;, sl.ActivationPrice.ToString(&amp;quot;F2&amp;quot;), sl.ProtectiveDirection.ToString() ) );
                    this.AddInfoLog ( string.Format ( &amp;quot;StopLoss = {0}&amp;quot;, sl.IsActivated.ToString() ) );
                }
            }
            catch (Exception e)
            {
                this.AddErrorLog ( string.Format ( &amp;quot;&amp;lt;NewMyTrade&amp;gt; Err {0}&amp;quot;, e ) );
            }
        }

        /* Метод проверяет активность одной из нескольких стратегий, 
        * если хотя бы одна активна возвращает true
        */
        public bool IsActiveChildStrat()
        {
            try
            {
                if (ChildStrategies.Count == 0) return false;
                if (ChildStrategies.Count &amp;gt; 0) return true;
                /* 
                if (ChildStrategies.Any ( childStrategy =&amp;gt; childStrategy.ProcessState == ProcessStates.Started || childStrategy.ProcessState == ProcessStates.Stopping ))
                {
                    return true;
                }
                */
            }
            catch (Exception e)
            {
                this.AddErrorLog ( string.Format ( &amp;quot;&amp;lt;IsActiveChildStrat&amp;gt; Err {0}&amp;quot;, e ) );
            }
            return false;
        }

        protected override void OnStopping()
        {
            //останавливаем все доч. стратегии
            foreach (var str in ChildStrategies) { str.Stop (); }
            ChildStrategies.Clear ();
            CancelActiveOrders ();
            base.OnStopping ();
        }

    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="file:///C:/Users/Gii/Desktop/SS%204-1-2.jpg" alt="" /&gt;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>