Exemplo n.º 1
0
        /// <summary>
        /// взять все стратегии с параметрами которые есть в платформе
        /// </summary>
        public void GetNamesStrategyToOptimization()
        {
            List <string> names = PanelCreator.GetNamesStrategy();

            int numThread = Convert.ToInt32(Thread.CurrentThread.Name);

            for (int i = numThread; i < names.Count; i += 3)
            {
                BotPanel bot = PanelCreator.GetStrategyForName(names[i], numThread.ToString(), StartProgram.IsOsOptimizer);
                if (bot.Parameters == null ||
                    bot.Parameters.Count == 0)
                {
                    //SendLogMessage("Не оптимизируем. Без параметров: " + bot.GetNameStrategyType(), LogMessageType.System);
                }
                else
                {
                    // SendLogMessage("С параметрами: " + bot.GetNameStrategyType(), LogMessageType.System);
                    _namesWhithParams.Add(names[i]);
                }
                if (numThread == 2)
                {
                }
                bot.Delete();
            }

            if (StrategyNamesReadyEvent != null)
            {
                StrategyNamesReadyEvent(_namesWhithParams);
            }
        }
Exemplo n.º 2
0
            public static PropertyField Property(this PanelCreator self, PropertyClass target, Rcon.Property property)
            {
                var control = self.panel.AddChild <PropertyField>();

                control.SetTarget(target, property);
                return(control);
            }
Exemplo n.º 3
0
        public static TranslationTextEntry TranslationTextEntry(this PanelCreator self)
        {
            TranslationTextEntry translationTextEntry = new();

            self.panel.AddChild(translationTextEntry);

            return(translationTextEntry);
        }
Exemplo n.º 4
0
        public static HorizontalLineBreak HorizontalLineBreak(this PanelCreator self)
        {
            HorizontalLineBreak horizontalLineBreak = new();

            self.panel.AddChild(horizontalLineBreak);

            return(horizontalLineBreak);
        }
Exemplo n.º 5
0
        public static TranslationButton TranslationButton(this PanelCreator self, TranslationData translationData, string icon = null, string classname = null, Action onClick = null)
        {
            TranslationButton translationButton = new(translationData, icon, classname, onClick);

            self.panel.AddChild(translationButton);

            return(translationButton);
        }
Exemplo n.º 6
0
        public static LineBreak LineBreak(this PanelCreator self)
        {
            LineBreak lineBreak = new();

            self.panel.AddChild(lineBreak);

            return(lineBreak);
        }
Exemplo n.º 7
0
        public static TranslationCheckbox TranslationCheckbox(this PanelCreator self, TranslationData translationData)
        {
            TranslationCheckbox translationCheckbox = new(translationData);

            self.panel.AddChild(translationCheckbox);

            return(translationCheckbox);
        }
Exemplo n.º 8
0
            public static TextEntry TextEntry(this PanelCreator self, string text)
            {
                var control = self.panel.AddChild <TextEntry>();

                control.Text = text;

                return(control);
            }
Exemplo n.º 9
0
            public static PropertySection PropertySection(this PanelCreator self, string label, Icon icon)
            {
                var control = self.panel.AddChild <PropertySection>();

                control.Label.Text     = label;
                control.IconPanel.Icon = icon;
                return(control);
            }
Exemplo n.º 10
0
        public static TranslationTabContainer TranslationTabContainer(this PanelCreator self)
        {
            TranslationTabContainer translationTabContainer = new();

            self.panel.AddChild(translationTabContainer);

            return(translationTabContainer);
        }
Exemplo n.º 11
0
        public static FileSelectionEntry FileSelectionEntry(this PanelCreator self, string text = "", string icon = null)
        {
            FileSelectionEntry fileSelectionEntry = new(self.panel);

            fileSelectionEntry.FileNameLabel.Text = text;
            fileSelectionEntry.FileTypeIcon.Text  = icon;

            return(fileSelectionEntry);
        }
Exemplo n.º 12
0
        public PanelCreateUi()
        {
            InitializeComponent();

            ComboBoxStrategyType.ItemsSource   = PanelCreator.GetNamesStrategy();
            ComboBoxStrategyType.SelectedIndex = 0;

            TextBoxName.Text = "MyNewBot";
        }
Exemplo n.º 13
0
        /// <summary>
        /// загрузить роботов по сохранённым именам
        /// </summary>
        private void Load()
        {
            if (!File.Exists(@"Engine\Settings" + _typeWorkKeeper + "Keeper.txt"))
            { // если нет нужного нам файла. Просто выходим
                return;
            }

            //try
            //{
            // 1 считаем кол-во сохранённых ботов
            int botCount = 0;

            using (StreamReader reader = new StreamReader(@"Engine\Settings" + _typeWorkKeeper + "Keeper.txt"))
            {// если файл есть. Подключаемся к нему и качаем данные
                // индикаторы
                while (!reader.EndOfStream)
                {
                    if (!string.IsNullOrWhiteSpace(reader.ReadLine()))
                    {
                        botCount++;
                    }
                }
            }

            if (botCount == 0)
            {
                return;
            }
            // создаём массив и роботов
            _panelsArray = new List <BotPanel>();

            int botIterator = 0;

            using (StreamReader reader = new StreamReader(@"Engine\Settings" + _typeWorkKeeper + "Keeper.txt"))
            {// если файл есть. Подключаемся к нему и качаем данные
                // индикаторы
                while (!reader.EndOfStream)
                {
                    string[] names = reader.ReadLine().Split('@');
                    _panelsArray.Add(PanelCreator.GetStrategyForName(names[1], names[0]));
                    _tabBotNames.Items.Add(_panelsArray[botIterator].NameStrategyUniq);
                    SendNewLogMessage("Создан новый бот " + _panelsArray[botIterator].NameStrategyUniq, LogMessageType.System);
                    botIterator++;
                }
            }

            ReloadActivBot(_panelsArray[0]);

            // }
            // catch
            // {
            // ignored
            // }
        }
