Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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++;
                }
            }
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
 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++;
         }
     }
 }
Ejemplo n.º 6
0
        /// <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);
        }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        /// <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();
        }
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 11
0
 ///// <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)));
 }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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;
        }