/// <summary> /// загрузить настройки, относящиеся к графику /// </summary> public void LoadChartSettings(ChartWindowSettings sets) { chart.Symbol = sets.Symbol; chart.Timeframe = new BarSettings(sets.Timeframe); chart.chart.StockSeries.BarDrawMode = sets.GraphMode; try { var theme = (ChartControl.Themes)Enum.Parse(typeof(ChartControl.Themes), sets.Theme); chart.chart.visualSettings.Theme = theme; chart.chart.visualSettings.ApplyTheme(); } catch { } chart.chart.visualSettings.StockSeriesUpLineColor = sets.ColorShadowUp; chart.chart.visualSettings.StockSeriesDownLineColor = sets.ColorShadowDn; chart.chart.visualSettings.StockSeriesUpFillColor = sets.ColorBarUp; chart.chart.visualSettings.StockSeriesDownFillColor = sets.ColorBarDn; chart.chart.visualSettings.PaneBackColor = sets.ColorBackground; chart.chart.StockSeries.ShowLastQuote = sets.ShowLastQuote; chart.chart.StockSeries.AutoScroll = sets.AutoScroll; chart.CurrentTemplateName = sets.LastTemplateName; chart.chart.YAxisAlignment = sets.YAxisAlignment; chart.chart.RightBars = sets.BarOffset; chartTimeExtends = new PointD(sets.FirstCandleIndex, sets.LastCandleIndex); chart.UniqueId = sets.UniqueId; chart.SetupSeries(sets.SeriesSettings); }
public ChartForm(Form mdiParent, ChartWindowSettings sets) { MdiParent = mdiParent; InitializeComponent(); Localizer.LocalizeControl(this); CandleChartControl.ResetControlTags(this); Text = sets.Symbol; chart.updateTickersCacheForRobots = MainForm.Instance.UpdateTickersCacheForRobots; chart.Symbol = sets.Symbol; LoadChartSettings(sets); }
public void LoadPaneLocations(ChartWindowSettings sets) { var index = 0; foreach (var location in sets.PaneLocations) { while (index < chart.chart.Panes.Count) { var pane = chart.chart.Panes[index]; if (pane == chart.chart.StockPane) { continue; } pane.PercentHeight = location; index++; } } }
/// <summary> /// сохранить настройки, относящиеся к графику /// </summary> public void InitChartSettings(ChartWindowSettings sets) { sets.Symbol = chart.Symbol; sets.UniqueId = chart.UniqueId; sets.Timeframe = chart.Timeframe.GetTag(string.Empty); sets.BarOffset = chart.chart.StockSeries.BarOffset; sets.Theme = chart.chart.visualSettings.Theme.ToString(); sets.ColorShadowUp = chart.chart.visualSettings.StockSeriesUpLineColor; sets.ColorShadowDn = chart.chart.visualSettings.StockSeriesDownLineColor; sets.ColorBarUp = chart.chart.visualSettings.StockSeriesUpFillColor; sets.ColorBarDn = chart.chart.visualSettings.StockSeriesDownFillColor; sets.ColorBackground = chart.chart.visualSettings.PaneBackColor; sets.ShowLastQuote = chart.chart.StockSeries.ShowLastQuote; sets.AutoScroll = chart.chart.StockSeries.AutoScroll; sets.LastTemplateName = chart.CurrentTemplateName; sets.YAxisAlignment = chart.chart.YAxisAlignment; // сохранение временного масштаба // смещение временного окна от начала и конца интервала int indexStart = 0, indexEnd = 0; double maxPos = 0, minPos = 0; chart.chart.GetScrollView(ref indexStart, ref indexEnd); chart.chart.StockSeries.GetXExtent(ref minPos, ref maxPos); sets.FirstCandleIndex = indexStart; // - minPos; sets.LastCandleIndex = indexEnd; // maxPos - indexEnd; sets.GraphMode = chart.chart.StockSeries.BarDrawMode; // позиции панелек foreach (Pane pane in chart.chart.Panes) { sets.PaneLocations.Add(pane.PercentHeight); } sets.SeriesSettings = chart.SaveSeriesSettings(sets.SeriesSettings); }
public void LoadPaneLocations(ChartWindowSettings sets) { var index = 0; foreach (var location in sets.PaneLocations) { while (index < chart.chart.Panes.Count) { var pane = chart.chart.Panes[index]; if (pane == chart.chart.StockPane) continue; pane.PercentHeight = location; index++; } } }
/// <summary> /// загрузить настройки, относящиеся к графику /// </summary> public void LoadChartSettings(ChartWindowSettings sets) { chart.Symbol = sets.Symbol; chart.Timeframe = new BarSettings(sets.Timeframe); chart.chart.StockSeries.BarDrawMode = sets.GraphMode; try { var theme = (ChartControl.Themes) Enum.Parse(typeof (ChartControl.Themes), sets.Theme); chart.chart.visualSettings.Theme = theme; chart.chart.visualSettings.ApplyTheme(); } catch { } chart.chart.visualSettings.StockSeriesUpLineColor = sets.ColorShadowUp; chart.chart.visualSettings.StockSeriesDownLineColor = sets.ColorShadowDn; chart.chart.visualSettings.StockSeriesUpFillColor = sets.ColorBarUp; chart.chart.visualSettings.StockSeriesDownFillColor = sets.ColorBarDn; chart.chart.visualSettings.PaneBackColor = sets.ColorBackground; chart.chart.StockSeries.ShowLastQuote = sets.ShowLastQuote; chart.chart.StockSeries.AutoScroll = sets.AutoScroll; chart.CurrentTemplateName = sets.LastTemplateName; chart.chart.YAxisAlignment = sets.YAxisAlignment; chart.chart.RightBars = sets.BarOffset; chartTimeExtends = new PointD(sets.FirstCandleIndex, sets.LastCandleIndex); chart.UniqueId = sets.UniqueId; chart.SetupSeries(sets.SeriesSettings); }
/// <summary> /// сохранить настройки, относящиеся к графику /// </summary> public void InitChartSettings(ChartWindowSettings sets) { sets.Symbol = chart.Symbol; sets.UniqueId = chart.UniqueId; sets.Timeframe = chart.Timeframe.GetTag(string.Empty); sets.BarOffset = chart.chart.StockSeries.BarOffset; sets.Theme = chart.chart.visualSettings.Theme.ToString(); sets.ColorShadowUp = chart.chart.visualSettings.StockSeriesUpLineColor; sets.ColorShadowDn = chart.chart.visualSettings.StockSeriesDownLineColor; sets.ColorBarUp = chart.chart.visualSettings.StockSeriesUpFillColor; sets.ColorBarDn = chart.chart.visualSettings.StockSeriesDownFillColor; sets.ColorBackground = chart.chart.visualSettings.PaneBackColor; sets.ShowLastQuote = chart.chart.StockSeries.ShowLastQuote; sets.AutoScroll = chart.chart.StockSeries.AutoScroll; sets.LastTemplateName = chart.CurrentTemplateName; sets.YAxisAlignment = chart.chart.YAxisAlignment; // сохранение временного масштаба // смещение временного окна от начала и конца интервала int indexStart = 0, indexEnd = 0; double maxPos = 0, minPos = 0; chart.chart.GetScrollView(ref indexStart, ref indexEnd); chart.chart.StockSeries.GetXExtent(ref minPos, ref maxPos); sets.FirstCandleIndex = indexStart;// - minPos; sets.LastCandleIndex = indexEnd; // maxPos - indexEnd; sets.GraphMode = chart.chart.StockSeries.BarDrawMode; // позиции панелек foreach (Pane pane in chart.chart.Panes) sets.PaneLocations.Add(pane.PercentHeight); sets.SeriesSettings = chart.SaveSeriesSettings(sets.SeriesSettings); }
/// <summary> /// отобразить на графике торговый прогноз, /// предложить открыть окно графика /// Thread-Safe /// </summary> private void ShowTradeSignal(bool autoOpenChart, bool skipIfNoChart, bool showErrorMessages, TradeSignalUpdate signalUpdate, string signalXml, bool switchToChart) { // найти график var chartsList = Charts; var chart = chartsList.FirstOrDefault(c => c.chart.Symbol == signalUpdate.Ticker && c.chart.Timeframe == signalUpdate.Timeframe); if (chart == null && skipIfNoChart) { return; } // загрузить объекты XmlElement nodeObjects = null; try { var docObjects = new XmlDocument(); docObjects.LoadXml(signalXml); if (docObjects.DocumentElement == null) { throw new Exception("Document element is null"); } nodeObjects = (XmlElement)docObjects.DocumentElement.SelectSingleNode(TradeSignalXml.TagNameObjects); } catch (Exception ex) { Logger.ErrorFormat("ShowTradeSignal(#{0} {1} {2}) error: {3}", signalUpdate.ServiceId, signalUpdate.Ticker, signalUpdate.Timeframe, ex); return; } // предложить открыть график либо открыть автоматом if (chart == null) { var chartName = signalUpdate.Ticker + " " + BarSettingsStorage.Instance.GetBarSettingsFriendlyName(signalUpdate.Timeframe); if (!autoOpenChart) { if (MessageBox.Show(this, "Открыть график " + chartName + "?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } } // загрузить график с объектами var sets = new ChartWindowSettings { AutoScroll = false, BarOffset = 5, Symbol = signalUpdate.Ticker, Timeframe = signalUpdate.Timeframe.ToString(), WindowState = FormWindowState.Normal.ToString(), WindowSize = new Size(400, 320), ColorBarDn = Color.DarkGray, ColorBarUp = Color.White, ColorShadowUp = Color.Black, ColorShadowDn = Color.Black, ShowLastQuote = true, UniqueId = string.Format("{0}_{1}", signalUpdate.Ticker, Guid.NewGuid().ToString().Substring(0, 10)) }; var tabName = MakeTabName(signalUpdate); var bookmark = bookmarkStrip.EnsureBookmark(tabName); sets.TabPageId = bookmark.Id; LoadChildChartSafe(sets, nodeObjects, null, true); return; } // удалить на графике объекты с magic, равным текущему торговому сигналу chart.chart.DeleteObjectsByMagic(signalUpdate.ServiceId); // показать объекты на графике chart.chart.LoadObjects(nodeObjects, true, true); // открыть вкладку с графиком if (switchToChart) { GoOnBookmark(chart.bookmarkId); } chart.Focus(); }
private static ChartWindowSettings GetChildSettings(ChartForm child) { var childSets = new ChartWindowSettings { WindowSize = new Size( child.WindowState != FormWindowState.Normal ? child.RestoreBounds.Width : child.Width, child.WindowState != FormWindowState.Normal ? child.RestoreBounds.Height : child.Height), WindowPos = new Point( child.WindowState != FormWindowState.Normal ? child.RestoreBounds.Left : child.Left, child.WindowState != FormWindowState.Normal ? child.RestoreBounds.Top : child.Top), WindowState = child.WindowState.ToString(), UniqueId = child.UniqueId, TabPageId = child.bookmarkId }; child.InitChartSettings(childSets); return childSets; }
///// <summary> ///// индикатор может затребовать данные с других графиков ///// </summary> //private void ProvideChartsForIndicator(List<string> chartIds, out List<CandleChartControl> requestedCharts) //{ // requestedCharts = Charts.Where(c => chartIds.Any(id => id == c.UniqueId)).Select(c => c.chart).ToList(); //} private void LoadChildChartSafe(ChartWindowSettings chartInf, XmlElement nodeObjects, XmlElement nodeIndi, bool loadQuotesFromServer) { Invoke((MethodInvoker) (() => LoadChildChart(chartInf, nodeObjects, nodeIndi, loadQuotesFromServer))); }
private void LoadChildChart(ChartWindowSettings chartInf, XmlDocument docObjects, XmlDocument docIndi, string prefixObjects, string prefixIndi, bool loadQuotesFromServer) { XmlElement nodeObjects = null, nodeChart = null; if (docObjects != null) nodeObjects = (XmlElement)docObjects.SelectSingleNode( string.Format("{0}/objects/chart[@Id='{1}']", string.IsNullOrEmpty(prefixObjects) ? "" : prefixObjects, chartInf.UniqueId)); // загрузить индюки для чарта if (docIndi != null) nodeChart = (XmlElement)docIndi.SelectSingleNode(string.Format( "{0}/indicators/chart[@Id='{1}']", string.IsNullOrEmpty(prefixIndi) ? "" : prefixIndi, chartInf.UniqueId)); LoadChildChart(chartInf, nodeObjects, nodeChart, loadQuotesFromServer); }
private void LoadChildChart(ChartWindowSettings chartInf, XmlElement nodeObjects, XmlElement nodeIndi, bool loadQuotesFromServer) { foreach (var childold in Charts.Where(childold => childold.UniqueId == chartInf.UniqueId && childold.bookmarkId == chartInf.TabPageId && childold.chart.Symbol == chartInf.Symbol)) { childold.Close(); } ChartForm child; using (new TimeLogger("new ChartForm")) { child = new ChartForm(this, chartInf) { UniqueId = chartInf.UniqueId }; SetupChartForm(child); child.bookmarkId = chartInf.TabPageId; // если окно ссылается на несуществующую вкладку - приписать его к существующей var bookmark = BookmarkStorage.Instance[child.bookmarkId]; if (bookmark == null) child.bookmarkId = BookmarkStorage.Instance.bookmarks[0].Id; } using (new TimeLogger("nodeObjects")) { if (!string.IsNullOrEmpty(chartInf.Timeframe)) child.chart.Timeframe = new BarSettings(chartInf.Timeframe); // указать ветку объектов для документа if (nodeObjects != null) child.xmlRootObjects = nodeObjects; // загрузить индюки для чарта if (nodeIndi != null) { child.chart.LoadIndicatorSettings(nodeIndi); child.chart.UpdateIndicatorPanesAndSeries(); } } using (new TimeLogger("child.Show()")) { // выставить размеры панелей child.LoadPaneLocations(chartInf); // применить тему оформления child.chart.chart.visualSettings.ApplyTheme(); child.Show(); } using (new TimeLogger("LoadQuotesAndBuildChart")) child.LoadQuotesAndBuildChart(loadQuotesFromServer); if (chartInf.FirstCandleIndex == chartInf.LastCandleIndex) child.chart.chart.FitChart(); // выставить размеры и позицию if (chartInf.WindowSize.Width > 20 && chartInf.WindowSize.Height > 10) child.SetBounds(chartInf.WindowPos.X, chartInf.WindowPos.Y, chartInf.WindowSize.Width, chartInf.WindowSize.Height); child.WindowState = (FormWindowState)Enum.Parse(typeof(FormWindowState), chartInf.WindowState); //tabCtrl.SelectedTab = tp; }