Exemplo n.º 14
0
        public void BuildTest()
        {
            KeyboardParametersStorage keyboardDataNull = null;
            ksDocument3D document3DNull = null;

            var panelCreatorObject = new PanelCreator();

            Assert.Throws <NullReferenceException>(()
                                                   => panelCreatorObject.Build(document3DNull,
                                                                               keyboardDataNull));
        }
Exemplo n.º 15
0
        /// <summary>
        /// load robots with saved names
        /// загрузить роботов по сохранённым именам
        /// </summary>
        private void Load()
        {
            if (!File.Exists(@"Engine\Settings" + _typeWorkKeeper + "Keeper.txt"))
            { // if there is no file we need. Just go out
              // если нет нужного нам файла. Просто выходим
                return;
            }


            int botCount = 0;

            using (StreamReader reader = new StreamReader(@"Engine\Settings" + _typeWorkKeeper + "Keeper.txt"))
            {
                while (!reader.EndOfStream)
                {
                    if (!string.IsNullOrWhiteSpace(reader.ReadLine()))
                    {
                        botCount++;
                    }
                }
            }

            if (botCount == 0)
            {
                return;
            }

            _panelsArray = new List <BotPanel>();

            int botIterator = 0;

            using (StreamReader reader = new StreamReader(@"Engine\Settings" + _typeWorkKeeper + "Keeper.txt"))
            {
                while (!reader.EndOfStream)
                {
                    string[] names = reader.ReadLine().Split('@');
                    BotPanel bot   = PanelCreator.GetStrategyForName(names[1], names[0], _startProgram);
                    if (bot != null)
                    {
                        _panelsArray.Add(bot);
                        _tabBotNames.Items.Add(" " + _panelsArray[botIterator].NameStrategyUniq + " ");
                        SendNewLogMessage(OsLocalization.Trader.Label2 + _panelsArray[botIterator].NameStrategyUniq,
                                          LogMessageType.System);
                        botIterator++;
                    }
                }
            }
            if (_panelsArray.Count != 0)
            {
                ReloadActivBot(_panelsArray[0]);
            }
        }
Exemplo n.º 16
0
        public PanelCreateUi()
        {
            InitializeComponent();

            ComboBoxStrategyType.ItemsSource   = PanelCreator.GetNamesStrategy();
            ComboBoxStrategyType.SelectedIndex = 0;
            TextBoxName.Text = "MyNewBot";

            Title = OsLocalization.Trader.Label59;
            LabelStrategyType.Content = OsLocalization.Trader.Label60;
            LabelName.Content         = OsLocalization.Trader.Label61;
            ButtonAccept.Content      = OsLocalization.Trader.Label17;
        }
Exemplo n.º 17
0
            public static Button Button(this PanelCreator self, string text, Action onClick = null)
            {
                var control = self.panel.AddChild <Button>();

                control.SetText(text);

                if (onClick != null)
                {
                    control.AddEvent("onclick", onClick);
                }

                return(control);
            }
Exemplo n.º 18
0
 public void ShowForms()
 {
     CleanContentPanel();
     if (forms != null && panels != null)
     {
         int i = 0;
         foreach (Panel panel in panels)
         {
             int max = pageNumber * panels.Count + i;
             if (max < forms.Count)
             {
                 panel.Visible = true;
                 PanelCreator contentPanel = new PanelCreator(panel);
                 MaterialForm form         = forms[max];
                 contentPanel.Open(form);
                 i++;
             }
         }
     }
 }
Exemplo n.º 19
0
        public AdminForm()
        {
            InitializeComponent();
            desingerService = DesingerServiceImpl.GetInstance();
            desingerService.AddFormToDesinger(this);
            desingerService.AddPanelToChangeColor(checkTicketPanel);

            newsContent = new PanelCreator(newsPanel);
            newsContent.Open(new NewsAdminListForm());

            moviesContent = new PanelCreator(moviesPanel);
            moviesContent.Open(new MoviesAdminListForm());

            usersContent = new PanelCreator(usersPanel);
            usersContent.Open(new UsersListForm());

            hallsContent = new PanelCreator(hallsPanel);
            hallsContent.Open(new HallsAdminListForm());

            seanceContent = new PanelCreator(seancePanel);
            seanceContent.Open(new SeanceAdminListForm());
        }
Exemplo n.º 20
0
            static void DrawScrapTotals()
            {
                if (DataShop.shopMode == 0 || (DataShop.shopMode == 1 && !DataShop.canDisablePurchasedBlueprints))
                {
                    float         scrapSpacing        = 75;
                    float         titlePreferredWidth = 195.76f;
                    GameObject    panelOutline        = PanelCreator.CreatePanelSize(UIDrawer.rootTransform);
                    RectTransform panelTransform      = panelOutline.GetComponent <RectTransform>();
                    float         panelWidth          = titlePreferredWidth + (DataShop.scrap.Count + 0.5f) * scrapSpacing + UIConfig.panelPadding * 2 + 10;
                    panelTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, panelWidth);
                    panelTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, UIConfig.blueButtonHeight);
                    panelTransform.localPosition = new Vector3(UIDrawer.rootTransform.rect.width - UIConfig.offsetHorizontal - panelWidth, -UIConfig.offsetVertical, 0);
                    UIDrawer.shopInterfaces.Add(panelOutline);

                    for (int tierIndex = 0; tierIndex < DataShop.scrap.Count; tierIndex++)
                    {
                        ElementCreator.SpawnTextSize(scrapTexts, panelOutline.transform.GetChild(0).gameObject, new Color(1, 1, 1, 1), 30, 0, new Vector2(0.5f, 1), new Vector2(300, UIConfig.blueButtonHeight - UIConfig.panelPadding * 2), new Vector3((tierIndex + 0.5f) * scrapSpacing, 0, 0));
                    }
                    List <TMPro.TextMeshProUGUI> titleText = new List <TMPro.TextMeshProUGUI>();
                    ElementCreator.SpawnTextSize(titleText, panelOutline.transform.GetChild(0).gameObject, new Color(1, 1, 1, 1), 30, 0, new Vector2(0, 1), new Vector2(400, UIConfig.blueButtonHeight - UIConfig.panelPadding * 2), new Vector3((DataShop.scrap.Count + 0.5f) * scrapSpacing, 0, 0));
                    titleText[0].text      = "APTITUDE SCORES";
                    titleText[0].alignment = TMPro.TextAlignmentOptions.Left;
                }
            }
