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 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 задана успешно"); }
private void ShowDefaultRobotsSettings() { robotPortfolioControl.BindRobots(RobotFarm.LoadRobots()); }
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(""); }