Сохранение и загрузка настроек
В StockSharp механизм сохранения и загрузки настроек стратегий реализован через методы Strategy.Save и Strategy.Load.
Автоматическая работа с параметрами
Для большинства случаев нет необходимости в переопределении методов Save
и Load
, так как базовый класс Strategy автоматически сохраняет и загружает параметры стратегии, созданные с использованием StrategyParam<T>.
Рекомендуемый подход - использовать механизм параметров стратегии, подробно описанный в разделе Параметры стратегии. При таком подходе все параметры автоматически сохраняются и загружаются:
public class SmaStrategy : Strategy
{
private readonly StrategyParam<int> _longSmaLength;
public int LongSmaLength
{
get => _longSmaLength.Value;
set => _longSmaLength.Value = value;
}
public SmaStrategy()
{
_longSmaLength = Param(nameof(LongSmaLength), 80)
.SetDisplay("Long SMA length", string.Empty, "Base settings");
}
}
Переопределение для особых случаев
Переопределение методов Save
и Load
требуется только в особых случаях, когда необходимо сохранить или загрузить данные, которые не входят в стандартный набор параметров стратегии. Например, для сохранения внутреннего состояния, нестандартных структур данных или кэшированных значений.
Если вы переопределяете эти методы, обязательно нужно вызывать методы базового класса:
public override void Save(SettingsStorage settings)
{
// Сначала вызываем базовый метод для сохранения стандартных параметров
base.Save(settings);
// Затем добавляем свою специфичную логику сохранения
settings.SetValue("CustomState", _customState);
}
public override void Load(SettingsStorage settings)
{
// Сначала вызываем базовый метод для загрузки стандартных параметров
base.Load(settings);
// Затем добавляем свою специфичную логику загрузки
if (settings.Contains("CustomState"))
_customState = settings.GetValue<string>("CustomState");
}
Сохранение и загрузка из файла
Для сохранения настроек в файл или загрузки из файла можно использовать сериализацию и десериализацию, реализованную в StockSharp:
// Сохранение настроек в файл
var settingsStorage = new SettingsStorage();
strategy.Save(settingsStorage);
new JsonSerializer<SettingsStorage>().Serialize(settingsStorage, "strategy.json");
// Загрузка настроек из файла
var newStrategy = new SmaStrategy();
if (File.Exists("strategy.json"))
{
var loadedSettings = new JsonSerializer<SettingsStorage>().Deserialize("strategy.json");
newStrategy.Load(loadedSettings);
}
Рекомендации
- По возможности, используйте StrategyParam<T> для всех настраиваемых параметров стратегии.
- Переопределяйте методы
Save
иLoad
только при необходимости сохранить/загрузить нестандартные данные. - Всегда вызывайте базовые методы
base.Save()
иbase.Load()
при переопределении. - Для сохранения настроек в файл или загрузки из файла используйте стандартные средства сериализации StockSharp.