Beispiel #1
0
            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);
            }