Exemplo n.º 21
0
        private void LoadToPanel <TBindValue>(
            Control dest,
            string controllerName,
            IList <string> controllerButtons,
            IDictionary <string, string> categoryLabels,
            IDictionary <string, Dictionary <string, TBindValue> > settingsBlock,
            TBindValue defaultValue,
            PanelCreator <TBindValue> createPanel
            )
        {
            if (!settingsBlock.TryGetValue(controllerName, out var settings))
            {
                settings = new Dictionary <string, TBindValue>();
                settingsBlock[controllerName] = settings;
            }

            // check to make sure that the settings object has all of the appropriate bool buttons
            foreach (var button in controllerButtons)
            {
                if (!settings.Keys.Contains(button))
                {
                    settings[button] = defaultValue;
                }
            }

            if (controllerButtons.Count == 0)
            {
                return;
            }

            // split the list of all settings into buckets by player number, or supplied category
            // the order that buttons appeared in determines the order of the tabs
            var orderedBuckets = new List <KeyValuePair <string, List <string> > >();
            var buckets        = new Dictionary <string, List <string> >();

            // by iterating through only the controller's active buttons, we're silently
            // discarding anything that's not on the controller right now.  due to the way
            // saving works, those entries will still be preserved in the config file, tho
            foreach (var button in controllerButtons)
            {
                if (!categoryLabels.TryGetValue(button, out var categoryLabel))
                {
                    var m = ButtonMatchesPlayer.Match(button);
                    categoryLabel = m.Success
                                                ? $"Player {m.Groups[1].Value}"
                                                : "Console"; // anything that wants not console can set it in the categorylabels
                }

                if (!buckets.ContainsKey(categoryLabel))
                {
                    var l = new List <string>();
                    buckets.Add(categoryLabel, l);
                    orderedBuckets.Add(new KeyValuePair <string, List <string> >(categoryLabel, l));
                }

                buckets[categoryLabel].Add(button);
            }

            if (orderedBuckets.Count == 1)
            {
                // everything went into bucket 0, so make no tabs at all
                dest.Controls.Add(createPanel(settings, controllerButtons.ToList(), dest.Size));
            }
            else
            {
                // create multiple tabs
                var tt = new TabControl {
                    Dock = DockStyle.Fill
                };
                dest.Controls.Add(tt);
                int pageIdx = 0;
                foreach (var(tabName, buttons) in orderedBuckets)
                {
                    tt.TabPages.Add(tabName);
                    tt.TabPages[pageIdx++].Controls.Add(createPanel(settings, buttons, tt.Size));
                }
            }
        }
Exemplo n.º 22
0
        /// <summary>
        /// create bot
        /// создать бота
        /// </summary>
        public void CreateNewBot()
        {
            try
            {
                PanelCreateUi ui = new PanelCreateUi();
                ui.ShowDialog();

                if (ui.IsAccepted == false)
                {
                    return;
                }

                if (ui.NameStrategy == "Martingale")
                {
                    if (ui.NameBot.Split('h').Length != 1)
                    {
                        MessageBox.Show(OsLocalization.Trader.Label6);
                        return;
                    }
                    if (ui.NameBot.Split('l').Length != 1)
                    {
                        MessageBox.Show(OsLocalization.Trader.Label7);
                        return;
                    }
                }

                if (File.Exists(@"Engine\" + @"SettingsRealKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsRealKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show(OsLocalization.Trader.Label8);
                                return;
                            }
                        }
                    }
                }

                if (File.Exists(@"Engine\" + @"SettingsTesterKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsTesterKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show(OsLocalization.Trader.Label8);
                                return;
                            }
                        }
                    }
                }

                BotPanel newRobot = PanelCreator.GetStrategyForName(ui.NameStrategy, ui.NameBot, _startProgram);

                if (_panelsArray == null)
                {
                    _panelsArray = new List <BotPanel>();
                }
                _panelsArray.Add(newRobot);

                SendNewLogMessage(OsLocalization.Trader.Label9 + newRobot.NameStrategyUniq, LogMessageType.System);

                ReloadActivBot(newRobot);
                Save();

                ReloadRiskJournals();
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
        }
