public void AddNewStrategy(StrategyParam SParam) { if (SParam == null) { return; } Strategy nStrategy = StrategyTool.GetStrategyByName(SParam.StrategyType, ""); if (nStrategy == null) { System.Media.SystemSounds.Beep.Play(); Print("Ошибка: неправильный тип стратегии - " + SParam.StrategyType); return; } StrategyTool.ChangeBaseParam(ref nStrategy, SParam); StrategiesList.Add(nStrategy.Param.StrategyName, nStrategy); nStrategy.SaveData(); }
/// <summary> /// Прочитать стратегии из ini файла /// </summary> public void ReadStrategies() { if (!File.Exists(IniTool.IniFnameStates)) { FileIniDataParser tfileIniData = new FileIniDataParser(); IniData newParsedData = new IniData(); tfileIniData.WriteFile(IniTool.IniFnameStates, newParsedData); } FileIniDataParser fileIniData = new FileIniDataParser(); IniData parsedDataParams = fileIniData.ReadFile(IniTool.IniFnameParams); IniData parsedDataStates = fileIniData.ReadFile(IniTool.IniFnameStates); IEnumerable <SectionData> StratSectParams = parsedDataParams.Sections.Where((x) => { return(x.SectionName.Contains("Strategy_")); }); foreach (SectionData sdata in StratSectParams) { try { Dictionary <string, string> ResDictParam = new Dictionary <string, string>(); for (int i = 0; i < sdata.Keys.Count; i++) { ResDictParam.Add(sdata.Keys.ElementAt(i).KeyName, sdata.Keys.ElementAt(i).Value); } Strategy nStrategy = StrategyTool.GetStrategyByName(ResDictParam["StrategyType"], sdata.SectionName); nStrategy.ChangeState += OnStartegyChangeState; nStrategy.Param.LoadData(ResDictParam); if (parsedDataStates.Sections.ContainsSection(sdata.SectionName)) { SectionData SDataState = parsedDataStates.Sections.GetSectionData(sdata.SectionName); Dictionary <string, string> ResDictState = new Dictionary <string, string>(); for (int i = 0; i < SDataState.Keys.Count; i++) { ResDictState.Add(SDataState.Keys.ElementAt(i).KeyName, SDataState.Keys.ElementAt(i).Value); } nStrategy.State.LoadData(ResDictState); } else { nStrategy.SaveData(false); } StrategiesList.Add(nStrategy.Param.StrategyName, nStrategy); if (nStrategy.State.IsStartegyRun) { nStrategy.State.IsStartegyRun = false; try { ThreadPool.QueueUserWorkItem((x) => nStrategy.Start(false)); Print(string.Format("Запущено стратегию: [{0}]", nStrategy.Param.StrategyName)); } catch (Exception ex) { System.Media.SystemSounds.Beep.Play(); Print(string.Format("Ошибка при запуске стратегии [{0}]: {1}", nStrategy.Param.StrategyName, ex.Message)); } } } catch (Exception ex) { System.Media.SystemSounds.Beep.Play(); Print("Ошибка при возобновлении стратегии из ini файла: " + ex.Message); } } }