﻿<?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">Прошу совета как среднесрочной стратегией переживать ночное время</title>
  <id>~/topic/3817/proshu-soveta-kak-srednesrochnoi-strategiei-perezhivat-nochnoe-vremya/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-06T18:13:17Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3817" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/28013/</id>
    <title type="text">&amp;quot;Так стратегия будет восстанавливать orders, trades, positions,pnl и т.д. Но только в том случае, ес...</title>
    <published>2013-11-05T08:40:56Z</published>
    <updated>2013-11-05T08:40:56Z</updated>
    <author>
      <name>Stason</name>
      <uri>https://stocksharp.com/users/27775/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&amp;quot;Так стратегия будет восстанавливать orders, trades, positions,pnl и т.д. Но только в том случае, если из шлюза приходят зарегестрированные ранее заявки,сделки и т.д. &amp;quot;&lt;br /&gt;В Квике не сохраняются заявки и сделки за предыдущий день, данный метод для шлюза Квик не подходит?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27080/</id>
    <title type="text">Можно сохранять все что нужно в xml файл вот так. В вашей стратегии создаем пару свойств private boo...</title>
    <published>2013-08-20T20:46:00Z</published>
    <updated>2013-08-20T20:46:00Z</updated>
    <author>
      <name>Kazai Mazai</name>
      <uri>https://stocksharp.com/users/5954/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Можно сохранять все что нужно в xml файл вот так.&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 bool _firstStart = true;

public SettingsStorage SettingsStorage;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&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;
 if (!Name) throw new ArgumentNullException(&amp;quot;Strategy Name&amp;quot;);



          if (File.Exists(Name + &amp;quot;_settings.xml&amp;quot;))
          {
              SettingsStorage = new XmlSerializer&amp;lt;SettingsStorage&amp;gt;().Deserialize(Name + &amp;quot;_settings.xml&amp;quot;);

          }
          else
          {
              SettingsStorage = new Ecng.Serialization.SettingsStorage();

          }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В метод &amp;quot;на старте&amp;quot; стратегии добавляем код&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;
 base.OnStarted();
        
          if (_firstStart)
          {
              LoadState(SettingsStorage);
              _firstStart = false;
 
          }
          &lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Хотя в в расширениях для стратегий, кажется есть такой метод, делаем свой, или как хотите)&lt;br /&gt;В моем есть немного мусора, плюс то что нужно мне. Вам стоит обратить внимание на &amp;quot;OrderByTransactionIds&amp;quot;.&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;
  protected virtual void LoadState(SettingsStorage storage)
      {


          if (storage == null)
              throw new ArgumentNullException(&amp;quot;storage&amp;quot;);

          var settings = storage.GetValue&amp;lt;SettingsStorage&amp;gt;(&amp;quot;Settings&amp;quot;);
          if (settings != null &amp;amp;&amp;amp; settings.Count != 0)
          {
             /* if (settings.Contains(&amp;quot;security&amp;quot;))
                  Security = Trader.Securities.FirstOrDefault(s =&amp;gt; s.Id == settings.GetValue&amp;lt;string&amp;gt;(&amp;quot;security&amp;quot;));

              if (settings.Contains(&amp;quot;portfolio&amp;quot;))
                  Portfolio = Trader.Portfolios.FirstOrDefault(p =&amp;gt; p.Name == settings.GetValue&amp;lt;string&amp;gt;(&amp;quot;portfolio&amp;quot;));
              
              var id = Id;

           

              if (Id != id)
                  throw new InvalidOperationException();
               * */
          }
          else
          {
                settings = new SettingsStorage();
                settings.SetValue(&amp;quot;PortfolioCurrentMinValue&amp;quot;, _defaultCurrentMinValue);
                settings.SetValue(&amp;quot;MaxPositionValue&amp;quot;, _defaultMaxPositionValue);
                settings.SetValue(&amp;quot;MinPnL&amp;quot;, _defaultMinPnL);
                settings.SetValue(TradeSize, _defaultSize);
                settings.SetValue(IsTradeAllowed, _defaultIsTradeAllowed);
              

              
                storage.SetValue(&amp;quot;Settings&amp;quot;, settings);
          }
             Load(storage);
         
          var statistics = storage.GetValue&amp;lt;SettingsStorage&amp;gt;(&amp;quot;Statistics&amp;quot;);
          if (statistics != null)
          {
              foreach (var parameter in StatisticManager.Parameters.Where(parameter =&amp;gt; statistics.ContainsKey(parameter.Name)))
              {
                  parameter.Load(statistics.GetValue&amp;lt;SettingsStorage&amp;gt;(parameter.Name));
              }
          }


          var orderTransactionIds = storage.GetValue&amp;lt;Dictionary&amp;lt;long, Order&amp;gt;&amp;gt;(&amp;quot;OrderByTransactionIds&amp;quot;);
          if (orderTransactionIds != null)
          {
              foreach (var transactionId in orderTransactionIds.Keys)
              {
                  var order = Trader.Orders.First(o =&amp;gt; o.TransactionId == transactionId);
                  if (order != null) AttachOrder(order, order.GetTrades());

                  
              }
          }

      }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&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;
