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}"); }
public void Initialize() { _instance = new GridOptimizer(); _grid = new GridState { CellsMatrix = Utils.BuildCellMatrix(4, 4) }; }
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}"); } }
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}"); }
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); }
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(); }
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 }; }