﻿<?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">Восстановление сохраненной стратегии</title>
  <id>~/topic/4745/vosstanovlenie-sohranennoi-strategii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-09T20:54:57Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=4745" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/31827/</id>
    <title type="text">Супер секретная разработка по сохранению/восстановлению стратегий: http://stocksharp.com/forum/4045/...</title>
    <published>2014-10-08T07:56:02Z</published>
    <updated>2016-08-16T00:19:11Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Супер секретная разработка по сохранению/восстановлению стратегий:&lt;br /&gt;[url]http://stocksharp.com/forum/4045/S--Shell--Manual/?page=2</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31816/</id>
    <title type="text">секретные разработки? Поиск по форуму - лучшее лекарство от подозрительности)) Так мной было описан ...</title>
    <published>2014-10-05T16:06:13Z</published>
    <updated>2016-08-16T00:19:10Z</updated>
    <author>
      <name>Andrii</name>
      <uri>https://stocksharp.ru/users/27996/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;lebedevsrg &lt;a href="https://stocksharp.ru/posts/m/31814/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Andrii &lt;a href="https://stocksharp.ru/posts/m/31811/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;секретные разработки?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Поиск по форуму - лучшее лекарство от подозрительности))&lt;br /&gt;Так мной было описан полный набор функций для сохранения заявок/сделок по стратегии в базу данных в разделе по развитию S#.Shell &lt;a href="http://stocksharp.com/posts/m/31207/" title="http://stocksharp.com/posts/m/31207/"&gt;Ссылка&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Сейчас по прошествии 2-х месяцев могу сказать что все работает на 100%.&lt;br /&gt;Однако я внес следующие изменения в подход к сохранению позиций:&lt;br /&gt;1) заменил сохранение в MS SQL на сохранение в MS Access, используя универсальный интерфейс OleDb;&lt;br /&gt;все-таки Access проше, систему не грузит и занимает в 10ки раз меньше места,&lt;br /&gt;2) вообще прекратил сохранять заявки и сделки, сохраняю только  позиции; для транения позиций пришлось сделать отдельный класс TradeBook, в котором как раз расписано для каждой стратегии какую она имеет долю в &amp;quot;общем пироге&amp;quot; открытой по инструменту позиции - это к вопросу devruss&amp;#39;а относительно учета результатов работы нескольких стратегий с одним счетом и инструментом.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;У меня тоже подход по позициям, каждый имеет свою долю и это фиксируется.&lt;br /&gt;Может наивно, но так же использую\отображаю график PnL и статистику, вот и для этого и нужны, чтобы отображались корректно. Или это лучше самому считать?&lt;br /&gt;&lt;br /&gt;Но в целом я понял, используется AttachOrder и его сделками... этого и хотел</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31814/</id>
    <title type="text">секретные разработки? Поиск по форуму - лучшее лекарство от подозрительности)) Так мной было описан ...</title>
    <published>2014-10-05T06:03:07Z</published>
    <updated>2016-08-16T00:19:10Z</updated>
    <author>
      <name>JaguarFX</name>
      <uri>https://stocksharp.ru/users/49779/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Andrii &lt;a href="https://stocksharp.ru/posts/m/31811/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;секретные разработки?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Поиск по форуму - лучшее лекарство от подозрительности))&lt;br /&gt;Так мной было описан полный набор функций для сохранения заявок/сделок по стратегии в базу данных в разделе по развитию S#.Shell &lt;a href="http://stocksharp.com/posts/m/31207/" title="http://stocksharp.com/posts/m/31207/"&gt;Ссылка&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Сейчас по прошествии 2-х месяцев могу сказать что все работает на 100%.&lt;br /&gt;Однако я внес следующие изменения в подход к сохранению позиций:&lt;br /&gt;1) заменил сохранение в MS SQL на сохранение в MS Access, используя универсальный интерфейс OleDb;&lt;br /&gt;все-таки Access проше, систему не грузит и занимает в 10ки раз меньше места,&lt;br /&gt;2) вообще прекратил сохранять заявки и сделки, сохраняю только  позиции; для хранения позиций пришлось сделать отдельный класс TradeBook, в котором как раз расписано для каждой стратегии какую она имеет долю в &amp;quot;общем пироге&amp;quot; открытой по инструменту позиции - это к вопросу devruss&amp;#39;а относительно учета результатов работы нескольких стратегий с одним счетом и инструментом.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31877/</id>
    <title type="text">как вы считает PnL, полученный и нереализованный? Да просто рассчитываем вариационку отдельно по стр...</title>
    <published>2014-10-10T08:37:28Z</published>
    <updated>2014-10-10T08:37:28Z</updated>
    <author>
      <name>Marco</name>
      <uri>https://stocksharp.ru/users/6041/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;как вы считает PnL, полученный и нереализованный?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Да просто рассчитываем вариационку отдельно по стратегиям, как это описано в спецификациях контрактов. Стратегии пишут свои трейды в CSV, после клиринга запускается пачка питоновских скриптов, которые:&lt;br /&gt;- получают с биржи индикативный курс доллара на закрытие дня&lt;br /&gt;- считают вариационку по стратегиям&lt;br /&gt;- выгружают отчет в Excel&lt;br /&gt;&lt;br /&gt;В течение дня PnL мы не считаем. Опять же, в чем считать PnL? Фьючерс на индекс RTS номинирован в долларах, рублевый PnL по нему в течение дня посчитать корректно вообще нельзя, т.к. курс валюты становится известен только на закрытие дня. </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31872/</id>
    <title type="text"> сказал а, говори б... как вы считает PnL, полученный и нереализованный?</title>
    <published>2014-10-10T07:11:44Z</published>
    <updated>2014-10-10T07:11:44Z</updated>
    <author>
      <name>Andrii</name>
      <uri>https://stocksharp.ru/users/27996/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Marco &lt;a href="https://stocksharp.ru/posts/m/31871/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;сказал а, говори б... &lt;br /&gt;&lt;br /&gt;как вы считает PnL, полученный и нереализованный?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31871/</id>
    <title type="text"> Удалять - это сложно. А вот изменилась позиция - записали в файл, изменилась опять - опять записали...</title>
    <published>2014-10-10T05:41:11Z</published>
    <updated>2014-10-10T05:41:11Z</updated>
    <author>
      <name>Marco</name>
      <uri>https://stocksharp.ru/users/6041/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;devruss &lt;a href="https://stocksharp.ru/posts/m/31855/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Удалять - это сложно. А вот изменилась позиция - записали в файл, изменилась опять - опять записали, мне кажется как-то проще и fail proof&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Мы например так и делаем. При каждом изменении позиции стратегии по инструментам сохраняются в .csv файл. При старте стратегии - восстанавливаются (без сделок и ордеров).&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;


        protected List&amp;lt;Position&amp;gt; LoadPositions(string fileName)
        {
            List&amp;lt;Position&amp;gt; positions = new List&amp;lt;Position&amp;gt;();

            using (StreamReader stream = new StreamReader(fileName))
            {
                using (CsvReader reader = new CsvReader(stream))
                {
                    reader.Configuration.Delimiter = &amp;quot;,&amp;quot;;
                    reader.Configuration.HasHeaderRecord = false;

                    //var records = reader.GetRecords&amp;lt;MyTrade&amp;gt;();
                    while (reader.Read())
                    {
                        try
                        {
                            string securityCode = reader.GetField&amp;lt;string&amp;gt;(0);
                            decimal value = reader.GetField&amp;lt;decimal&amp;gt;(1);
                            string portfolioName = reader.GetField&amp;lt;string&amp;gt;(2);

                            Portfolio portfolio = Connector.Portfolios.FirstOrDefault((Portfolio pf) =&amp;gt;
                            {
                                return pf.Name == portfolioName;
                            });
                            if (portfolio == null)
                            {
                                this.AddWarningLog(&amp;quot;Portfolio with name {0} not found.&amp;quot;, portfolioName);
                                continue;
                            }

                            Security security = Connector.Securities.FirstOrDefault((Security sec) =&amp;gt;
                            {
                                return sec.Code == securityCode;
                            });
                            if (security == null)
                            {
                                this.AddWarningLog(&amp;quot;Security with code {0} not found.&amp;quot;, securityCode);
                                continue;
                            }

                            Position position = new Position()
                            {
                                Portfolio = portfolio,
                                Security = security,
                                CurrentValue = value
                            };

                            positions.Add(position);
                        }
                        catch (Exception ex)
                        {
                            this.AddErrorLog(&amp;quot;Ошибка загрузки позиции: {0}&amp;quot;, ex.Message);
                        }
                    }
                }
            }

            return positions;
        }


        protected void LoadPositions()
        {
            if (!SavePositionsEnabled)
                return;

            string fileName = GetPersistentFileName(&amp;quot;positions&amp;quot;, &amp;quot;csv&amp;quot;);
            this.AddInfoLog(&amp;quot;Загрузка позиций из файла {0}&amp;quot;, fileName);

            if (File.Exists(fileName))
            {
                List&amp;lt;Position&amp;gt; positions;

                lock (lockPositionsFile)
                {
                    positions = LoadPositions(fileName);
                }

                PositionManager.Positions = positions;
                RaiseParametersChanged(&amp;quot;Position&amp;quot;);
            }
            else
            {
                this.AddWarningLog(&amp;quot;Файла с сохраненными позициями {0} не существует.&amp;quot;, fileName);
            }
        }

        protected void SavePositions(IEnumerable&amp;lt;Position&amp;gt; positions, string fileName, bool append)
        {
            using (StreamWriter stream = new StreamWriter(fileName, append))
            {
                using (CsvWriter writer = new CsvWriter(stream))
                {
                    writer.Configuration.Delimiter = &amp;quot;,&amp;quot;;
                    writer.Configuration.HasHeaderRecord = false;

                    foreach (Position position in positions)
                    {
                        try
                        {
                            writer.WriteField(position.Security.Code, true);
                            writer.WriteField(position.CurrentValue);
                            writer.WriteField(position.Portfolio.Name);
                            writer.NextRecord();
                        }
                        catch (Exception ex)
                        {
                            this.AddErrorLog(&amp;quot;Ошибка сохранения позиции {0}: {1}&amp;quot;, position.ToString(), ex.Message);
                        }
                    }

                    stream.Flush();
                }
            }
        }

        protected void SavePositions(IEnumerable&amp;lt;Position&amp;gt; positions)
        {
            if (!SavePositionsEnabled)
                return;

            string fileName = GetPersistentFileName(&amp;quot;positions&amp;quot;, &amp;quot;csv&amp;quot;);
            this.AddInfoLog(&amp;quot;Сохранение позиций в файл {0}&amp;quot;, fileName);

            lock (lockPositionsFile)
            {
                SavePositions(PositionManager.Positions, fileName, false);
            }
        }


                PositionsChanged += (IEnumerable&amp;lt;Position&amp;gt; positions) =&amp;gt;
                {
                    SavePositions(positions);
                };
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;SavePositions() вызывается при изменении позиции и остановке стратегии. LoadPositions - в Strategy.OnStarted().&lt;br /&gt;&lt;br /&gt;Метод спорный, но у нас работает. При этом ломается расчет PnL (мы им все равно не пользуемся, PnL стратегий считается скриптами на Python&amp;#39;е по сохраненным трейдам раз в день после клиринга - StockSharp все равно PnL считает неправильно...)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31855/</id>
    <title type="text">вообще все зависит от стратегии и нужных данных, но более универсальный метод - писать только сделки...</title>
    <published>2014-10-09T14:07:03Z</published>
    <updated>2014-10-09T14:07:03Z</updated>
    <author>
      <name>devruss</name>
      <uri>https://stocksharp.ru/users/50604/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Andrii &lt;a href="https://stocksharp.ru/posts/m/31851/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;вообще все зависит от стратегии и нужных данных, но более универсальный метод - писать только сделки открывающие позицию:&lt;br /&gt;&lt;br /&gt;открыли позицию - записали сделку - закрыли позицию - удалили 2 сделки&lt;br /&gt;&lt;br /&gt;алгоритм сложный, но оставляет только сделки по открытым позициям &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Удалять - это сложно. А вот изменилась позиция - записали в файл, изменилась опять - опять записали, мне кажется как-то проще и fail proof</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31851/</id>
    <title type="text">вообще все зависит от стратегии и нужных данных, но более универсальный метод - писать только сделки...</title>
    <published>2014-10-09T13:55:22Z</published>
    <updated>2014-10-09T13:55:22Z</updated>
    <author>
      <name>Andrii</name>
      <uri>https://stocksharp.ru/users/27996/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">вообще все зависит от стратегии и нужных данных, но более универсальный метод - писать только сделки открывающие позицию:&lt;br /&gt;&lt;br /&gt;открыли позицию - записали сделку - закрыли позицию - удалили 2 сделки&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/31848/</id>
    <title type="text">Какой сайз и какое направление было у ордера, который через AttachOrder присоединяется к стратегии, ...</title>
    <published>2014-10-09T13:26:34Z</published>
    <updated>2014-10-09T13:26:34Z</updated>
    <author>
      <name>devruss</name>
      <uri>https://stocksharp.ru/users/50604/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;RomSunZ &lt;a href="https://stocksharp.ru/posts/m/31846/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Какой сайз и какое направление было у ордера, который через AttachOrder присоединяется к стратегии, такая поза у стратегии и будет. Если несколько ордеров, то позиция суммируется.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Это так, но я хочу уйти от связки &amp;quot;сделки - высчитываем позицию - позиция&amp;quot; к &amp;quot;записываем изменения позиции - при старте стратегии подается на вход тек. позиция&amp;quot;.&lt;br /&gt;Таким образом, мне &lt;br /&gt;1. Не нужна БД. Достаточно 1 файла на стратегию с позицией&lt;br /&gt;2. Быстрый старт&lt;br /&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/31846/</id>
    <title type="text">А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные п...</title>
    <published>2014-10-09T11:47:12Z</published>
    <updated>2014-10-09T11:47:12Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;devruss &lt;a href="https://stocksharp.ru/posts/m/31841/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;RomSunZ &lt;a href="https://stocksharp.ru/posts/m/31839/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные по предыдущим сделкам/позициям/ордерам использовать для анализа работы системы?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я не понял, как можно передать роботу позицию? AttachOrder функция есть, а как указать текущую позицию при старте?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Какой сайз и какое направление было у ордера, который через AttachOrder присоединяется к стратегии, такая поза у стратегии и будет. Если несколько ордеров, то позиция суммируется.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31843/</id>
    <title type="text">А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные п...</title>
    <published>2014-10-09T10:58:22Z</published>
    <updated>2014-10-09T10:58:22Z</updated>
    <author>
      <name>Andrii</name>
      <uri>https://stocksharp.ru/users/27996/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;devruss &lt;a href="https://stocksharp.ru/posts/m/31841/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;RomSunZ &lt;a href="https://stocksharp.ru/posts/m/31839/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные по предыдущим сделкам/позициям/ордерам использовать для анализа работы системы?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я не понял, как можно передать роботу позицию? AttachOrder функция есть, а как указать текущую позицию при старте?&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;
Strategy str = new MyStrategy() { Position = 5 };&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31841/</id>
    <title type="text">А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные п...</title>
    <published>2014-10-09T10:46:46Z</published>
    <updated>2014-10-09T10:46:46Z</updated>
    <author>
      <name>devruss</name>
      <uri>https://stocksharp.ru/users/50604/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;RomSunZ &lt;a href="https://stocksharp.ru/posts/m/31839/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные по предыдущим сделкам/позициям/ордерам использовать для анализа работы системы?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я не понял, как можно передать роботу позицию? AttachOrder функция есть, а как указать текущую позицию при старте?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31840/</id>
    <title type="text"> по большому счету да, сохраняешь состояние стратегии и восстанавливаешь его при создании. Но тогда ...</title>
    <published>2014-10-09T10:45:16Z</published>
    <updated>2014-10-09T10:45:43Z</updated>
    <author>
      <name>devruss</name>
      <uri>https://stocksharp.ru/users/50604/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;по большому счету да, сохраняешь состояние стратегии и восстанавливаешь его при создании. Но тогда теряется статистика стратегии... но если у тебя свои классы по ее подсчету, то можно себе позволить&lt;br /&gt;покажешь свои классы &amp;quot;подсчету pnl, mark-to-market pnl, доходности и т.д.&amp;quot; ?&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В данном топике это оффтоп. На самом деле, я даже классы не делал. На каждом тике пересчитываю стоимость позиции (== mark to market), из этого получается и pnl при закрытии позиции (реализованный mark to market) и доходность (pnl/capital)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31839/</id>
    <title type="text">А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные п...</title>
    <published>2014-10-09T10:44:04Z</published>
    <updated>2014-10-09T10:44:04Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</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/31836/</id>
    <title type="text">Тут в каждом подходе есть свои плюсы и свои минусы. 1. Восстановление позиций через восстановление з...</title>
    <published>2014-10-09T09:49:34Z</published>
    <updated>2014-10-09T09:49:34Z</updated>
    <author>
      <name>Andrii</name>
      <uri>https://stocksharp.ru/users/27996/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;devruss &lt;a href="https://stocksharp.ru/posts/m/31835/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;lebedevsrg &lt;a href="https://stocksharp.ru/posts/m/31830/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Тут в каждом подходе есть свои плюсы и свои минусы.&lt;br /&gt;&lt;br /&gt;1. Восстановление позиций через восстановление заявок/сделок&lt;br /&gt;&lt;br /&gt;2. Восстановление позиций через восстановление информации о позициях &lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я тоже создал свои классы и под хранение инфы по трейдам (не позициям), а также по правильному подсчету pnl, mark-to-market pnl, доходности и т.д.&lt;br /&gt;Поправь меня если я не прав, но по ссылке выше ты рассказал именно про реализацию подхода 1 - восстановления позиции через сделки. &lt;br /&gt;Тогда вопрос: Как реализовать именно вараинт 2? &lt;br /&gt;По большому счету тут SQL не нужно. Достаточно 1 файл с элементами типа {Strategy ID/Name, Position}. И при перезапуске робота считывать эти данные и сообщать роботу с какой позицией он стартует. Тогда в общем случае и логику менять не надо, так как робот просто сразу переходит в состояние long/short N контрактов как бы пропуская фазу набора позиции.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;по большому счету да, сохраняешь состояние стратегии и восстанавливаешь его при создании. Но тогда теряется статистика стратегии... но если у тебя свои классы по ее подсчету, то можно себе позволить&lt;br /&gt;&lt;br /&gt;покажешь свои классы &amp;quot;подсчету pnl, mark-to-market pnl, доходности и т.д.&amp;quot; ?&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/31835/</id>
    <title type="text">Тут в каждом подходе есть свои плюсы и свои минусы. 1. Восстановление позиций через восстановление з...</title>
    <published>2014-10-09T08:04:21Z</published>
    <updated>2014-10-09T08:04:21Z</updated>
    <author>
      <name>devruss</name>
      <uri>https://stocksharp.ru/users/50604/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;lebedevsrg &lt;a href="https://stocksharp.ru/posts/m/31830/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Тут в каждом подходе есть свои плюсы и свои минусы.&lt;br /&gt;&lt;br /&gt;1. Восстановление позиций через восстановление заявок/сделок&lt;br /&gt;&lt;br /&gt;2. Восстановление позиций через восстановление информации о позициях &lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я тоже создал свои классы и под хранение инфы по трейдам (не позициям), а также по правильному подсчету pnl, mark-to-market pnl, доходности и т.д.&lt;br /&gt;Поправь меня если я не прав, но по ссылке выше ты рассказал именно про реализацию подхода 1 - восстановления позиции через сделки. &lt;br /&gt;Тогда вопрос: Как реализовать именно вараинт 2? &lt;br /&gt;По большому счету тут SQL не нужно. Достаточно 1 файл с элементами типа {Strategy ID/Name, Position}. И при перезапуске робота считывать эти данные и сообщать роботу с какой позицией он стартует. Тогда в общем случае и логику менять не надо, так как робот просто сразу переходит в состояние long/short N контрактов как бы пропуская фазу набора позиции.&lt;br /&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/31830/</id>
    <title type="text">Тут в каждом подходе есть свои плюсы и свои минусы. 1. Восстановление позиций через восстановление з...</title>
    <published>2014-10-08T18:34:11Z</published>
    <updated>2014-10-08T18:45:39Z</updated>
    <author>
      <name>JaguarFX</name>
      <uri>https://stocksharp.ru/users/49779/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Тут в каждом подходе есть свои плюсы и свои минусы.&lt;br /&gt;&lt;br /&gt;1. Восстановление позиций через восстановление заявок/сделок&lt;br /&gt;Очевидный плюс - получение полноценной статистики и PnL на основе свойств стратегии.&lt;br /&gt;Минус - при большом числе заявок/сделок перфоманс при старте падает. &lt;br /&gt;Кроме того у меня при количестве заявок прим. от 2000 / сделок от 3000 стали возникать проблемы с тем, что предварительный запрос на очистку таблиц  от старых записей в целях исключения дублирований стал прерываться при старте следующего по коду запроса на запись, и как результат пошла мультипликация записей. Возможно там для решения проблемы нужно было перейти на асинхронный вызов и дожидаться выполнения первого запроса из кода, но я к этому моменту осознал избыточность для моих интересов данного подхода и остановил запись и восстановление заявок/сделок. &lt;br /&gt;Перешел на подход №2.&lt;br /&gt;&lt;br /&gt;2. Восстановление позиций через восстановление информации о позициях &lt;br /&gt;Очевидный плюс - сохранение в БД только самой важной информации. &lt;br /&gt;Далее, если объект заявка содержит только одно поле UserOrderId для хранения информации о сигнале на открытие позиции, то в собственном классе по позициям можно создать несколько полей для последующего использовании при принятии решения о закрытии позиции (н-р сигнал, тайм-фрейм) и подсчете доходов (н-р при торговле фичами размер резерва капитала, даты/спреды ролл-оверов).&lt;br /&gt;Минус - необходимость создания собственного класса для хранения позиций и встраивание его работы в работу стратегии. &lt;br /&gt;Кроме того стандартные статистика и PnL по стратегии теряют свою актуальность. Статистика конечно не столь важна, а вот для расчета PnL пришлось написать отдельную функцию. Для моей стратегии правда это было и так необходимо сделать, так как PnL с учетом колебаний рыночной стоимости не интересен, а интересна мгновенная и общая годовая доходность работы по сигналам.&lt;br /&gt;  &lt;br /&gt;Поэтому я бы сказал что выбор подхода тут сильно зависит от используемой стратегии. Для относительно простых стратегий с небольшим количеством сделок пойдет и 1й подход, для более сложных конечно удобней сделать свою логику.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31829/</id>
    <title type="text">Большое спасибо за ответ. Так как я не программист, мне потребовалось несколько дней, чтобы разобрат...</title>
    <published>2014-10-08T08:21:52Z</published>
    <updated>2014-10-08T08:21:52Z</updated>
    <author>
      <name>devruss</name>
      <uri>https://stocksharp.ru/users/50604/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Большое спасибо за ответ. Так как я не программист, мне потребовалось несколько дней, чтобы разобраться в коде&lt;br /&gt;Есть несколько вопросов:&lt;br /&gt;- Ваша идея восстановления позиции состоит в том, чтобы при каждом запуске заново грузить все сделки и по ним считать позицию. Для этого сделки хранятся в БД. Это абсолютно верно, что из сделок можно получить поозицию, но, как мне кажется, избыточно. &lt;br /&gt;Был ли рассмотрен следующий подход: при совершении сделки (partial fill/ full fill), меняется позиция. Робот узнает об изменении позиции только от feedback от биржи о статусе исполненного ордера (ну либо если ордер лимитный, и робот знает, что пришел confirmation о том, что он выставлен, + цена прошла уровень ордера, то автоматом считаем ордер исполненным - нужно для HFT). Так вот, как только робот узнает об изменении позиции, вместо того, чтобы тут же сохранять сделку в БД он просто записывает в файл позицию. При старте робота, не нужно выгружать все сделки, а только сообщить стартовую позицию и все. &lt;br /&gt;&lt;br /&gt;- Встает вопрос, за какой период нужно выгружать сделки. Если робот торгует длинные таймфремы, то это может быть и несколько месяцев. А это дофига сделок, если есть в портфеле есть стратегии торгующие high frequency и low frequency.&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/31811/</id>
    <title type="text">секретные разработки?</title>
    <published>2014-10-03T11:09:30Z</published>
    <updated>2014-10-03T11:09:30Z</updated>
    <author>
      <name>Andrii</name>
      <uri>https://stocksharp.ru/users/27996/</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/31796/</id>
    <title type="text">так же есть AttachOrder, но как будет корректно не особо понятно, хочется опытное мнение</title>
    <published>2014-10-02T13:03:44Z</published>
    <updated>2014-10-02T13:03:44Z</updated>
    <author>
      <name>Andrii</name>
      <uri>https://stocksharp.ru/users/27996/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">так же есть AttachOrder, но как будет корректно не особо понятно, хочется опытное мнение</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>