/// <summary> /// Метод смены оптимизатора /// </summary> /// <param name="optimiserName">Имя выбранного оптимизатора</param> /// <returns>true в слечае успеха</returns> public bool ChangeOptimiser(string optimiserName, string terminalName) { // Еслизапущен процесс оптимизации или же запущен терминалл - то не чего не делаем if (Optimiser != null && (Optimiser.IsOptimisationInProcess || Optimiser.TerminalManager.IsActive)) { return(false); } // Если текущий оптимизатор не пуст if (Optimiser != null) { // Отписываемся от событий прошлого оптимизатора Optimiser.ProcessStatus -= Optimiser_ProcessStatus; Optimiser.OptimisationProcessFinished -= Optimiser_OptimisationProcessFinished; Optimiser.ClearOptimiser(); Optimiser.CloseSettingsWindow(); // Создаем новый оптимизатор и копируем старый менеджер терминалла Optimiser = optimiserCreators.First(x => x.Name == optimiserName).Create(Optimiser.TerminalManager); } else { try { // Создаем новый оптимизатор и создаем менеджер терминалла Optimiser = optimiserCreators.First(x => x.Name == optimiserName) .Create(new TerminalManager(terminalDirectory.Terminals.First(x => x.Name == terminalName))); } catch (Exception e) { // В случае ошибки - переадресоввываем её текст в графический интерфейс ThrowException(e.Message); return(false); } } // Подписываемся на события нового оптимизатора Optimiser.ProcessStatus += Optimiser_ProcessStatus; Optimiser.OptimisationProcessFinished += Optimiser_OptimisationProcessFinished; return(true); }
/// <summary> /// Коллбек окончания процеса оптимизации /// </summary> /// <param name="obj">Оптимизатор</param> private void Optimiser_OptimisationProcessFinished(IOptimiser optimiser) { DirectoryInfo cachDir = optimiser.TerminalManager.TerminalChangeableDirectory .GetDirectory("Tester") .GetDirectory("cache", true); workingDirectory.Tester.GetDirectory("cache", true).GetFiles().ToList() .ForEach(x => { string path = Path.Combine(cachDir.FullName, x.Name); if (!File.Exists(path)) { x.MoveTo(path); } }); SaveOptimisations(optimiser); if (LoadingOptimisationTougle) { LoadSavedOptimisation(optimiser.OptimiserWorkingDirectory); } OptimisationStoped(); Optimiser.ClearOptimiser(); }
private void StartOptimisation(OptimiserInputData optimiserInputData, bool isAppend, string dirPrefix) { if ((optimiserInputData.HistoryBorders.Count == 0 && optimiserInputData.ForwardBorders.Count == 0)) { ThrowException("Fill in date borders"); OnPropertyChanged("ResumeEnablingTogle"); return; } if (Optimiser.TerminalManager.IsActive) { ThrowException("Terminal already running"); return; } if (optimiserInputData.OptimisationMode == ENUM_OptimisationMode.Disabled) { StartTest(optimiserInputData); return; } if (!isAppend) { var dir = workingDirectory.GetOptimisationDirectory(optimiserInputData.Symb, Path.GetFileNameWithoutExtension(optimiserInputData.RelativePathToBot), dirPrefix, Optimiser.Name); List <FileInfo> data = dir.GetFiles().ToList(); data.ForEach(x => x.Delete()); List <DirectoryInfo> dirData = dir.GetDirectories().ToList(); dirData.ForEach(x => x.Delete()); } Optimiser.CloseSettingsWindow(); try { DirectoryInfo cachDir = Optimiser.TerminalManager.TerminalChangeableDirectory .GetDirectory("Tester") .GetDirectory("cache", true); DirectoryInfo cacheCopy = workingDirectory.Tester.GetDirectory("cache", true); cacheCopy.GetFiles().ToList().ForEach(x => x.Delete()); cachDir.GetFiles().ToList() .ForEach(x => x.MoveTo(Path.Combine(cacheCopy.FullName, x.Name))); ClearResults(); Optimiser.ClearOptimiser(); int ind = optimiserInputData.BotParams.FindIndex(x => x.Variable == Fixed_Input_Settings.Params[InputParamName.CloseTerminalFromBot]); if (ind > -1) { var item = optimiserInputData.BotParams[ind]; item.Value = "true"; item.IsOptimize = false; optimiserInputData.BotParams[ind] = item; } var botParams = optimiserInputData.BotParams.ToList(); // Copy expert settings Optimiser.Start(optimiserInputData, Path.Combine(terminalDirectory.Common.FullName, $"{Path.GetFileNameWithoutExtension(optimiserInputData.RelativePathToBot)}_Report.xml"), dirPrefix); SetFileManager fileManager = new SetFileManager( Path.Combine(workingDirectory.GetOptimisationDirectory(optimiserInputData.Symb, Path.GetFileNameWithoutExtension(optimiserInputData.RelativePathToBot), dirPrefix, Optimiser.Name).FullName, "OptimisationSettings.set"), true) { Params = botParams }; fileManager.SaveParams(); Optimiser.TerminalManager.WaitForStop(); } catch (Exception e) { Optimiser.Stop(); throw e; } }