using Managing.Domain.Strategies;
using Orleans;
namespace Managing.Domain.Scenarios;
///
/// Lightweight scenario class for Orleans serialization
/// Contains only the essential properties needed for backtesting
///
[GenerateSerializer]
public class LightScenario
{
public LightScenario(string name, int? loopbackPeriod = 1)
{
Name = name;
Indicators = new List();
LoopbackPeriod = loopbackPeriod;
}
[Id(0)] public string Name { get; set; }
[Id(1)] public List Indicators { get; set; }
[Id(2)] public int? LoopbackPeriod { get; set; }
///
/// Converts a full Scenario to a LightScenario
///
public static LightScenario FromScenario(Scenario scenario)
{
var lightScenario = new LightScenario(scenario.Name, scenario.LoopbackPeriod)
{
Indicators = scenario.Indicators?.Select(LightIndicator.FromIndicator).ToList() ??
new List()
};
return lightScenario;
}
///
/// Converts a LightScenario back to a full Scenario
///
public Scenario ToScenario()
{
var scenario = new Scenario(Name, LoopbackPeriod)
{
Indicators = Indicators?.Select(li => li.ToIndicator()).ToList() ?? new List()
};
return scenario;
}
public void AddIndicator(LightIndicator indicator)
{
if (Indicators == null)
Indicators = new List();
Indicators.Add(indicator);
}
}