public override void Save(SettingsStorage storage)
      {
          

          var ordersToWrite = new Dictionary&amp;lt;long, Order&amp;gt;();
          foreach (var order in Orders)
          {
              ordersToWrite.Add(order.TransactionId, order);
          }
          if (storage.ContainsKey(&amp;quot;OrderByTransactionIds&amp;quot;)) storage[&amp;quot;OrderByTransactionIds&amp;quot;] = ordersToWrite;
          else storage.Add(&amp;quot;OrderByTransactionIds&amp;quot;, ordersToWrite);


          var xmlSerializer = new XmlSerializer&amp;lt;SettingsStorage&amp;gt;();
          xmlSerializer.Serialize(storage, Name + &amp;quot;_settings.xml&amp;quot;);
          base.Save(storage);

      }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Так стратегия будет восстанавливать orders, trades, positions,pnl и т.д. Но только в том случае, если из шлюза приходят зарегестрированные ранее заявки,сделки и т.д. &lt;br /&gt;&lt;br /&gt;Если нет, то нужно наследоваться от шлюза Trader и нечто похожее на то, что делалось для стратегии проделать и там, сохраняя сделки, ордера, портфели, инструменты.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;В стокшарпе есть как бы ORM для этого - EntityStorage. Но у меня ее как бы не особо получается заставить работать. &lt;br /&gt;После добавления недостающих полей в БД, без которых, естественно, ничего никуда не сохраняется, можно с горем пополам сохранять ордера, сделки, инструменты, портфели.&lt;br /&gt;Но отношения между таблицами нихрена не работают, подозреваю, что в Ecng.Data какая-то жопа.&lt;br /&gt;&lt;br /&gt;Почему бы не мигрировать S# на EntityFramework и не сделать прекрасную модель данных для всего, что только можно. Понятно, что будут возникать проблемы при обновлении версий, но они ж и так возникают=))&lt;br /&gt;&lt;br /&gt;И даже, видимо, не обязательно ковырять и перенаследовать все сущности, благодаря first code with POCO.&lt;br /&gt;&lt;br /&gt;&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.com/posts/m/26590/</id>
    <title type="text">Понимаю, что для кого-то вопрос окажется глупым, а ответ очевидным, но… Если нетрудно, прошу опытных...</title>
    <published>2013-07-04T18:57:07Z</published>
    <updated>2013-07-04T18:57:40Z</updated>
    <author>
      <name>Lipot</name>
      <uri>https://stocksharp.com/users/16767/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Понимаю, что для кого-то вопрос окажется глупым, а ответ очевидным, но…&lt;br /&gt;&lt;br /&gt;Если нетрудно, прошу опытных алготрейдеров S# посоветовать каким образом лучше проходить через ночное время в моей ситуации. У кого, так сказать, какой опыт.&lt;br /&gt;&lt;br /&gt;Суть в следующем: при торговле через Плаза (вероятно, на Квике та же ситуация) происходит дисконнект (сервера, видимо, выключаются) после окончания вечерней сессии - где-то в 0 - 0:30.&lt;br /&gt;Поэтому своего трейдера отключаю предварительно - по расписанию сразу в 23:50, чтобы не было проблем с реконнектом итд., а потом включаю в 9:50. Вопрос в том: если есть среднесрочная стратегия, которая к 23:50, предположим, находится в позиции и, соответственно, есть правила (например, правило полное исполнения ордера order.WhenMatched), заполненные соответствующие словари, коллекции и пр. Каким образом сделать так, чтобы стратегия на следующий день, как ни в чем не бывало, без кардинального изменения своего состояния на момент окончания предыдущего дня, продолжала работать, отрабатывать сформированные правила, подписи на события? Интересно, что произойдет и какие последствия могут быть, если просто ничего не предпринимать со стратегией типа Strategy.&lt;br /&gt;&lt;br /&gt;Посоветуйте, пожалуйста. Спасибо. Буду благодарен за любые комментарии.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>