﻿<?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">Тестирование в версии 4.2.3.14, проблема</title>
  <id>~/topic/4595/testirovanie-v-versii-4_2_3_14-problema/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-04T02:33:16Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=4595" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/30985/</id>
    <title type="text"> Доброго дня. К сожалению в S# Api 4.2.3.20 в SampleHistoryTest ошибка сохранилась.Текст ошибки тот ...</title>
    <published>2014-07-03T09:12:16Z</published>
    <updated>2014-07-03T09:12:16Z</updated>
    <author>
      <name>wednesday</name>
      <uri>https://stocksharp.com/users/38935/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">  Доброго дня. К сожалению в  S# Api 4.2.3.20  в SampleHistoryTest ошибка сохранилась.Текст ошибки тот же: &lt;br /&gt;&lt;br /&gt;00:00:00 до 07/03/2014 00:00:00.&lt;br /&gt;Имя параметра: currentTime&lt;br /&gt;   в StockSharp.Algo.Testing.HistorySessionHolder.UpdateCurrentTime(DateTime currentTime)&lt;br /&gt;   в StockSharp.Algo.Testing.EmulationMessageAdapter.OnSendInMessage(Message message)&lt;br /&gt;   в StockSharp.Messages.MessageAdapter`1.OnInMessageProcessor(Message message, IMessageAdapter adapter)&lt;br /&gt;2014/06/25 00:00:00.000|Error  |HistoryEmulationConnector|System.ArgumentOutOfRangeException: Текущее время 01/01/0001 10:00:00 должно быть в интервале от 06/25/2014 00:00:00 до 07/03/2014 00:00:00.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/30976/</id>
    <title type="text">Да, у меня SampleHistoryTesting не работает с тиками загруженными с помощью новой версии гидры, но р...</title>
    <published>2014-07-02T12:29:11Z</published>
    <updated>2014-07-02T12:29:11Z</updated>
    <author>
      <name>wednesday</name>
      <uri>https://stocksharp.com/users/38935/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Да, у меня SampleHistoryTesting  не работает с тиками загруженными с помощью новой версии гидры, но работает с тиками старых версий.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/30974/</id>
    <title type="text">SampleHistoryTesting запускали? </title>
    <published>2014-07-02T11:50:50Z</published>
    <updated>2014-07-02T11:50:50Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">SampleHistoryTesting запускали?&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/30972/</id>
    <title type="text">Да. У меня точно такая же ошибка возникает при использовании тиковых данных из новой гидры в SampleH...</title>
    <published>2014-07-02T09:57:45Z</published>
    <updated>2014-07-02T09:57:45Z</updated>
    <author>
      <name>wednesday</name>
      <uri>https://stocksharp.com/users/38935/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Да. У меня точно такая же ошибка возникает при использовании тиковых данных из новой гидры в SampleHistoryTest 4.2.3.14. </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/30971/</id>
    <title type="text">Переставил гидру на версию 4.2.x.y - всё сразу заработало. 4.2.3.x версия работать с HistoryEmulator...</title>
    <published>2014-07-02T07:00:08Z</published>
    <updated>2014-07-02T07:00:08Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.com/users/28840/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Переставил гидру на версию 4.2.x.y - всё сразу заработало. 4.2.3.x версия работать с HistoryEmulator&amp;#39;ом не хочет хоть убей.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/30965/</id>
    <title type="text">Сделал логирование в файл на ProcessDataError - получаю следующие сообщения массово. Хз, почему. Тек...</title>
    <published>2014-07-01T09:57:59Z</published>
    <updated>2014-07-01T09:57:59Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.com/users/28840/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Сделал логирование в файл на ProcessDataError - получаю следующие сообщения массово. Хз, почему.&lt;br /&gt;&lt;br /&gt;Текущее время 01/01/0001 10:00:00 должно быть в интервале от 06/24/2014 00:00:00 до 06/26/2014 00:00:00.&lt;br /&gt;Имя параметра: currentTime&lt;br /&gt;Текущее время 01/01/0001 10:00:00 должно быть в интервале от 06/24/2014 00:00:00 до 06/26/2014 00:00:00.&lt;br /&gt;Имя параметра: currentTime&lt;br /&gt;Текущее время 01/01/0001 10:00:00 должно быть в интервале от 06/24/2014 00:00:00 до 06/26/2014 00:00:00.&lt;br /&gt;Имя параметра: currentTime&lt;br /&gt;Текущее время 01/01/0001 10:00:00 должно быть в интервале от 06/24/2014 00:00:00 до 06/26/2014 00:00:00.&lt;br /&gt;Имя параметра: currentTime&lt;br /&gt;Текущее время 01/01/0001 10:00:00 должно быть в интервале от 06/24/2014 00:00:00 до 06/26/2014 00:00:00.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/30961/</id>
    <title type="text">Камрады, стал мигрировать с 4.2.2.16 на 4.2.3.14 - код, ессно, перестал пахать. Ниже mainWindow. Буд...</title>
    <published>2014-06-30T12:13:34Z</published>
    <updated>2014-06-30T12:13:34Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.com/users/28840/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Камрады, стал мигрировать с 4.2.2.16 на 4.2.3.14 - код, ессно, перестал пахать.&lt;br /&gt;&lt;br /&gt;Ниже mainWindow. Буду признателен, если кто ткнёт мну носом в то, где у мну косяк - не происходит отработка ни стратегии (не вызывается ProcessCandle), ни отрисовка индикаторов.&lt;br /&gt;Где у мну руки из опы?&lt;br /&gt;&lt;br /&gt;Тут происходит основное действо.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;


        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            if (Path.Text.IsEmpty())
            {
                MessageBox.Show(this, &amp;quot;Путь не выбран.&amp;quot;);
                return;
            }

            var storageRegistry = new StorageRegistry
			{
				// изменяем путь, используемый по умолчанию
				DefaultDrive = new LocalMarketDataDrive(Path.Text)
			};

            var secCode = &amp;quot;RIU4&amp;quot;;
			var board = ExchangeBoard.GetOrCreateBoard(&amp;quot;Forts&amp;quot;);

            var security = new Security
            {
                Id = &amp;quot;RIU4@FORTS&amp;quot;, // по идентификатору инструмента будет искаться папка с историческими маркет данными
                Code = secCode,
                PriceStep = 10,
                StepPrice = 2,
                MinPrice = 10,
                MaxPrice = 1000000,
                MarginBuy = 10000, // задаем ГО
                MarginSell = 10000,
                Board = ExchangeBoard.Forts,
            };

            var portfolio = new Portfolio
            {
                Name = &amp;quot;TEST&amp;quot;,
                BeginValue = 500000m,
                CurrentValue = 500000m,
                Board = ExchangeBoard.GetBoard(instruments.First().strategyParams.exchange),
            };

            realTimeTradeEmulation = new HistoryEmulationConnector(new List&amp;lt;Security&amp;gt;() { security }, new List&amp;lt;Portfolio&amp;gt;() { portfolio } , storageRegistry)
            {
                MarketEmulator =
                {
                    Settings =
                    {
                        UseCandlesTimeFrame = System.TimeSpan.Zero,
                        MatchOnTouch = true,
                    }
                },
                StorageRegistry = storageRegistry,
            };

            realTimeTradeEmulation.NewSecurities += securities =&amp;gt;
            {
                if (securities.All(s =&amp;gt; s != security))
                    return;

                realTimeTradeEmulation.RegisterSecurity(security);
                realTimeTradeEmulation.RegisterTrades(security);
                realTimeTradeEmulation.RegisterPortfolio(portfolio);

                realTimeTradeEmulation.RegisterMarketDepth(security);
                realTimeTradeEmulation.RegisterMarketDepth(new TrendMarketDepthGenerator(realTimeTradeEmulation.GetSecurityId(security))
                {
                    Interval = TimeSpan.FromMilliseconds(30),
                    MaxAsksDepth = 10,
                    MaxBidsDepth = 10,
                    UseTradeVolume = true,
                    MaxVolume = 100,
                    MinSpreadStepCount = 2,  // минимальный генерируемый спред - 2 минимальных шага цены
                    MaxSpreadStepCount = 2, // не генерировать спрэд между лучшим бид и аск больше чем 5 минимальных шагов цены - нужно чтобы при генерации из свечей не получалось слишком широкого спреда.
                    MaxPriceStepCount = 2	// максимальное количество шагов между ценами,
                });
            };

            realTimeTradeEmulation.NewPortfolios += myPortfolios =&amp;gt; this.GuiAsync(() =&amp;gt; _portfolios.Portfolios.AddRange(myPortfolios));
            realTimeTradeEmulation.NewStopOrders += stopOrders =&amp;gt; this.GuiAsync(() =&amp;gt; _orders.Orders.AddRange(stopOrders));
            realTimeTradeEmulation.NewOrders += orders =&amp;gt; this.GuiAsync(() =&amp;gt; _orders.Orders.AddRange(orders));

            realTimeTradeEmulation.NewMyTrades += trades =&amp;gt; this.GuiAsync(() =&amp;gt;
            {
                instruments.ForEach(elem =&amp;gt;
                {
                    if (elem.isFormed)
                    {
                        var currentElemTrades = trades.Where(t =&amp;gt; elem.strategy.Orders.Any(o =&amp;gt; o == t.Order));
                        this.GuiAsync(() =&amp;gt; _trades.Trades.AddRange(currentElemTrades));

                        currentElemTrades.ToList().ForEach(strategyTrade =&amp;gt;
                        {
                            var tradeTime = elem.strategy.lastWorkedCandle == null ? strategyTrade.Order.Time : elem.strategy.lastWorkedCandle.OpenTime;
                            this.GuiAsync(() =&amp;gt; elem.chart.ProcessValues(tradeTime, new Dictionary&amp;lt;IChartElement, object&amp;gt; { { elem.tradesIndicator, strategyTrade } }));
                        });
                    }
                });
            });

            realTimeTradeEmulation.StateChanged += (oldState, newState) =&amp;gt;
            {
                if (realTimeTradeEmulation.State == EmulationStates.Stopped)
                {
                    this.GuiAsync(() =&amp;gt;
                    {
                        if (realTimeTradeEmulation.IsFinished)
                            MessageBox.Show(&amp;quot;Закончено&amp;quot;);
                        else
                            MessageBox.Show(&amp;quot;Отменено&amp;quot;);
                    });
                }
                else if (realTimeTradeEmulation.State == EmulationStates.Started)
                {
                    realtimeCandleManager.Processing += (s, candle) =&amp;gt;
                    {
                        if (candle.State == CandleStates.Finished)
                            _buffer.Add(candle);
                    };

                    realtimeCandleManager.Start(instruments.First().series);
                    instruments.First().strategy.Start();
                }
            };

            realTimeTradeEmulation.Connect();
            realTimeTradeEmulation.StartExport();

            realtimeCandleManager = new CandleManager(realTimeTradeEmulation);

            CreateStrategyFromInstrument(security, instruments.First().strategyParams, instruments.First(), portfolio);

            realTimeTradeEmulation.Start(From, To);
        }

