Mikhail Sukhov Ramil Mikhail Sukhov Ramil 
В общем я выяснил в какой момент тестирование останавливается само.
 Останавливается тестирование - это как определяется? Визуально, по логам, или еще как-то?
 Статус у EmulationTrader выставляется .Stopped = true, ну и соответственно стратегия останавливается, если в выше приведенном коде поменять 23-30 на 23-00, то как я уже говорил все работает нормально. Единственное еще прыбыль по сделкам я так понимаю это .PnL, почему-то считается некорректно если тестирование на свечках
 Мы сейчас говорим о примере SampleHistoryTesting?
 Вот кусок кода, который запускает тестирование:
        private void btnTest_Click(object sender, RoutedEventArgs e)
        {
            HistoryPath.Text = "C:\\stocksharp_4.1.9\\historydata\\R";
            if (HistoryPath.Text.IsEmpty() || !Directory.Exists(HistoryPath.Text))
            {
                MessageBox.Show(this, "Неправильный путь.");
                return;
            }
            var security = new Security
            {
                Id = "RIH3@RTS", // по идентификатору инструмента будет искаться папка с историческими маркет данными
                Code = "RIH3",
                Name = "RTS-3.12",
                MinStepSize = 10,
                MinStepPrice = 2,
                ExchangeBoard = ExchangeBoard.Forts,
            };
            // тестовый портфель
            var portfolio = new Portfolio { Name = "test account", BeginValue = 1000000m };
            // хранилище, через которое будет производиться доступ к тиковой и котировочной базе
            var storageRegistry = new StorageRegistry();
            // изменяем путь, используемый по умолчанию
            ((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = HistoryPath.Text;
            var timeFrame = TimeSpan.FromMinutes(30);
            var startTime = new DateTime(2012, 12, 15);
            var stopTime = new DateTime(2013, 3, 14);
            // задаем шаг ProgressBar
            var progressStep = ((stopTime - startTime).Ticks / 100).To<TimeSpan>();
            var nextTime = startTime + progressStep;
            _trader = new EmulationTrader(
                new[] { security },
                new[] { portfolio })
            {
                MarketTimeChangedInterval = timeFrame,
                StorageRegistry = storageRegistry,
                UseCandlesTimeFrame = timeFrame,
            };
            _trader.Connect();
            _trader.StartExport();
            var candleManager = new CandleManager(_trader);
            var series = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame);
            candleManager.Start(series);
            _strategy = new TurtleSoupStrategy(series)
            {
                Volume = 1,
                Portfolio = portfolio,
                Security = security,
                Trader = _trader
            };
            // копируем параметры на визуальную панель
            ParametersPanel.Parameters.Clear();
            ParametersPanel.Parameters.AddRange(_strategy.StatisticManager.Parameters);
            // и подписываемся на событие изменения времени, чтобы обновить ProgressBar
            _trader.MarketTimeChanged += d =>
            {
                if (_trader.CurrentTime >= nextTime || _trader.CurrentTime >= stopTime)
                {
                    nextTime += progressStep;
                    this.GuiAsync(() => progressBar1.Value++);
                }
            };
            _strategy.PnLChanged += () =>
            {
                var data = new EquityData
                {
                    Time = _strategy.GetMarketTime(),
                    Value = _strategy.PnL,
                };
                //this.GuiAsync(() => _curveItems.Add(data));
            };
            _logManager.Sources.Add(_strategy);
            _trader.StateChanged += (oldState, newState) =>
            {
                if (_trader.State == EmulationStates.Stopped)
                {
                    this.GuiAsync(() =>
                    {
                        StartBtn.IsEnabled = true;
                        if (_trader.IsFinished)
                        {
                            _strategy.Stop();
                            TestingProcess.Value = TestingProcess.Maximum;
                            MessageBox.Show(this, "Закончено за " + (DateTime.Now - _startEmulationTime));
                        }
                        else
                            MessageBox.Show(this, "Отменено");
                    });
                }
                else if (_trader.State == EmulationStates.Started)
                {
                    // запускаем стратегию когда эмулятор запустился
                    _strategy.Start();
                }
            };
            Report.IsEnabled = true;
            _startEmulationTime = DateTime.Now;
            _trader.Start(startTime, stopTime);