public override string ActivateScript(CandleChartControl chart, PointD worldCoords)
        {
            if (MainForm.Instance.RobotFarm.State != RobotFarm.RobotFarmState.Stopped)
            {
                const string msg = "Роботы должны быть не активны на момент настройки";
                MessageBox.Show(msg);
                return(msg);
            }

            // отыскать киборга
            var robots = MainForm.Instance.RobotFarm.GetRobotCopies();

            if (robots == null || robots.Count == 0)
            {
                robots = RobotFarm.LoadRobots();
            }
            if (robots == null)
            {
                robots = new List <BaseRobot>();
            }

            var fiboLevelRobots = robots.Where(r => r is StopRobot).Cast <StopRobot>();
            var targetRobots    =
                fiboLevelRobots.Where(r => r.Graphics.Any(g => g.a == chart.Symbol &&
                                                          g.b.Equals(chart.Timeframe))).ToList();

            if (targetRobots.Count == 0)
            {
                var msg = string.Format("Роботов для {0} {1} не найдено", chart.Symbol,
                                        BarSettingsStorage.Instance.GetBarSettingsFriendlyName(chart.Timeframe));
                MessageBox.Show(msg);
                return(msg);
            }

            // вызвать диалог
            var dlg = new SetupStopRobotDlg(targetRobots, worldCoords.Y);

            if (dlg.ShowDialog() == DialogResult.Cancel)
            {
                return("");
            }

            dlg.SelectedRobot.StopLevel = dlg.SelectedPrice;
            dlg.SelectedRobot.Side      = dlg.SelectedSide;


            // обновить настройки роботов
            MainForm.Instance.RobotFarm.SetRobotSettings(robots);
            RobotFarm.SaveRobots(robots);
            return("Настройка робота CS произведена");
        }
        public void SaveRobots(List <BaseRobot> robots)
        {
            var dirName = EnsureRobotsDir();

            if (string.IsNullOrEmpty(dirName))
            {
                return;
            }

            if (string.IsNullOrEmpty(lastSavedPath))
            {
                lastSavedPath = dirName + "\\temp.xml";
            }
            RobotFarm.SaveRobots(robots, lastSavedPath);
        }
示例#3
0
        private void BtnAcceptClick(object sender, System.EventArgs e)
        {
            // заменить роботов на ферме
            if (robotFarm.State != RobotFarm.RobotFarmState.Stopped)
            {
                MessageBox.Show(Localizer.GetString("MessageUnableApplySettingsWhileRobotsAreStarted"));
                return;
            }
            // поправить номера Magic
            robotPortfolioControl.AssignFreeMagicsToRobots();

            // сохранить настройки роботов по дефолтовому пути
            var robots = robotPortfolioControl.GetUsedRobots();

            MainForm.Instance.RobotFarm.SetRobotSettings(robots);
            RobotFarm.SaveRobots(robots);
            Close();
        }
        private void BtnSavePropertiesClick(object sender, EventArgs e)
        {
            var dirName = EnsureRobotsDir();

            if (string.IsNullOrEmpty(dirName))
            {
                return;
            }

            var allRobots = GetUsedRobots();

            saveRobotsPortfolioDlg.InitialDirectory = dirName;
            if (saveRobotsPortfolioDlg.ShowDialog() == DialogResult.OK)
            {
                RobotFarm.SaveRobots(allRobots, saveRobotsPortfolioDlg.FileName);
                lastSavedPath = saveRobotsPortfolioDlg.FileName;
            }
        }
