保存和加载设置
在 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("长期 SMA 周期", string.Empty, "基本设置");
}
}
为特殊情况覆盖
只有在特殊情况下,当您需要保存或加载不属于标准策略参数集合的数据时,才需要重写 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 的标准序列化工具将设置保存到文件或从文件加载。