Exemplo n.º 23
0
        private void LoadToPanel <T>(Control dest, string controllerName, IList <string> controllerButtons, Dictionary <string, string> categoryLabels, IDictionary <string, Dictionary <string, T> > settingsBlock, T defaultValue, PanelCreator <T> createPanel)
        {
            if (!settingsBlock.TryGetValue(controllerName, out var settings))
            {
                settings = new Dictionary <string, T>();
                settingsBlock[controllerName] = settings;
            }

            // check to make sure that the settings object has all of the appropriate bool buttons
            foreach (var button in controllerButtons)
            {
                if (!settings.Keys.Contains(button))
                {
                    settings[button] = defaultValue;
                }
            }

            if (controllerButtons.Count == 0)
            {
                return;
            }

            // split the list of all settings into buckets by player number
            var buckets         = new List <string> [MaxPlayers + 1];
            var categoryBuckets = new WorkingDictionary <string, List <string> >();

            for (var i = 0; i < buckets.Length; i++)
            {
                buckets[i] = new List <string>();
            }

            // by iterating through only the controller's active buttons, we're silently
            // discarding anything that's not on the controller right now.  due to the way
            // saving works, those entries will still be preserved in the config file, tho
            foreach (var button in controllerButtons)
            {
                int i;
                for (i = MaxPlayers; i > 0; i--)
                {
                    if (button.StartsWith($"P{i}"))
                    {
                        break;
                    }
                }

                if (i > MaxPlayers)                 // couldn't find
                {
                    i = 0;
                }

                if (categoryLabels.ContainsKey(button))
                {
                    categoryBuckets[categoryLabels[button]].Add(button);
                }
                else
                {
                    buckets[i].Add(button);
                }
            }

            if (buckets[0].Count == controllerButtons.Count)
            {
                // everything went into bucket 0, so make no tabs at all
                dest.Controls.Add(createPanel(settings, controllerButtons.ToList(), dest.Size));
            }
            else
            {
                // create multiple player tabs
                var tt = new TabControl {
                    Dock = DockStyle.Fill
                };
                dest.Controls.Add(tt);
                int pageIdx = 0;
                for (int i = 1; i <= MaxPlayers; i++)
                {
                    if (buckets[i].Count > 0)
                    {
                        string tabName = _emulator.SystemId != "WSWAN" ? $"Player {i}" : i == 1 ? "Normal" : "Rotated";                         // hack
                        tt.TabPages.Add(tabName);
                        tt.TabPages[pageIdx].Controls.Add(createPanel(settings, buckets[i], tt.Size));
                        pageIdx++;
                    }
                }

                foreach (var cat in categoryBuckets)
                {
                    string tabName = cat.Key;
                    tt.TabPages.Add(tabName);
                    tt.TabPages[pageIdx].Controls.Add(createPanel(settings, cat.Value, tt.Size));

                    // ZxHawk hack - it uses multiple categoryLabels
                    if (_emulator.SystemId == "ZXSpectrum" ||
                        _emulator.SystemId == "AmstradCPC" ||
                        _emulator.SystemId == "ChannelF")
                    {
                        pageIdx++;
                    }
                }

                if (buckets[0].Count > 0)
                {
                    // ZXHawk needs to skip this bit
                    if (_emulator.SystemId == "ZXSpectrum" || _emulator.SystemId == "AmstradCPC" || _emulator.SystemId == "ChannelF")
                    {
                        return;
                    }

                    string tabName =
                        (_emulator.SystemId == "C64") ? "Keyboard" :
                        (_emulator.SystemId == "MAME") ? "Misc" :
                        "Console";                         // hack
                    tt.TabPages.Add(tabName);
                    tt.TabPages[pageIdx].Controls.Add(createPanel(settings, buckets[0], tt.Size));
                }
            }
        }
Exemplo n.º 24
0
            static public GameObject CreateScroll(RectTransform rootTransform, int rows, int textCount, List <int> items, float width, Vector3 position, Dictionary <int, List <Image> > images, Dictionary <int, List <TMPro.TextMeshProUGUI> > texts)
            {
                Vector2 size = new Vector2();

                size.x = width;
                size.y = (UIConfig.itemButtonWidth + textCount * UIConfig.itemTextHeight + UIConfig.itemPaddingOuter * 2) * rows + UIConfig.scrollPadding * 2 + UIConfig.panelPadding * 2;
                GameObject itemsScroll = ElementCreator.SpawnImageSize(new List <Image>(), rootTransform.gameObject, null, new Color(0, 0, 0, 0), new Vector2(0, 1), size, position);

                itemsScroll.name = "Scroll";
                ScrollRect itemsScrollScroll = itemsScroll.AddComponent <ScrollRect>();

                itemsScrollScroll.horizontal          = true;
                itemsScrollScroll.vertical            = false;
                itemsScrollScroll.horizontalScrollbar = null;
                itemsScrollScroll.verticalScrollbar   = null;
                itemsScrollScroll.movementType        = ScrollRect.MovementType.Clamped;
                itemsScrollScroll.inertia             = false;
                itemsScrollScroll.scrollSensitivity   = 50;
                itemsScroll.AddComponent <RoR2.UI.MPEventSystemLocator>();
                itemsScroll.AddComponent <RoR2.UI.ScrollToSelection>();

                GameObject scrollbar = new GameObject("Scroll Bar");

                scrollbar.transform.parent = itemsScroll.transform;
                CanvasGroup canvasGroup = scrollbar.AddComponent <CanvasGroup>();

                canvasGroup.blocksRaycasts = false;
                canvasGroup.interactable   = false;
                scrollbar.AddComponent <RoR2.UI.MPEventSystemLocator>();
                RoR2.UI.MPScrollbar scrollbarScrollbar = scrollbar.AddComponent <RoR2.UI.MPScrollbar>();
                scrollbarScrollbar.direction          = Scrollbar.Direction.LeftToRight;
                itemsScrollScroll.horizontalScrollbar = scrollbarScrollbar;

                GameObject panel = PanelCreator.CreatePanel(itemsScroll.transform);

                itemsScrollScroll.viewport = panel.transform.GetChild(0).GetComponent <RectTransform>();

                Image itemsContentImage = ElementCreator.SpawnImageOffset(new List <Image>(), panel.transform.GetChild(0).gameObject, null, new Color(0, 0, 0, 0), new Vector2(0, 1), new Vector2(0, 0), new Vector2(0, 0));

                itemsContentImage.raycastTarget = true;
                GameObject itemsContent = itemsContentImage.gameObject;

                RectTransform itemsContentTransform = itemsContentImage.GetComponent <RectTransform>();
                int           itemsPerRow           = Mathf.CeilToInt(items.Count * 1f / rows);
                int           itemsInBottomRow      = items.Count - itemsPerRow * (rows - 1);

                itemsContentTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Mathf.Max(UIConfig.scrollPadding * 2 + (UIConfig.itemButtonWidth + UIConfig.itemPaddingOuter * 2) * itemsPerRow, itemsScrollScroll.viewport.rect.width));

                List <RectTransform> itemButtons = new List <RectTransform>();

                for (int index = 0; index < items.Count; index++)
                {
                    itemButtons.Add(ButtonCreator.SpawnItemButton(itemsContent, textCount, items[index], images, texts));
                }

                itemsScrollScroll.content = itemsContentTransform;
                itemsScrollScroll.horizontalNormalizedPosition = 0.5f;

                for (int row = 0; row < rows; row++)
                {
                    for (int collumn = 0; collumn < itemsPerRow; collumn++)
                    {
                        if (row * itemsPerRow + collumn < itemButtons.Count)
                        {
                            float offset = (itemsContentTransform.rect.width - UIConfig.scrollPadding * 2 - (UIConfig.itemButtonWidth + UIConfig.itemPaddingOuter * 2) * itemsPerRow) / 2f;
                            if (row == rows - 1)
                            {
                                offset += (itemsPerRow - itemsInBottomRow) * (UIConfig.itemButtonWidth + UIConfig.itemPaddingOuter * 2) / 2f;
                            }
                            itemButtons[row * itemsPerRow + collumn].localPosition = new Vector3(UIConfig.scrollPadding + collumn * (UIConfig.itemButtonWidth + UIConfig.itemPaddingOuter * 2) + offset, -UIConfig.scrollPadding - row * (UIConfig.itemButtonWidth + textCount * UIConfig.itemTextHeight + UIConfig.itemPaddingOuter * 2), 0);
                        }
                    }
                }

                return(itemsScroll);
            }
