コード例 #1
0
        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();
        }
コード例 #2
0
        /// <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);
                }
            }
        }