예제 #1
0
        public async Task CouldFindMaximumUsingMaximizeMethodWithBigStep()
        {
            var sw          = new Stopwatch();
            var startMemory = GC.GetTotalMemory(true);

            sw.Restart();
            var par0 = new Parameter("par0", 0, 100, 1, 10);
            var par1 = new Parameter("par1", 0, 100, 1, 10);
            var par2 = new Parameter("par2", 0, 100, 1, 10);

            var pars = new Parameters(new[] { par0, par1, par2 });

            var total = pars.TotalInterations;

            Console.WriteLine($"Total iterations: {total}");

            Func <Parameters, ValueTask <double> > targetFunc = (args) =>
            {
                var result = -(Math.Pow(200 - args[0].Current, 2) + Math.Pow(10 - args[1].Current, 2) +
                               Math.Pow(70 - args[2].Current, 2));
                return(new ValueTask <double>(result));
            };

            var opt = await GridOptimizer.MaximizeWithBigStep(pars, targetFunc, false);

            var optParams = opt.Parameters;

            var endMemory = GC.GetTotalMemory(false);

            sw.Stop();
            Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}");
            Console.WriteLine($"Memory: {endMemory - startMemory}");
            Console.WriteLine($"Optimum: {optParams[0].Current} - {optParams[1].Current} - {optParams[2].Current}");
        }
예제 #2
0
 public void Initialize()
 {
     _instance = new GridOptimizer();
     _grid     = new GridState
     {
         CellsMatrix = Utils.BuildCellMatrix(4, 4)
     };
 }
예제 #3
0
        public async Task CouldFindMaximumWithSpinWait()
        {
            var par0 = new Parameter("par0", 0, 10, 1);
            var par1 = new Parameter("par1", 0, 10, 1);
            var par2 = new Parameter("par2", 0, 10, 1);

            var pars = new Parameters(new[] { par0, par1, par2 });

            var total = pars.TotalInterations;

            Console.WriteLine($"Total iterations: {total}");

            Func <Parameters, ValueTask <double> > targetFunc = (args) =>
            {
                var task = Task.Run(() =>
                {
                    var sum = 0L;
                    for (var i = 0; i < 10000000; i++)
                    {
                        sum = sum + i;
                    }
                    // avoid any release optimization
                    if (sum == int.MaxValue)
                    {
                        throw new ApplicationException();
                    }

                    var result = -(Math.Pow(2 - args[0].Current, 2) + Math.Pow(1 - args[1].Current, 2) + Math.Pow(7 - args[2].Current, 2));
                    return(result);
                });
                return(new ValueTask <double>(task));
            };

            // true for memoize, second run is almost instant
            var maximizer = new GridOptimizer <double>(pars, targetFunc, true);

            EvalFolderFunc <double, EvalAddress> folder = FolderFunc;

            for (int i = 0; i < 2; i++)
            {
                var sw          = new Stopwatch();
                var startMemory = GC.GetTotalMemory(true);
                sw.Restart();

                var optimum = await maximizer.FoldGrid(EvalAddress.Worst, folder);

                var optParams = pars.SetPositionsFromLinearAddress(optimum.LinearAddress);

                var endMemory = GC.GetTotalMemory(false);
                sw.Stop();
                Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}");
                Console.WriteLine($"Memory: {endMemory - startMemory}");
                Console.WriteLine($"Optimum: {optParams[0].Current} - {optParams[1].Current} - {optParams[2].Current}");
            }
        }
예제 #4
0
        public async Task CouldFindMaximum()
        {
            var sw          = new Stopwatch();
            var startMemory = GC.GetTotalMemory(true);

            sw.Restart();
            var par0 = new Parameter("par0", 0, 100, 1);
            var par1 = new Parameter("par1", 0, 100, 1);
            var par2 = new Parameter("par2", 0, 100, 1);

            var pars = new Parameters(new[] { par0, par1, par2 });

            var total = pars.TotalInterations;

            Console.WriteLine($"Total iterations: {total}");

            Func <Parameters, ValueTask <double> > targetFunc = (args) =>
            {
                //return Task.Run(() => {
                //    //await Task.Delay(0);
                //    var result = -(Math.Pow(200 - args[0].Current, 2) + Math.Pow(10 - args[1].Current, 2) +
                //          Math.Pow(70 - args[2].Current, 2));
                //    return result;
                //});

                var result = -(Math.Pow(20 - args[0].Current, 2) + Math.Pow(10 - args[1].Current, 2) +
                               Math.Pow(70 - args[2].Current, 2));
                return(new ValueTask <double>(result));
            };

            var maximizer = new GridOptimizer <double>(pars, targetFunc);

            EvalFolderFunc <double, EvalAddress> folder = FolderFunc;

            // NB Func<> cannot have byref params
            //Func<EvalAddress, GridOptimizer.EvalParametersResult, EvalAddress> folder = (state, item) => {
            //    if (item.Value > state.Value) {
            //        return new EvalAddress() { Value = item.Value, LinearAddress = item.Parameters.LinearAddress() };
            //    }
            //    return state;
            //};

            var optimum = await maximizer.FoldGrid(EvalAddress.Worst, folder);

            var optParams = pars.SetPositionsFromLinearAddress(optimum.LinearAddress);

            var endMemory = GC.GetTotalMemory(false);

            sw.Stop();
            Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}");
            Console.WriteLine($"Memory: {endMemory - startMemory}");
            Console.WriteLine($"Optimum: {optParams[0].Current} - {optParams[1].Current} - {optParams[2].Current}");
        }