Exemplo n.º 25
0
        /// <summary>
        /// запустить ещё одного робота, в рамках оптимизации
        /// </summary>
        /// <param name="parametrs">список всех параметров</param>
        /// <param name="paramOptimized">параметры по которым осуществляется перебор</param>
        /// <param name="faze">текущая фаза оптимизации</param>
        /// <param name="botsInFaze">список ботов уже запущенный в текущей фазе</param>
        /// <param name="botName">имя создаваемого робота</param>
        private void StartNewBot(List <IIStrategyParameter> parametrs, List <IIStrategyParameter> paramOptimized,
                                 OptimizerFaze faze, List <BotPanel> botsInFaze, string botName)
        {
            if (!MainWindow.GetDispatcher.CheckAccess())
            {
                MainWindow.GetDispatcher.Invoke(
                    new Action
                    <List <IIStrategyParameter>, List <IIStrategyParameter>,
                     OptimizerFaze, List <BotPanel>, string>(StartNewBot),
                    parametrs, paramOptimized, faze, botsInFaze, botName);
                Thread.Sleep(1000);
                return;
            }

// 1. создаём новый сервер для оптимизации. И один поток соответственно
            OptimizerServer server = ServerMaster.CreateNextOptimizerServer(_master.Storage, _serverNum,
                                                                            _master.StartDepozit);

            _serverNum++;
            _servers.Add(server);

            server.TestingEndEvent            += server_TestingEndEvent;
            server.TypeTesterData              = _master.Storage.TypeTesterData;
            server.TestintProgressChangeEvent += server_TestintProgressChangeEvent;

            for (int i = 0; i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                Security secToStart =
                    _master.Storage.Securities.Find(s => s.Name == _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity);

                server.GetDataToSecurity(secToStart, _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame, faze.TimeStart,
                                         faze.TimeEnd);
            }
// 2. создаём нового робота и прогружаем его соответствующими настройками и параметрами

            BotPanel bot = PanelCreator.GetStrategyForName(_master.StrategyName, botName);

            for (int i = 0; i < parametrs.Count; i++)
            {
                IIStrategyParameter par = paramOptimized.Find(p => p.Name == parametrs[i].Name);

                if (par == null)
                {
                    par = parametrs[i];
                }

                if (bot.Parameters[i].Type == StrategyParameterType.Bool)
                {
                    ((StrategyParameterBool)bot.Parameters[i]).ValueBool = ((StrategyParameterBool)par).ValueBool;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.String)
                {
                    ((StrategyParameterString)bot.Parameters[i]).ValueString = ((StrategyParameterString)par).ValueString;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.Int)
                {
                    ((StrategyParameterInt)bot.Parameters[i]).ValueInt = ((StrategyParameterInt)par).ValueInt;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.Bool)
                {
                    ((StrategyParameterBool)bot.Parameters[i]).ValueBool = ((StrategyParameterBool)par).ValueBool;
                }
            }
// настраиваем вкладки
            for (int i = 0; i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                bot.TabsSimple[i].Connector.ServerType    = ServerType.Optimizer;
                bot.TabsSimple[i].Connector.PortfolioName = server.Portfolios[0].Number;
                bot.TabsSimple[i].Connector.NamePaper     = _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity;
                bot.TabsSimple[i].Connector.TimeFrameBuilder.TimeFrame =
                    _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame;

                if (server.TypeTesterData == TesterDataType.Candle)
                {
                    bot.TabsSimple[i].Connector.TimeFrameBuilder.CandleCreateType = CandleSeriesCreateDataType.Tick;
                }
                else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                         server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                {
                    bot.TabsSimple[i].Connector.TimeFrameBuilder.CandleCreateType =
                        CandleSeriesCreateDataType.MarketDepth;
                }
            }

            for (int i = 0; i < _master.TabsIndexNamesAndTimeFrames.Count; i++)
            {
                bot.TabsIndex[i].Tabs.Clear();
                for (int i2 = 0; i2 < _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity.Count; i2++)
                {
                    if (i2 >= bot.TabsIndex[i].Tabs.Count)
                    {
                        bot.TabsIndex[i].CreateNewSecurityConnector();
                    }

                    bot.TabsIndex[i].Tabs[i2].ServerType    = ServerType.Optimizer;
                    bot.TabsIndex[i].Tabs[i2].PortfolioName = server.Portfolios[0].Number;
                    bot.TabsIndex[i].Tabs[i2].NamePaper     = _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity[i2];
                    bot.TabsIndex[i].Tabs[i2].TimeFrameBuilder.TimeFrame =
                        _master.TabsIndexNamesAndTimeFrames[i].TimeFrame;

                    if (server.TypeTesterData == TesterDataType.Candle)
                    {
                        bot.TabsIndex[i].Tabs[i2].TimeFrameBuilder.CandleCreateType = CandleSeriesCreateDataType.Tick;
                    }
                    else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                             server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                    {
                        bot.TabsIndex[i].Tabs[i2].TimeFrameBuilder.CandleCreateType =
                            CandleSeriesCreateDataType.MarketDepth;
                    }
                }
                bot.TabsIndex[i].UserFormula = _master.TabsIndexNamesAndTimeFrames[i].Formula;
            }

// ждём пока робот подключиться к своему серверу данных

            DateTime timeStartWaiting = DateTime.Now;

            while (bot.IsConnected == false)
            {
                Thread.Sleep(1000);

                if (timeStartWaiting.AddSeconds(20) < DateTime.Now)
                {
                    SendLogMessage(
                        "Слишком долгое ожидание подклчючения робота к серверу данных. Что-то пошло не так!",
                        LogMessageType.Error);
                    return;
                }
            }

            server.TestingStart();

            botsInFaze.Add(bot);
        }