&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;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

        private void CreateStrategyFromInstrument(Security currentSecurity, StrategyParameters currentParams, InstrumentDescription instrument, Portfolio portfolio)
        {
            instrument.portfolio = portfolio;

            realTimeTradeEmulation.TransactionAdapter.SendInMessage(instrument.portfolio.ToMessage());
            realTimeTradeEmulation.TransactionAdapter.SendInMessage(new PortfolioChangeMessage
            {
                PortfolioName = instrument.portfolio.Name
            }.Add(PositionChangeTypes.BeginValue, instrument.portfolio.BeginValue));

            instrument.series = new CandleSeries(typeof(RangeCandle), currentSecurity, new Unit((decimal)instrument.strategyParams.candleSize));
            instrument.strategy = new StockBotStrategy(instrument.series, currentParams)
            {
                Volume = 1,
                Security = currentSecurity,
                Portfolio = instrument.portfolio,
                Connector = realTimeTradeEmulation,
            };

            instrument.strategy.Log += OnLog;

            TabItem addedItem;
            stockCharts.Items.Add(addedItem = new TabItem() { Header = currentParams.name, Content = new Chart() });

            instrument.chart = (Chart)addedItem.Content;

            if (((Chart)addedItem.Content).Areas.IsEmpty())
                ((Chart)addedItem.Content).Areas.Add(new ChartArea());

            instrument.area = ((Chart)addedItem.Content).Areas.Last();
               
            instrument.area.Elements.Add(instrument.candleElem = new ChartCandleElement());            

            #region new filters

            instrument.area.Elements.Add(instrument.kalmanExt = new ChartIndicatorElement()
                                        {
                                            Indicator = (IIndicator)instrument.strategy.kalmanSeries,
                                            Title = &amp;quot;Фильтр Калмана&amp;quot;,
                                            Color = Colors.Black,
                                        });

            instrument.area.Elements.Add(instrument.bBandUpExt = new ChartIndicatorElement()
                                        {
                                            Indicator = (IIndicator)instrument.strategy.upperBandExt,
                                            Title = &amp;quot;Верхняя линия Боллинджера&amp;quot;,
                                            Color = Colors.Blue,
                                        });

            instrument.area.Elements.Add(instrument.bBandDownExt = new ChartIndicatorElement()
                                        {
                                            Indicator = (IIndicator)instrument.strategy.lowerBandExt,
                                            Title = &amp;quot;Нижняя линия Боллинджера&amp;quot;,
                                            Color = Colors.Blue,
                                        });

            instrument.area.Elements.Add(instrument.tradesIndicator = new ChartTradeElement()
                                        {
                                            BuyColor = Colors.Green,
                                            SellColor = Colors.Red,
                                            IsLegend = true,
                                        });

            #endregion            

            ((TabItem)(stockCharts.Items.GetItemAt(0))).Focus();

            instrument.strategy.strategyTimeStarting = DateTime.Now;
            instrument.isFormed = true;
        }

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Заранее признателен, уже замучился искать, почему у меня историческая эмуляшка не отрабатывает...</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>