예제 #5
0
        public GridOptimizerTests()
        {
            var startTime = DateTimeOffset.Now.AddDays(-10);
            var endTime   = DateTimeOffset.Now;

            _optimizerSettings = new OptimizerSettings
            {
                AccountBalance       = 10000,
                AccountLeverage      = 500,
                BacktesterType       = typeof(OhlcBacktester),
                BacktestSettingsType = typeof(BacktestSettings),
            };

            var data = SampleDataGenerator.GetSampleData(200, startTime, endTime, TimeSpan.FromDays(1));

            var symbol = new OhlcSymbol(new TimeBasedBars(TimeSpan.FromDays(1)))
            {
                Name = "Main"
            };
            var symbolData = new SymbolBacktestData(symbol, data);

            _optimizerSettings.SymbolsData = new List <ISymbolBacktestData> {
                symbolData
            };
            _optimizerSettings.BacktestSettingsParameters = new List <object>
            {
                startTime,
                endTime,
            }.ToArray();
            _optimizerSettings.TradeEngineType    = typeof(BacktestTradeEngine);
            _optimizerSettings.TimerContainerType = typeof(TimerContainer);
            _optimizerSettings.ServerType         = typeof(Server);
            _optimizerSettings.RobotSettingsType  = typeof(RobotParameters);
            _optimizerSettings.RobotType          = typeof(SampleBot);
            _optimizerSettings.Parameters         = new List <OptimizeParameter>()
            {
                new OptimizeParameter("Periods", 30, 50, 10),
                new OptimizeParameter("Deviation", 2),
                new OptimizeParameter("Range", 2000, 6000, 2000)
            };
            _optimizerSettings.BacktesterInterval = TimeSpan.FromHours(1);

            _optimizer = new GridOptimizer(_optimizerSettings);
        }
예제 #6
0
        private static void Optimize(ISymbol symbol, IEnumerable <IBar> data)
        {
            var startTime = data.Min(iBar => iBar.Time);
            var endTime   = data.Max(iBar => iBar.Time);

            var symbolsData = new List <ISymbolBacktestData> {
                new SymbolBacktestData(symbol, data)
            };

            var optimizerSettings = new OptimizerSettings
            {
                AccountBalance       = 10000,
                AccountLeverage      = 500,
                BacktesterType       = typeof(OhlcBacktester),
                BacktestSettingsType = typeof(BacktestSettings),
                BacktesterInterval   = TimeSpan.FromHours(1),
            };

            optimizerSettings.SymbolsData = symbolsData;
            optimizerSettings.BacktestSettingsParameters = new object[]
            {
                startTime,
                endTime,
            };
            optimizerSettings.TradeEngineType    = typeof(BacktestTradeEngine);
            optimizerSettings.TimerContainerType = typeof(TimerContainer);
            optimizerSettings.ServerType         = typeof(Server);
            optimizerSettings.RobotSettingsType  = typeof(RobotParameters);
            optimizerSettings.RobotType          = typeof(SingleSymbolMaCrossOverBot);
            optimizerSettings.Parameters         = new List <OptimizeParameter>()
            {
                new OptimizeParameter("Fast MA Period", 5, 15, 5),
                new OptimizeParameter("Slow MA Period", 20),
                new OptimizeParameter("Volume", 1)
            };

            var optimizer = new GridOptimizer(optimizerSettings);

            optimizer.OnOptimizationPassCompletionEvent += Optimizer_OnOptimizationPassCompletionEvent;
            optimizer.OnOptimizationStoppedEvent        += Optimizer_OnOptimizationStoppedEvent;
            optimizer.OnOptimizationStartedEvent        += Optimizer_OnOptimizationStartedEvent;

            optimizer.Start();
        }
예제 #7
0
        public TablePlugin(WordprocessingDocument wpDoc)
        {
            var styles =
                wpDoc.MainDocumentPart?.StyleDefinitionsPart?.Styles ?? new Styles();
            var stylesCollector = new StyleCollector
            {
                Styles = styles
            };
            var layoutFactory = new LayoutFactory
            {
                StyleCollector = stylesCollector
            };
            var gridOptimizer = new GridOptimizer();

            GridStateFactory = new GridStateFactory
            {
                StyleCollector = stylesCollector,
                LayoutFactory  = layoutFactory,
                GridOptimizer  = gridOptimizer
            };
        }