Exemplo n.º 26
0
        /// <summary>
        /// создать бота
        /// </summary>
        public void CreateNewBot()
        {
            try
            {
                // 1 вызываем диалог для выбора имени робота
                PanelCreateUi ui = new PanelCreateUi();
                ui.ShowDialog();

                if (ui.IsAccepted == false)
                {
                    return;
                }

                if (ui.NameStrategy == "Martingale")
                {
                    if (ui.NameBot.Split('h').Length != 1)
                    {
                        MessageBox.Show(OsLocalization.Trader.Label6);
                        return;
                    }
                    if (ui.NameBot.Split('l').Length != 1)
                    {
                        MessageBox.Show(OsLocalization.Trader.Label7);
                        return;
                    }
                }

                // 2 проверяем, что имя робота не нарушает никаких правил

                if (File.Exists(@"Engine\" + @"SettingsRealKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsRealKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show(OsLocalization.Trader.Label8);
                                return;
                            }
                        }
                    }
                }

                if (File.Exists(@"Engine\" + @"SettingsTesterKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsTesterKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show(OsLocalization.Trader.Label8);
                                return;
                            }
                        }
                    }
                }

                // 3 создаём робота и сохраняем

                BotPanel newRobot = PanelCreator.GetStrategyForName(ui.NameStrategy, ui.NameBot, _startProgram);

                if (_panelsArray == null)
                {
                    _panelsArray = new List <BotPanel>();
                }
                _panelsArray.Add(newRobot);

                SendNewLogMessage(OsLocalization.Trader.Label9 + newRobot.NameStrategyUniq, LogMessageType.System);

                ReloadActivBot(newRobot);
                Save();

                // перегружаем риск менеджер
                ReloadRiskJournals();
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
        }
Exemplo n.º 27
0
        private static void LoadToPanel <T>(Control dest, string controllerName, IList <string> controllerButtons, Dictionary <string, string> categoryLabels, IDictionary <string, Dictionary <string, T> > settingsblock, T defaultvalue, PanelCreator <T> createpanel)
        {
            Dictionary <string, T> settings;

            if (!settingsblock.TryGetValue(controllerName, out settings))
            {
                settings = new Dictionary <string, T>();
                settingsblock[controllerName] = settings;
            }

            // check to make sure that the settings object has all of the appropriate boolbuttons
            foreach (var button in controllerButtons)
            {
                if (!settings.Keys.Contains(button))
                {
                    settings[button] = defaultvalue;
                }
            }

            if (controllerButtons.Count == 0)
            {
                return;
            }

            // split the list of all settings into buckets by player number
            var buckets         = new List <string> [MAXPLAYERS + 1];
            var categoryBuckets = new WorkingDictionary <string, List <string> >();

            for (var i = 0; i < buckets.Length; i++)
            {
                buckets[i] = new List <string>();
            }

            // by iterating through only the controller's active buttons, we're silently
            // discarding anything that's not on the controller right now.  due to the way
            // saving works, those entries will still be preserved in the config file, tho
            foreach (var button in controllerButtons)
            {
                int i;
                for (i = 1; i <= MAXPLAYERS; i++)
                {
                    if (button.StartsWith("P" + i))
                    {
                        break;
                    }
                }

                if (i > MAXPLAYERS)                 // couldn't find
                {
                    i = 0;
                }

                if (button == "Pointer Pressed")
                {
                    int zzz = 9;
                }

                if (categoryLabels.ContainsKey(button))
                {
                    categoryBuckets[categoryLabels[button]].Add(button);
                }
                else
                {
                    buckets[i].Add(button);
                }
            }

            if (buckets[0].Count == controllerButtons.Count)
            {
                // everything went into bucket 0, so make no tabs at all
                dest.Controls.Add(createpanel(settings, controllerButtons.ToList(), dest.Size));
            }
            else
            {
                // create multiple player tabs
                var tt = new TabControl {
                    Dock = DockStyle.Fill
                };
                dest.Controls.Add(tt);
                int pageidx = 0;
                for (int i = 1; i <= MAXPLAYERS; i++)
                {
                    if (buckets[i].Count > 0)
                    {
                        string tabname = Global.Emulator.SystemId == "WSWAN" ? i == 1 ? "Normal" : "Rotated" : "Player " + i;                         // hack
                        tt.TabPages.Add(tabname);
                        tt.TabPages[pageidx].Controls.Add(createpanel(settings, buckets[i], tt.Size));
                        pageidx++;
                    }
                }

                foreach (var cat in categoryBuckets)
                {
                    string tabname = cat.Key;
                    tt.TabPages.Add(tabname);
                    tt.TabPages[pageidx].Controls.Add(createpanel(settings, cat.Value, tt.Size));
                }

                if (buckets[0].Count > 0)
                {
                    string tabname = Global.Emulator.SystemId == "C64" ? "Keyboard" : "Console";                     // hack
                    tt.TabPages.Add(tabname);
                    tt.TabPages[pageidx].Controls.Add(createpanel(settings, buckets[0], tt.Size));
                }
            }
        }
