﻿<?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/1398/sohranenie-parametrov-strategii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-19T07:34:05Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=1398" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/6590/</id>
    <title type="text">В предыдущем сообщении отредактировал код класса SerializableDictionary чтобы не ругался FxCop. Кто ...</title>
    <published>2011-03-10T23:31:57Z</published>
    <updated>2011-03-10T23:31:57Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;В предыдущем сообщении отредактировал код класса SerializableDictionary чтобы не ругался FxCop.
Кто воспользовался - можете тоже заменить :)&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6475/</id>
    <title type="text">KAX: Если я Вас правильно понял, то можете использовать файлы конфигурации. http://msdn.microsoft.co...</title>
    <published>2011-03-07T12:49:44Z</published>
    <updated>2011-03-10T23:30:31Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(6473)" rel="nofollow" target="_blank"&gt;KAX&lt;/a&gt;:&lt;/strong&gt;
Если я Вас правильно понял, то можете использовать файлы конфигурации.
&lt;a href="http://msdn.microsoft.com/en-us/library/a65txexh.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/a65txexh.aspx&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Нет, немного не так. Речь именно о хранении внутри робота.
В роботе много стратегий может быть и хорошо уметь с ними работать как с одним типом данных - чтобы обращаться, сериализовать, ....&lt;/p&gt;
&lt;p&gt;2 варианта, которые я видел:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Хранить настройки стратегий в виде Dictionary&amp;lt;string, object&amp;gt;&lt;/li&gt;
&lt;li&gt;Наследоваться от интерфейса и хранить настройки в классах.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Я выбрал первый вариант как наиболее простой и понятный.
Есть только 1 проблема - Dictionary&amp;lt;string, object&amp;gt; не является сериализуемым.&lt;/p&gt;
&lt;p&gt;Но и эта проблема, после поисков в инете, легко решилась.
Кому необходимо - используйте SerializableDictionary:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;using System;
using System.Runtime.Serialization;
using System.Xml;
using System.Collections.Generic;
using System.Xml.Serialization;

namespace Robots.Entities
{
    [Serializable]
    [XmlRoot(&amp;quot;dictionary&amp;quot;)]
    public class SerializableDictionary&amp;lt;TKey, TValue&amp;gt; : Dictionary&amp;lt;TKey, TValue&amp;gt;, IXmlSerializable
    {
        public SerializableDictionary() { }
        protected SerializableDictionary(SerializationInfo info, StreamingContext context) : base(info, context) { }

        #region IXmlSerializable Members
        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(XmlReader reader)
        {
            var keySerializer = new XmlSerializer(typeof(TKey));
            var valueSerializer = new XmlSerializer(typeof(TValue));

            var wasEmpty = reader.IsEmptyElement;
            reader.Read();
            if (wasEmpty) return;

            while (reader.NodeType != XmlNodeType.EndElement)
            {
                reader.ReadStartElement(&amp;quot;item&amp;quot;);

                reader.ReadStartElement(&amp;quot;key&amp;quot;);
                var key = (TKey)keySerializer.Deserialize(reader);
                reader.ReadEndElement();

                reader.ReadStartElement(&amp;quot;value&amp;quot;);
                var value = (TValue)valueSerializer.Deserialize(reader);
                reader.ReadEndElement();

                Add(key, value);

                reader.ReadEndElement();
                reader.MoveToContent();
            }

            reader.ReadEndElement();
        }

        public void WriteXml(XmlWriter writer)
        {
            var keySerializer = new XmlSerializer(typeof(TKey));
            var valueSerializer = new XmlSerializer(typeof(TValue));

            foreach (var key in Keys)
            {
                writer.WriteStartElement(&amp;quot;item&amp;quot;);

                writer.WriteStartElement(&amp;quot;key&amp;quot;);
                keySerializer.Serialize(writer, key);
                writer.WriteEndElement();

                writer.WriteStartElement(&amp;quot;value&amp;quot;);
                var value = this[key];
                valueSerializer.Serialize(writer, value);

                writer.WriteEndElement();
                writer.WriteEndElement();
            }
        }
        #endregion
    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[cool]&lt;/p&gt;
&lt;p&gt;А вот уже все настройки действительно сохраняются легко в AppConfig.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6473/</id>
    <title type="text">Если я Вас правильно понял, то можете использовать файлы конфигурации. http://msdn.microsoft.com/en-...</title>
    <published>2011-03-07T07:57:15Z</published>
    <updated>2011-03-07T07:57:15Z</updated>
    <author>
      <name>KAX</name>
      <uri>https://stocksharp.com/users/3408/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Если я Вас правильно понял, то можете использовать файлы конфигурации.
&lt;a href="http://msdn.microsoft.com/en-us/library/a65txexh.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/a65txexh.aspx&lt;/a&gt;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6259/</id>
    <title type="text">У всех множество стратегий и у каждой стратегии обычно есть параметры. Кто как создаёт структуру эти...</title>
    <published>2011-02-26T11:03:52Z</published>
    <updated>2011-02-26T11:03:52Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;У всех множество стратегий и у каждой стратегии обычно есть параметры.&lt;/p&gt;
&lt;p&gt;Кто как создаёт структуру этих параметров в коде на C#?&lt;/p&gt;
&lt;p&gt;Как классы, наследующие один и тот же интерфейс?
Или как dictionary&amp;lt;string, object&amp;gt; - сопоставление имени параметра на значение?&lt;/p&gt;
&lt;p&gt;Есть ли в C# более удобные классы для сохранения параметров?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>