示例#5
0
        public override string ActivateScript(CandleChartControl chart, PointD worldCoords)
        {
            // отыскать киборга
            List <BaseRobot> robots;

            if (RobotSource == RobotSourceType.оботыLive)
            {
                if (MainForm.Instance.RobotFarm.State != RobotFarm.RobotFarmState.Stopped)
                {
                    const string msg = "Роботы должны быть не активны на момент настройки";
                    MessageBox.Show(msg);
                    return(msg);
                }

                robots = MainForm.Instance.RobotFarm.GetRobotCopies();
                if (robots == null || robots.Count == 0)
                {
                    robots = RobotFarm.LoadRobots();
                }
            }
            else // if (RobotSource == RobotSourceType.Тестер)
            {
                if (RoboTesterForm.Instance == null)
                {
                    MessageBox.Show("Окно тестера роботов не запущено");
                    return("Окно тестера роботов не запущено");
                }
                robots = RoboTesterForm.Instance.GetUsedRobots();
            }
            if (robots == null)
            {
                robots = new List <BaseRobot>();
            }

            var fiboLevelRobots = robots.Where(r => r is FiboLevelRobot).Cast <FiboLevelRobot>();
            var targetRobots    =
                fiboLevelRobots.Where(r => r.Graphics.Any(g => g.a == chart.Symbol &&
                                                          g.b.Equals(chart.Timeframe))).ToList();

            if (targetRobots.Count == 0)
            {
                var msg = string.Format("Роботов для {0} {1} не найдено", chart.Symbol,
                                        BarSettingsStorage.Instance.GetBarSettingsFriendlyName(chart.Timeframe));
                MessageBox.Show(msg);
                return(msg);
            }

            // если таких киборгов несколько - предложить выбор
            var robot = targetRobots[0];

            if (targetRobots.Count > 1)
            {
                var number     = 1;
                var robotNames = targetRobots.Select(r => (object)string.Format("Робот {0} (A:{1}, B:{2})", number++,
                                                                                DalSpot.Instance.FormatPrice(chart.Symbol, r.PriceA),
                                                                                DalSpot.Instance.FormatPrice(chart.Symbol, r.PriceB))).ToList();

                object selObj;
                string selText;
                if (!Dialogs.ShowComboDialog("Укажите робота", robotNames, out selObj, out selText, true))
                {
                    return("Робот не выбран");
                }

                var selIndex = robotNames.IndexOf(selText);
                if (selIndex < 0)
                {
                    return("Робот не выбран");
                }
                robot = targetRobots[selIndex];
            }

            // уточнить цену
            var price = RefinePrice(chart, worldCoords);

            // подставить цену для робота
            var timeOfPoint = chart.chart.StockSeries.GetCandleOpenTimeByIndex((int)Math.Round(worldCoords.X));

            if (PricePoint == PricePointType.A)
            {
                robot.PriceA  = (decimal)price;
                robot.TimeOfA = timeOfPoint;
            }
            else
            {
                robot.PriceB  = (decimal)price;
                robot.TimeOfB = timeOfPoint;
            }

            // показать на графике
            ShowPriceOnChart(chart, worldCoords);

            // обновить настройки роботов
            if (RobotSource == RobotSourceType.оботыLive)
            {
                MainForm.Instance.RobotFarm.SetRobotSettings(robots);
                RobotFarm.SaveRobots(robots);
                if (PricePoint == PricePointType.B)
                {
                    MainForm.Instance.ShowRobotPortfolioDialog(robot.GetUniqueName());
                }
            }
            else
            {
                if (RoboTesterForm.Instance == null)
                {
                    MessageBox.Show("Окно тестера роботов не запущено");
                    return("Окно тестера роботов не запущено");
                }
                RoboTesterForm.Instance.SaveRobots(robots);
                RoboTesterForm.Instance.ReadLastRobotSettings();

                // обновить время моделирования
                if (robots.Count == 1)
                {
                    var time = GetTimeByWorldCoord(chart, worldCoords);
                    if (time.HasValue)
                    {
                        RoboTesterForm.Instance.TimeStart = time.Value;
                    }
                }

                if (PricePoint == PricePointType.B)
                {
                    MainForm.Instance.EnsureRoboTesterForm(robot.GetUniqueName());
                }
            }

            return(PricePoint == PricePointType.A ? "Точка A задана успешно" : "Точка B задана успешно");
        }
        public override string ActivateScript(string ticker)
        {
            // отыскать киборга
            List <BaseRobot> robots;

            if (RobotSource == RobotSourceType.оботыLive)
            {
                //if (MainForm.Instance.RobotFarm.State != RobotFarm.RobotFarmState.Stopped)
                robots = MainForm.Instance.RobotFarm.GetRobotCopies();
                if (robots == null || robots.Count == 0)
                {
                    robots = RobotFarm.LoadRobots();
                }
            }
            else // if (RobotSource == RobotSourceType.Тестер)
            {
                if (RoboTesterForm.Instance == null)
                {
                    MessageBox.Show("Окно тестера роботов не запущено");
                    return("Окно тестера роботов не запущено");
                }
                robots = RoboTesterForm.Instance.GetUsedRobots();
            }
            if (robots == null)
            {
                robots = new List <BaseRobot>();
            }

            var fiboLevelRobots = robots.Where(r => r is FiboLevelRobot).Cast <FiboLevelRobot>();
            var targetRobots    =
                fiboLevelRobots.Where(r => r.Graphics.Any(g => g.a == ticker)).ToList();

            if (targetRobots.Count == 0)
            {
                var msg = $"Роботов для {ticker} не найдено";
                MessageBox.Show(msg);
                return(msg);
            }

            // если таких киборгов несколько - предложить выбор
            var robot = targetRobots[0];

            if (targetRobots.Count > 1)
            {
                var number     = 1;
                var robotNames = targetRobots.Select(r => (object)
                                                     $"Робот {number++} (A:{DalSpot.Instance.FormatPrice(ticker, r.PriceA)}, B:{DalSpot.Instance.FormatPrice(ticker, r.PriceB)})").ToList();

                object selObj;
                string selText;
                if (!Dialogs.ShowComboDialog("Укажите робота", robotNames, out selObj, out selText, true))
                {
                    return("Робот не выбран");
                }

                var selIndex = robotNames.IndexOf(selText);
                if (selIndex < 0)
                {
                    return("Робот не выбран");
                }
                robot = targetRobots[selIndex];
            }

            var sets = new FxRobotVolumeSets
            {
                TargetRobot   = robot,
                FarmIsStopped = MainForm.Instance.RobotFarm.State == RobotFarm.RobotFarmState.Stopped,
                RobotSource   = RobotSource,
                Account       = AccountStatus.Instance.AccountData
            };

            var dlg = new FxRobotVolumeSetupDlg(sets);

            if (dlg.ShowDialog() != DialogResult.OK)
            {
                return("Отменено");
            }

            if (RobotSource == RobotSourceType.оботыLive)
            {
                MainForm.Instance.RobotFarm.SetRobotSettings(robots);
                RobotFarm.SaveRobots(robots);
                MainForm.Instance.ShowRobotPortfolioDialog(robot.GetUniqueName());
            }
            else
            {
                RoboTesterForm.Instance.SaveRobots(robots);
                RoboTesterForm.Instance.ReadLastRobotSettings();
                MainForm.Instance.EnsureRoboTesterForm(robot.GetUniqueName());
            }
            return("");
        }