Exemplo n.º 28
0
            static void DrawInfoPanel()
            {
                Transform background = ElementCreator.SpawnImageOffset(new List <Image>(), UIDrawer.rootTransform.transform.parent.gameObject, null, new Color(0, 0, 0, 0.95f), new Vector2(0.5f, 0.5f), Vector2.zero, Vector2.zero).transform;

                background.GetComponent <Image>().raycastTarget = true;

                GameObject    panelOutline   = PanelCreator.CreatePanelSize(background);
                RectTransform panelTransform = panelOutline.GetComponent <RectTransform>();
                float         panelWidth     = 700 + UIConfig.panelPadding * 2 + 10;
                float         panelHeight    = 600 + UIConfig.panelPadding * 2 + 10;

                if (Data.mode == DataNoShop.mode)
                {
                    panelHeight = 500 + UIConfig.panelPadding * 2 + 10;
                }
                panelTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, panelWidth);
                panelTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, panelHeight);
                panelTransform.localPosition = new Vector3(-panelWidth / 2f, panelHeight / 2f, 0);
                RectTransform panelChildTransform = panelTransform.GetChild(0).GetComponent <RectTransform>();

                List <TMPro.TextMeshProUGUI> text = new List <TMPro.TextMeshProUGUI>();

                ElementCreator.SpawnTextOffset(text, panelChildTransform.gameObject, new Color(1, 1, 1), 24, 0, new Vector2(UIConfig.spacingHorizontal, UIConfig.spacingVertical + UIConfig.blackButtonHeight + UIConfig.spacingVertical), new Vector2(-UIConfig.spacingHorizontal, -UIConfig.spacingVertical));
                if (Data.mode == DataShop.mode)
                {
                    text[0].text  = "UES EMPLOYMENT CONTRACT";
                    text[0].text += "\nSUBSECTION 17b: SALVAGE";
                    text[0].text += "\n";
                    text[0].text += "\nShould the employee be deployed to the site of any crashed UES vessels they are to prioritize the recovery of any intact cargo. As part of our vertical integration policies (38d), the employee will be reimbursed for any cargo salvaged with increased UES Aptitude Scores (11a). The category of aptitude increased is dependant on the value of the cargo salvaged, as this demonstrates ability of the employee work to UES’s interests. Employees with sufficiently high scores may redeem them to enrol in approved UES corporate training courses, to be upskilled in the use of various UES products. Should the employee perish during deployment (41a), a drone will be dispatched to recover any cargo that was in their possession. Any Aptitude Score owing will be accredited to the employee’s next of kin, should they also be an employee of UES, as well as the right to enrol in any corporate training courses the employee had previously redeemed.";
                }
                else if (Data.mode == DataNoShop.mode)
                {
                    text[0].text  = "UES EMPLOYMENT CONTRACT";
                    text[0].text += "\nSUBSECTION 45a: TRAINING";
                    text[0].text += "\n";
                    text[0].text += "\nUES endeavours to ensure that all its employees are as equipped as necessary to complete their assigned duties. To this end numerous corporate training courses have been made available, to upskill employees in the use of various UES products. A thorough analysis of employee aptitude concluded that employees with a close familial relation on the Board of Directors (3b) are more capable than any others. To this end, any such employee is afforded the right to enrol in any course that they deem, in their own judgement, to be of a benefit in fulfilling their duties. UES will take aggressive legal action against any employee alleging bias or nepotism in regards to this matter. The employee agrees to waive their right to a lawyer (42a) should they be sued in regards to this matter.";
                }

                GameObject    backButton          = ButtonCreator.SpawnBlackButton(panelChildTransform.gameObject, new Vector2(UIConfig.blackButtonWidth, UIConfig.blackButtonHeight), "Back", new List <TMPro.TextMeshProUGUI>());
                RectTransform backButtonTransform = backButton.transform.parent.GetComponent <RectTransform>();

                backButtonTransform.localPosition = new Vector3(panelWidth / 2f - UIConfig.blackButtonWidth / 2f, -panelHeight + UIConfig.spacingVertical + UIConfig.blackButtonHeight, backButtonTransform.localPosition.z);

                RoR2.UI.HGButton previousSelectable = backButton.GetComponent <RoR2.UI.MPEventSystemLocator>().eventSystem.currentSelectedGameObject.GetComponent <RoR2.UI.HGButton>();
                Button           backButtonButton   = backButton.GetComponent <RoR2.UI.HGButton>();

                backButtonButton.onClick.AddListener(() => {
                    UIDrawer.rootTransform.GetComponent <CanvasGroup>().interactable = true;
                    if (backButtonButton.GetComponent <RoR2.UI.MPEventSystemLocator>().eventSystem.currentInputSource == RoR2.UI.MPEventSystem.InputSource.Gamepad)
                    {
                        previousSelectable.Select();
                    }
                    else
                    {
                        previousSelectable.enabled = false;
                        previousSelectable.enabled = true;
                    }
                    Destroy(background.gameObject);
                });
                backButtonButton.Select();

                UIDrawer.rootTransform.GetComponent <CanvasGroup>().interactable = false;
            }
Exemplo n.º 29
0
        /// <summary>
        /// создать бота
        /// </summary>
        public void CreateNewBot()
        {
            try
            {
                // 1 вызываем диалог для выбора имени робота
                PanelCreateUi ui = new PanelCreateUi();
                ui.ShowDialog();

                if (ui.IsAccepted == false)
                {
                    return;
                }

                if (ui.NameStrategy == "Martingale")
                {
                    if (ui.NameBot.Split('h').Length != 1)
                    {
                        MessageBox.Show("Невозможно завершить создание робота. Символ h зарезервирован для ситсемы");
                        return;
                    }
                    if (ui.NameBot.Split('l').Length != 1)
                    {
                        MessageBox.Show("Невозможно завершить создание робота. Символ l зарезервирован для ситсемы");
                        return;
                    }
                }

                // 2 проверяем, что имя робота не нарушает никаких правил

                if (File.Exists(@"Engine\" + @"SettingsRealKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsRealKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show("Не возможно завершить создание робота. Робот с таким именем уже существует.");
                                return;
                            }
                        }
                    }
                }

                if (File.Exists(@"Engine\" + @"SettingsTesterKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsTesterKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show("Не возможно завершить создание робота. Робот с таким именем уже существует.");
                                return;
                            }
                        }
                    }
                }

                // 3 создаём робота и сохраняем

                BotPanel newRobot = PanelCreator.GetStrategyForName(ui.NameStrategy, ui.NameBot);

                if (_panelsArray == null)
                {
                    _panelsArray = new List <BotPanel>();
                }
                _panelsArray.Add(newRobot);

                SendNewLogMessage("Создан новый бот " + newRobot.NameStrategyUniq, LogMessageType.System);

                ReloadActivBot(newRobot);
                Save();

                // перегружаем риск менеджер
                ReloadRiskJournals();
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
        }
