﻿<?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">FileStorage - отдаёт сделки только первый раз ?</title>
  <id>~/topic/1861/filestorage---otdayot-sdelki-tolko-pervyi-raz-/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-30T01:58:07Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=1861" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/10789/</id>
    <title type="text">нашёл суть проблемы ! var test = new HistoryTest() { PathHistoryStorage = PathHistoryStorage, Securi...</title>
    <published>2011-09-02T11:59:11Z</published>
    <updated>2011-09-02T11:59:11Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;valenock &lt;a href="https://stocksharp.ru/posts/m/10763/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&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 test = new HistoryTest()
                {
                    PathHistoryStorage = PathHistoryStorage,
                    Security = _rts
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;т.е. каждому EmulationTest передаётся по ссылке одна и та же Security&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Подпишитесь на EmulationTrader.ProcessDataError.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/10763/</id>
    <title type="text">нашёл суть проблемы ! var test = new HistoryTest() { PathHistoryStorage = PathHistoryStorage, Securi...</title>
    <published>2011-08-31T21:55:40Z</published>
    <updated>2011-08-31T21:55:40Z</updated>
    <author>
      <name>valenock</name>
      <uri>https://stocksharp.ru/users/167/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">нашёл суть проблемы !&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 test = new HistoryTest()
                {
                    PathHistoryStorage = PathHistoryStorage,
                    Security = _rts
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;т.е. каждому EmulationTest передаётся по ссылке одна и та же Security&lt;br /&gt;Видимо, тестер хранит в ней какие-то данные для теста, в lastTrade дату последней сделки или ещё что ...&lt;br /&gt;Исправление на создание новой Security каждый раз решает проблему.&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 test = new HistoryTest()
                {
                    PathHistoryStorage = PathHistoryStorage,
                    Security = new Security{
            Id = &amp;quot;SPFB.RTS&amp;quot;, // по идентификатору инструмента будет искаться папка с историческими маркет данными
            Code = &amp;quot;RI&amp;quot;,
            Name = &amp;quot;RTS&amp;quot;,
            MinStepSize = 5,
            MinStepPrice = 2,
            Decimals = 0,
            Exchange = Exchange.Rts,
        },
&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>
  <entry>
    <id>https://stocksharp.ru/posts/m/10762/</id>
    <title type="text">Не заметил что FileStorage. Это пока недоделанный класс. Как только доделаем, тут же напишем о нем д...</title>
    <published>2011-08-31T21:06:59Z</published>
    <updated>2011-08-31T21:06:59Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Не заметил что FileStorage. Это пока недоделанный класс. Как только доделаем, тут же напишем о нем документацию.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/10761/</id>
    <title type="text">В данном случае это не важно - работает только первый вызов при последовательном создании FileStorag...</title>
    <published>2011-08-31T20:58:40Z</published>
    <updated>2011-08-31T21:02:43Z</updated>
    <author>
      <name>valenock</name>
      <uri>https://stocksharp.ru/users/167/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">В данном случае это не важно - работает только первый вызов при последовательном создании FileStorage.&lt;br /&gt;Аналогично, не работают несколько параллельных FileStorage из одной директории BasePath - тики в EmulationTrader отдаёт только первый из них.&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;
while (!test.IsFinished()) System.Threading.Thread.Sleep(10000); &lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Я и отдельный класс HistoryTest перенёс всё, чтобы изолировать проблему.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/10753/</id>
    <title type="text">Итого, сколько раз создается EmulationTrader?</title>
    <published>2011-08-31T19:21:36Z</published>
    <updated>2011-08-31T19:21:36Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Итого, сколько раз создается EmulationTrader?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/10751/</id>
    <title type="text">Перенёс тему куда надо.</title>
    <published>2011-08-31T18:38:36Z</published>
    <updated>2011-08-31T18:38:36Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</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/10738/</id>
    <title type="text">Борюсь с проблемой, которую не получается пока никак локализовать. Сделал класс HistoryTest, в котор...</title>
    <published>2011-08-31T16:14:08Z</published>
    <updated>2011-08-31T16:15:30Z</updated>
    <author>
      <name>valenock</name>
      <uri>https://stocksharp.ru/users/167/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Борюсь с проблемой, которую не получается пока никак локализовать.&lt;br /&gt;Сделал класс HistoryTest, в котором один метод, который запускает тестирование на истории и выходит, когда оно заканчивается.&lt;br /&gt;Первый раз, когда я создаю экземпляр класса и запускаю тестирование на исполнение - всё работает как надо.&lt;br /&gt;Второй и последующие разы создаю НОВЫЙ экземпляр класса и не получаю от storageAPI ни новых сделок ни даже NewSecurities не срабатывает ни разу. totalStorageTrades так и остаётся 0.&lt;br /&gt;&lt;br /&gt;Это я что-то делаю не так или storageAPI не сбрасывает текущую позицию в файле или счётчик трейдов ?&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;
            
for (var i = 1000; i &amp;lt; 30000; i+= 1000)
{
     var storage = new TradingStorage(new FileStorage(PathHistoryStorage)) { BasePath = PathHistoryStorage };
     var test = new HistoryTest()
     {
         PathHistoryStorage = PathHistoryStorage,
         Security = _rts,
         FileLog = fLog,
         EmulationStartTime =  new DateTime(2011, 06, 01),
         EmulationStopTime =  new DateTime(2011, 06, 02, 12, 00, 00),
         storage = storage
     };
     test.RunHistoryTest2(i);
     while (!test.IsFinished()) System.Threading.Thread.Sleep(10000);
     Console.ReadLine();
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;
    
class HistoryTest
{
        public string PathHistoryStorage;
        private EmulationTrader _historyTrader;
        public Security Security;
        private StrategyTest _strategy;
        private DateTime _lastTitleUpdateDate;
        public DateTime EmulationStartTime = new DateTime(2011, 06, 01);
        public DateTime EmulationStopTime = new DateTime(2011, 09, 02);
        public StreamWriter FileLog;
        public TradingStorage storage;

        //---------------------------------------------------------------------------------------------------------------
        //
        //---------------------------------------------------------------------------------------------------------------
        public void RunHistoryTest2(int period)
        {
            // тестовый портфель
            var portfolio = new Portfolio { Name = &amp;quot;TeST&amp;quot; };

            // инициализируем настройки (инструмент в истории обновляется раз в 100ms)
            var timeFrame = TimeSpan.FromSeconds(1);
            _historyTrader = new EmulationTrader(new[] { Security }, new[] { portfolio })
            {
                MarketTimeChangedInterval = timeFrame,
                Storage = storage,
                WorkingTime = Exchange.Rts.WorkingTime,
                DaysInMemory = 1,
            };

            Console.WriteLine(&amp;quot;==============================================================&amp;quot;);
            _strategy = new StrategyTest
            {
                Volume = 1,
                Portfolio = portfolio,
                Security = Security,
                Trader = _historyTrader,
                period = period,
            };

            _historyTrader.NewSecurities += newSecs =&amp;gt; { foreach (var security in newSecs) Console.WriteLine(&amp;quot;Актив: &amp;quot; + security.Id + &amp;quot; &amp;quot; + security.Name); };
            var totalStorageTrades = 0;
            _historyTrader.NewTrades += trades =&amp;gt;{ totalStorageTrades += trades.Count(); };
            
            _historyTrader.StateChanged += () =&amp;gt;
            {
                if (_historyTrader.State == EmulationStates.Stopped)
                {
                    Console.WriteLine(&amp;quot;TotalStorageTrades = &amp;quot; + totalStorageTrades);
                    Console.WriteLine(&amp;quot;FINISHED 1 run...&amp;quot;);
                    _strategy.Stop();
                    _strategy.Dispose();
                    _historyTrader.StopExport();
                    _historyTrader.Disconnect();
                    _historyTrader.Dispose();
                    storage.GetTradeStorage(Security).AllDates.GetEnumerator().Reset();
                    storage = null;
                }
                // запускаем стратегию когда эмулятор запустился
                else if (_historyTrader.State == EmulationStates.Started) _strategy.Start();
            };

            // запускаем экспорт, чтобы инициализировать переданными инструментами и портфелями
            // необходимоые свойства HistoryEmulationTrader
            _historyTrader.Connect();
            _historyTrader.StartExport();

            // Запуск начала тестирования: 
            _historyTrader.Start(EmulationStartTime, EmulationStopTime);
        }
        //---------------------------------------------------------------------------------------------------------------
        //
        //---------------------------------------------------------------------------------------------------------------
        public bool IsFinished()
        {
            return _historyTrader == null || _historyTrader.State == EmulationStates.Stopped;
        }
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>