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); } }