﻿<?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">BatchEmulator, проблема с тестированием в версии 4.2.43</title>
  <id>~/topic/4905/batchemulator-problema-s-testirovaniem-v-versii-4_2_43/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-24T17:16:09Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=4905" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/32694/</id>
    <title type="text">Спасибо, понял!</title>
    <published>2015-02-24T01:25:15Z</published>
    <updated>2015-02-24T01:25:15Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.ru/users/28840/</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/32693/</id>
    <title type="text">SampleTestingParallel вы же где то взяли, там и SampleHistoryTesting лежит</title>
    <published>2015-02-24T01:17:49Z</published>
    <updated>2015-02-24T01:17:49Z</updated>
    <author>
      <name>Иван З.</name>
      <uri>https://stocksharp.ru/users/6502/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">SampleTestingParallel вы же где то взяли, там и SampleHistoryTesting лежит</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/32692/</id>
    <title type="text">Иван, если несложно, можете скинуть полный код для MainWindow?</title>
    <published>2015-02-24T00:19:18Z</published>
    <updated>2015-02-24T00:19:18Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.ru/users/28840/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Иван, если несложно, можете скинуть полный код для MainWindow?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/32691/</id>
    <title type="text">В SampleHistoryTesting есть код, вам надо также connector.StateChanged += () =&amp;gt; { if (connector. Sta...</title>
    <published>2015-02-24T00:04:10Z</published>
    <updated>2015-02-24T00:04:10Z</updated>
    <author>
      <name>Иван З.</name>
      <uri>https://stocksharp.ru/users/6502/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">В SampleHistoryTesting есть код, вам надо также&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;
				connector.StateChanged += () =&amp;gt;
				{
					if (connector. State == EmulationStates.Stopped)
					{
						candleManager.Stop(series);
						strategy.Stop();

						logManager.Dispose();
						_connectors.Clear();

						SetIsEnabled(false);

						this.GuiAsync(() =&amp;gt;
						{
							if (connector.IsFinished)
							{
								progressBar.Value = progressBar.Maximum;
								MessageBox.Show(LocalizedStrings.Str3024 + (DateTime.Now - _startEmulationTime));
							}
							else
								MessageBox.Show(LocalizedStrings.cancelled);
						});
					}
					else if (connector.State == EmulationStates.Started)
					{
						SetIsEnabled(true);

						// запускаем стратегию когда эмулятор запустился
						strategy.Start();
						candleManager.Start(series);
					}
				};&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/32690/</id>
    <title type="text">Странно то, что connector никогда не переходит в состояние Started, он вообще всё время Stopped! Я п...</title>
    <published>2015-02-23T23:29:27Z</published>
    <updated>2015-02-23T23:29:27Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.ru/users/28840/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Странно то, что connector никогда не переходит в состояние Started, он вообще всё время Stopped! Я просто ради интереса поставил цикл на переход в это состояние (через ThreadHelper.Sleep). Делал connector.Start, connector.StartExport - безрезультатно. И смешно то, что Sample работает! :-(</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/32689/</id>
    <title type="text">код не смотрел, и врятли кто будет(длинно, непонятно), но ошибка говорит об том что у вас подключени...</title>
    <published>2015-02-23T22:25:36Z</published>
    <updated>2015-02-23T22:25:36Z</updated>
    <author>
      <name>Иван З.</name>
      <uri>https://stocksharp.ru/users/6502/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">код не смотрел, и врятли кто будет(длинно, непонятно), но ошибка говорит об том что у вас подключение находится в состоянии Starting&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;
connector.State == EmulationStates.Starting&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;
connector.State == EmulationStates.Started&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Т.е. вам надо либо остановить работу программы и ждать когда станет Started. Либо подписаться на событие успешного подключения connector.Connected. И там выполнять код который выдает ошибку.&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/32688/</id>
    <title type="text">Ну, как бы up... :-(</title>
    <published>2015-02-23T21:20:41Z</published>
    <updated>2015-02-23T21:20:41Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.ru/users/28840/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Ну, как бы up... :-(</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/32687/</id>
    <title type="text">Камрады, замучился, пытаясь запустить оптимизатор в 4.2.43. Брал за основу SampleTestingParallel - ф...</title>
    <published>2015-02-23T00:10:32Z</published>
    <updated>2015-02-23T00:10:32Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.ru/users/28840/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Камрады, замучился, пытаясь запустить оптимизатор в 4.2.43.&lt;br /&gt;&lt;br /&gt;Брал за основу SampleTestingParallel - фактически только переписал блок &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 strategies = periods
				.Select(period =&amp;gt;
				{
					var series = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame);

					// создаем торговую стратегию
					var strategy = new SmaStrategy(series, new SimpleMovingAverage { Length = period.Item1 }, new SimpleMovingAverage { Length = period.Item2 })
					{
						Volume = 1,
						Security = security,
						Portfolio = portfolio,
						Connector = connector,

						// по-умолчанию интервал равен 1 минут,
						// что для истории в диапазон от нескольких месяцев излишне
						UnrealizedPnLInterval = ((stopTime - startTime).Ticks / 1000).To&amp;lt;TimeSpan&amp;gt;()
					};

					strategy.SetCandleManager(new CandleManager(connector));

					var curveItems = Curve.CreateCurve(LocalizedStrings.Str3026Params.Put(period.Item1, period.Item2), period.Item3);
					strategy.PnLChanged += () =&amp;gt;
					{
						var data = new EquityData
						{
							Time = strategy.CurrentTime,
							Value = strategy.PnL,
						};

						this.GuiAsync(() =&amp;gt; curveItems.Add(data));
					};

					Stat.AddStrategies(new[] { strategy });

					return strategy;
				})
				.ToEx(periods.Length);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&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;

            double tradeQuantilesStartVal = 0.7;
            long maxMonteCarloIterations = 10000;
            List&amp;lt;Tuple&amp;lt;double, double&amp;gt;&amp;gt; quantileParams = new List&amp;lt;Tuple&amp;lt;double,double&amp;gt;&amp;gt;();

            var generator = new AForge.Math.Random.UniformOneGenerator((int)DateTime.Now.TimeOfDay.TotalSeconds);

            for (int i = 0; i &amp;lt; maxMonteCarloIterations; i++)
            {
                var tradeQuantile = tradeQuantilesStartVal + (1 - tradeQuantilesStartVal)*generator.Next();
                var stoplossQuantile = tradeQuantile + (1 - tradeQuantile) * generator.Next();

                quantileParams.Add(new Tuple&amp;lt;double, double&amp;gt;(tradeQuantile, stoplossQuantile));
            }

            for (int j = 0; j &amp;lt; maxMonteCarloIterations; j++)
            {
                var strategies = new List&amp;lt;Strategy&amp;gt;();
                var series = new CandleSeries(typeof(RangeCandle), security, new Unit(candleSize));


                for (int i = 0; i &amp;lt; maxParallelStrategiesCount; i++)
                {
                    var strategy = new StockBotStrategy(series, new StrategyParameters()
                                                                    {
                                                                        candleSize = 100.0,
                                                                        port = 60000 + i,
                                                                        tradeQuantile = (decimal)quantileParams[j].Item1,
                                                                        stoplossQuantile = (decimal)quantileParams[j].Item2,
                                                                        period = period,
                                                                    })
                                   {
                                       Volume = 1,
                                       Security = security,
                                       Portfolio = portfolio,
                                       Connector = connector,
                                       UnrealizedPnLInterval = ((stopTime - startTime).Ticks / 1000).To&amp;lt;TimeSpan&amp;gt;(),
                                   };

                    strategy.SetCandleManager(new CandleManager(connector));

                    var curveItems = Curve.CreateCurve(&amp;quot;&amp;quot;, Colors.Black);
                    strategy.PnLChanged += () =&amp;gt;
                    {
                        var data = new EquityData
                        {
                            Time = strategy.CurrentTime,
                            Value = strategy.PnL,
                        };

                        this.GuiAsync(() =&amp;gt; curveItems.Add(data));
                    };

                    strategies.Add(strategy);

                    Stat.AddStrategies(new[] { strategy });
                }

                batchEmulation.Start(strategies.ToEx(maxParallelStrategiesCount));
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Постоянно получаю ошибку: System.InvalidOperationException не обработано пользовательским кодом&lt;br /&gt;  HResult=-2146233079&lt;br /&gt;  Message=Нельзя запустить тестирование так как подключение находится в состоянии Starting.&lt;br /&gt;  Source=StockSharp.Algo&lt;br /&gt;  StackTrace:&lt;br /&gt;       в StockSharp.Algo.Testing.HistoryEmulationConnector.Start(DateTime startDate, DateTime stopDate)&lt;br /&gt;       в StockSharp.Algo.Strategies.Testing.BatchEmulation.#=qEvP$WOQt9MPu7qFVhUGtqCEHIIWDnjoXf09QUZzlYDA=()&lt;br /&gt;       в StockSharp.Algo.Strategies.Testing.BatchEmulation.Start(IEnumerableEx`1 strategies)&lt;br /&gt;       в Optimizer.MainWindow.StartBtnClick(Object sender, RoutedEventArgs e) в d:\StockSharp\Optimizer\Optimizer 1.0\MainWindow.xaml.cs:строка 249&lt;br /&gt;       в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)&lt;br /&gt;       в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)&lt;br /&gt;       в System.Windows.Controls.Button.OnClick()&lt;br /&gt;       в System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)&lt;br /&gt;       в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)&lt;br /&gt;       в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)&lt;br /&gt;       в System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)&lt;br /&gt;       в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)&lt;br /&gt;       в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)&lt;br /&gt;       в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)&lt;br /&gt;       в System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)&lt;br /&gt;       в System.Windows.Input.InputManager.ProcessStagingArea()&lt;br /&gt;       в System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)&lt;br /&gt;       в System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)&lt;br /&gt;       в System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean&amp;amp; handled)&lt;br /&gt;       в System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp;amp; handled)&lt;br /&gt;       в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp;amp; handled)&lt;br /&gt;       в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)&lt;br /&gt;       в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)&lt;br /&gt;       в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)&lt;br /&gt;  InnerException: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;В чём может быть проблема?&lt;br /&gt;&lt;br /&gt;P.S. GitHub&amp;#39;ом пока не разобрался, к сожалению, и не могу использовать новые версии, ибо нуб. :-(</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>