public void Enumerate(OptimizationStepParameter optimizationParameter) { var enumerator = new OptimizationStepParameterEnumerator(optimizationParameter); int total = 0; for (decimal value = optimizationParameter.MinValue; value <= optimizationParameter.MaxValue; value += optimizationParameter.Step.Value) { total++; Assert.IsTrue(enumerator.MoveNext()); Assert.AreEqual(value, enumerator.Current.ToDecimal()); } Assert.AreEqual(Math.Floor((optimizationParameter.MaxValue - optimizationParameter.MinValue) / optimizationParameter.Step.Value) + 1, total); Assert.IsFalse(enumerator.MoveNext()); }
public void Step1D(decimal min, decimal max, decimal step) { var param = new OptimizationStepParameter("ema-fast", min, max, step); var set = new HashSet <OptimizationParameter>() { param }; _strategy.Initialize(new Target("Profit", new Maximization(), null), new List <Constraint>(), set, new StepBaseOptimizationStrategySettings()); var counter = 0; using (var enumerator = new EnqueueableEnumerator <ParameterSet>()) { _strategy.NewParameterSet += (s, parameterSet) => { enumerator.Enqueue(parameterSet); }; _strategy.PushNewResults(OptimizationResult.Initial); using (var paramEnumerator = new OptimizationStepParameterEnumerator(param)) { while (paramEnumerator.MoveNext()) { var value = paramEnumerator.Current; counter++; Assert.IsTrue(enumerator.MoveNext()); var suggestion = enumerator.Current; Assert.IsNotNull(suggestion); Assert.IsTrue(suggestion.Value.All(s => set.Any(arg => arg.Name == s.Key))); Assert.AreEqual(1, suggestion.Value.Count); Assert.AreEqual(value, suggestion.Value["ema-fast"]); } } Assert.AreEqual(0, enumerator.Count); } Assert.Greater(counter, 0); Assert.AreEqual(Math.Floor((param.MaxValue - param.MinValue) / param.Step.Value) + 1, counter); }
public void Step3D() { var args = new HashSet <OptimizationParameter>() { new OptimizationStepParameter("ema-fast", 10, 100, 1), new OptimizationStepParameter("ema-slow", 20, 200, 4), new OptimizationStepParameter("ema-custom", 30, 300, 2) }; _strategy.Initialize(new Target("Profit", new Maximization(), null), null, args, new StepBaseOptimizationStrategySettings()); var counter = 0; using (var enumerator = new EnqueueableEnumerator <ParameterSet>()) { _strategy.NewParameterSet += (s, parameterSet) => { enumerator.Enqueue(parameterSet); }; _strategy.PushNewResults(OptimizationResult.Initial); var fastParam = args.First(arg => arg.Name == "ema-fast") as OptimizationStepParameter; var slowParam = args.First(arg => arg.Name == "ema-slow") as OptimizationStepParameter; var customParam = args.First(arg => arg.Name == "ema-custom") as OptimizationStepParameter; using (var fastEnumerator = new OptimizationStepParameterEnumerator(fastParam)) { using (var slowEnumerator = new OptimizationStepParameterEnumerator(slowParam)) { using (var customEnumerator = new OptimizationStepParameterEnumerator(customParam)) { while (fastEnumerator.MoveNext()) { var fast = fastEnumerator.Current; slowEnumerator.Reset(); while (slowEnumerator.MoveNext()) { var slow = slowEnumerator.Current; customEnumerator.Reset(); while (customEnumerator.MoveNext()) { var custom = customEnumerator.Current; counter++; Assert.IsTrue(enumerator.MoveNext()); var suggestion = enumerator.Current; Assert.IsNotNull(suggestion); Assert.IsTrue(suggestion.Value.All(s => args.Any(arg => arg.Name == s.Key))); Assert.AreEqual(3, suggestion.Value.Count()); Assert.AreEqual(fast, suggestion.Value["ema-fast"]); Assert.AreEqual(slow, suggestion.Value["ema-slow"]); Assert.AreEqual(custom, suggestion.Value["ema-custom"]); } } } } } } Assert.AreEqual(0, enumerator.Count); } Assert.Greater(counter, 0); var total = 1m; foreach (var arg in args.Cast <OptimizationStepParameter>()) { total *= (arg.MaxValue - arg.MinValue) / arg.Step.Value + 1; } Assert.AreEqual(total, counter); }