Exemplo n.º 30
0
        /// <summary>
        /// launch another robot as part of optimization
        /// запустить ещё одного робота, в рамках оптимизации
        /// </summary>
        /// <param name="parametrs">list of all parameters/список всех параметров</param>
        /// <param name="paramOptimized">brute force options/параметры по которым осуществляется перебор</param>
        /// <param name="faze">current optimization phase/текущая фаза оптимизации</param>
        /// <param name="botsInFaze">list of bots already running in the current phase/список ботов уже запущенный в текущей фазе</param>
        /// <param name="botName">the name of the created robot/имя создаваемого робота</param>
        private async void StartNewBot(List <IIStrategyParameter> parametrs, List <IIStrategyParameter> paramOptimized,
                                       OptimizerFaze faze, List <BotPanel> botsInFaze, string botName)
        {
            if (!MainWindow.GetDispatcher.CheckAccess())
            {
                MainWindow.GetDispatcher.Invoke(
                    new Action
                    <List <IIStrategyParameter>, List <IIStrategyParameter>,
                     OptimizerFaze, List <BotPanel>, string>(StartNewBot),
                    parametrs, paramOptimized, faze, botsInFaze, botName);
                await Task.Delay(1000);

                return;
            }

// 1. Create a new server for optimization. And one thread respectively
// 1. создаём новый сервер для оптимизации. И один поток соответственно
            OptimizerServer server = ServerMaster.CreateNextOptimizerServer(_master.Storage, _serverNum,
                                                                            _master.StartDepozit);

            _serverNum++;
            _servers.Add(server);

            server.TestingEndEvent            += server_TestingEndEvent;
            server.TypeTesterData              = _master.Storage.TypeTesterData;
            server.TestintProgressChangeEvent += server_TestintProgressChangeEvent;

            for (int i = 0; i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                Security secToStart =
                    _master.Storage.Securities.Find(s => s.Name == _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity);

                server.GetDataToSecurity(secToStart, _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame, faze.TimeStart,
                                         faze.TimeEnd);
            }

// 2. create a new robot and upload it with the appropriate settings and parameters
// 2. создаём нового робота и прогружаем его соответствующими настройками и параметрами

            BotPanel bot = PanelCreator.GetStrategyForName(_master.StrategyName, botName, StartProgram.IsOsOptimizer);

            for (int i = 0; i < parametrs.Count; i++)
            {
                IIStrategyParameter par = paramOptimized.Find(p => p.Name == parametrs[i].Name);

                if (par == null)
                {
                    par = parametrs[i];
                }

                if (bot.Parameters[i].Type == StrategyParameterType.Bool)
                {
                    ((StrategyParameterBool)bot.Parameters[i]).ValueBool = ((StrategyParameterBool)par).ValueBool;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.String)
                {
                    ((StrategyParameterString)bot.Parameters[i]).ValueString = ((StrategyParameterString)par).ValueString;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.Int)
                {
                    ((StrategyParameterInt)bot.Parameters[i]).ValueInt = ((StrategyParameterInt)par).ValueInt;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.Decimal)
                {
                    ((StrategyParameterDecimal)bot.Parameters[i]).ValueDecimal = ((StrategyParameterDecimal)par).ValueDecimal;
                }
            }

// custom tabs
// настраиваем вкладки
            for (int i = 0; i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                bot.TabsSimple[i].Connector.ServerType    = ServerType.Optimizer;
                bot.TabsSimple[i].Connector.PortfolioName = server.Portfolios[0].Number;
                bot.TabsSimple[i].Connector.NamePaper     = _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity;
                bot.TabsSimple[i].Connector.TimeFrame     =
                    _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame;

                if (server.TypeTesterData == TesterDataType.Candle)
                {
                    bot.TabsSimple[i].Connector.CandleMarketDataType = CandleMarketDataType.Tick;
                }
                else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                         server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                {
                    bot.TabsSimple[i].Connector.CandleMarketDataType =
                        CandleMarketDataType.MarketDepth;
                }
            }

            for (int i = 0; i < _master.TabsIndexNamesAndTimeFrames.Count; i++)
            {
                bot.TabsIndex[i].Tabs.Clear();
                for (int i2 = 0; i2 < _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity.Count; i2++)
                {
                    if (i2 >= bot.TabsIndex[i].Tabs.Count)
                    {
                        bot.TabsIndex[i].CreateNewSecurityConnector();
                    }

                    bot.TabsIndex[i].Tabs[i2].ServerType    = ServerType.Optimizer;
                    bot.TabsIndex[i].Tabs[i2].PortfolioName = server.Portfolios[0].Number;
                    bot.TabsIndex[i].Tabs[i2].NamePaper     = _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity[i2];
                    bot.TabsIndex[i].Tabs[i2].TimeFrame     =
                        _master.TabsIndexNamesAndTimeFrames[i].TimeFrame;

                    if (server.TypeTesterData == TesterDataType.Candle)
                    {
                        bot.TabsIndex[i].Tabs[i2].CandleMarketDataType = CandleMarketDataType.Tick;
                    }
                    else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                             server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                    {
                        bot.TabsIndex[i].Tabs[i2].CandleMarketDataType =
                            CandleMarketDataType.MarketDepth;
                    }
                }
                bot.TabsIndex[i].UserFormula = _master.TabsIndexNamesAndTimeFrames[i].Formula;
            }

// wait for the robot to connect to its data server
// ждём пока робот подключиться к своему серверу данных

            DateTime timeStartWaiting = DateTime.Now;

            while (bot.IsConnected == false)
            {
                await Task.Delay(1000);

                if (timeStartWaiting.AddSeconds(20) < DateTime.Now)
                {
                    SendLogMessage(
                        OsLocalization.Optimizer.Message10,
                        LogMessageType.Error);
                    return;
                }
            }

            server.TestingStart();

            botsInFaze.Add(bot);
        }