コード例 #1
0
 public void RedrawDoneEvent(OxyArea oxyArea)
 {
     if (oxyArea is CandleStickArea)
     {
         //prime_wait_handle.Set();
     }
 }
コード例 #2
0
        public void AddOxyArea(OxyArea oxy_area)
        {
            if (oxy_area is CandleStickArea)
            {
                if (prime_chart != null)
                {
                    prime_chart.Updated  -= UpdateDoneEvent;
                    prime_chart.Redrawed -= RedrawDoneEvent;
                }

                prime_chart        = (CandleStickArea)oxy_area;
                oxy_area.Redrawed += RedrawDoneEvent;
                oxy_area.Updated  += UpdateDoneEvent;
            }

            if (oxy_area is IndicatorArea)
            {
                for (int i = 0; i < indicators_list.Count; i++)
                {
                    if (indicators_list[i].Tag == oxy_area.Tag)
                    {
                        indicators_list[i].Redrawed -= RedrawDoneEvent;
                        indicators_list[i].Updated  -= UpdateDoneEvent;

                        indicators_list[i] = (IndicatorArea)oxy_area;

                        indicators_list[i].Redrawed += RedrawDoneEvent;
                        indicators_list[i].Updated  += UpdateDoneEvent;

                        return;
                    }
                }

                indicators_list.Add((IndicatorArea)oxy_area);
                oxy_area.Redrawed += RedrawDoneEvent;
                oxy_area.Updated  += UpdateDoneEvent;
            }

            if (oxy_area is ScrollBarArea)
            {
                scroll_bar         = (ScrollBarArea)oxy_area;
                oxy_area.Redrawed += RedrawDoneEvent;
                oxy_area.Updated  += UpdateDoneEvent;
            }

            if (oxy_area is ControlPanelArea)
            {
                control_panel      = (ControlPanelArea)oxy_area;
                oxy_area.Redrawed += RedrawDoneEvent;
                oxy_area.Updated  += UpdateDoneEvent;
            }
        }
コード例 #3
0
        public void RedrawAll(OxyArea excluded_area)
        {
            if (!can_redraw_all)
            {
                return;
            }

            can_redraw_all = false;

            lock (in_progress)
            {
                if (owner.start_program == StartProgram.IsTester || owner.start_program == StartProgram.IsOsOptimizer)
                {
                    RedrawPrime(false);
                    RedrawIndiAreas(excluded_area, false);
                    RedrawScroll(false);
                    RedrawControlPanel(false);


                    delay = new Task(() =>
                    {
                        Delay(25).Wait(50);
                    });

                    delay.Start();
                    delay.Wait(100);

                    can_redraw_all = true;
                }
                else
                {
                    Task.Run(() =>
                    {
                        RedrawPrime(false);
                        RedrawIndiAreas(excluded_area, false);
                        RedrawScroll(false);
                        RedrawControlPanel(false);

                        delay = new Task(() =>
                        {
                            Delay(25).Wait(50);
                        });

                        delay.Start();
                        delay.Wait(100);

                        can_redraw_all = true;
                    });
                }
            }
        }
コード例 #4
0
        public void RedrawIndiAreas(OxyArea excluded_area, bool nead_to_delay)
        {
            if (!can_redraw_indicators)
            {
                return;
            }

            try
            {
                can_redraw_indicators = false;

                foreach (var indicator in indicators_list)
                {
                    if (indicator == excluded_area)
                    {
                        continue;
                    }

                    indicator.Calculate(owner.time_frame_span, owner.time_frame);
                }

                foreach (var indicator in indicators_list)
                {
                    if (indicator == excluded_area)
                    {
                        continue;
                    }

                    indicator.Redraw();
                }

                if (nead_to_delay)
                {
                    delay = new Task(() =>
                    {
                        Delay(25).Wait(50);
                    });

                    delay.Start();
                    delay.Wait(100);
                }

                can_redraw_indicators = true;
            }
            catch
            {
                can_redraw_indicators = true;
                return;
            }
        }
コード例 #5
0
        public void MakeChart(System.Windows.Controls.Grid grid_chart)
        {
            System.Windows.Media.BrushConverter converter = new System.Windows.Media.BrushConverter();

            main_grid_chart        = new System.Windows.Controls.Grid();
            main_grid_chart        = grid_chart;
            main_grid_chart.Margin = new System.Windows.Thickness(25, 0, 0, 0);

            main_grid_chart.RowDefinitions.Add(new RowDefinition()
            {
                Tag    = "Prime",
                Height = new System.Windows.GridLength(4, System.Windows.GridUnitType.Star)
            });

            var main_chart = new CandleStickArea(new OxyAreaSettings()
            {
                cursor_X_is_active = true,
                cursor_Y_is_active = true,
                Tag = "Prime",
                brush_background = "#111721",
                AxislineStyle    = LineStyle.Solid,
            }, all_areas, this);

            main_chart.chart_name = this.chart_name;
            main_chart.date_time_axis_X.MaximumMargin = 0;
            main_chart.date_time_axis_X.MinimumMargin = 0;
            main_chart.plot_view.Margin       = new Thickness(0, main_chart.plot_view.Margin.Top, main_chart.plot_view.Margin.Right, main_chart.plot_view.Margin.Bottom);
            main_chart.plot_model.PlotMargins = new OxyThickness(0, main_chart.plot_model.PlotMargins.Top, main_chart.plot_model.PlotMargins.Right, main_chart.plot_model.PlotMargins.Bottom);
            main_chart.plot_model.Padding     = new OxyThickness(0, main_chart.plot_model.Padding.Top, main_chart.plot_model.Padding.Right, main_chart.plot_model.Padding.Bottom);
            main_chart.time_frame             = this.time_frame;
            main_chart.time_frame_span        = this.time_frame_span;


            if (all_areas.Exists(x => (string)x.Tag == "Prime" && x.chart_name == this.chart_name))
            {
                OxyArea area_prime = all_areas.Find(x => (string)x.Tag == "Prime" && x.chart_name == this.chart_name);

                area_prime.Dispose();

                all_areas.Remove(all_areas.Find(x => (string)x.Tag == "Prime" && x.chart_name == this.chart_name));
            }

            System.Windows.Controls.Grid.SetRow(main_chart.GetViewUI(), 0);
            System.Windows.Controls.Grid.SetColumn(main_chart.GetViewUI(), 0);

            main_grid_chart.Children.Add(main_chart.GetViewUI());

            all_areas.Add(main_chart);
            mediator.AddOxyArea(main_chart);

            var indi_areas = all_areas.Where(x => x is IndicatorArea);

            foreach (var area in indi_areas)
            {
                main_grid_chart.RowDefinitions.Add(new RowDefinition()
                {
                    Tag    = "GridSplitter_" + area.Tag,
                    Height = new System.Windows.GridLength(3),
                });

                GridSplitter grid_splitter = new GridSplitter()
                {
                    ShowsPreview        = false,
                    Tag                 = area.Tag,
                    HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
                    VerticalAlignment   = System.Windows.VerticalAlignment.Stretch,
                    Background          = (System.Windows.Media.Brush)converter.ConvertFromString("#50BEFFD5"),
                };

                if (!splitters.Contains(grid_splitter))
                {
                    splitters.Add(grid_splitter);
                }

                System.Windows.Controls.Grid.SetColumn(grid_splitter, 0);
                System.Windows.Controls.Grid.SetRow(grid_splitter, main_grid_chart.RowDefinitions.Count - 1);

                main_grid_chart.Children.Add(grid_splitter);

                main_grid_chart.RowDefinitions.Add(new RowDefinition()
                {
                    Tag    = area.Tag,
                    Height = new System.Windows.GridLength(1, System.Windows.GridUnitType.Star),
                });

                System.Windows.Controls.Grid.SetRow(area.GetViewUI(), main_grid_chart.RowDefinitions.Count - 1);
                System.Windows.Controls.Grid.SetColumn(area.GetViewUI(), 0);

                main_grid_chart.Children.Add(area.GetViewUI());
            }

            if (all_areas.Exists(x => (string)x.Tag == "ScrollChart"))
            {
                var area_scroll = all_areas.Find(x => (string)x.Tag == "ScrollChart");

                ((ScrollBarArea)area_scroll).Dispose();

                all_areas.Remove(all_areas.Find(x => (string)x.Tag == "ScrollChart"));
            }

            var scroll_chart = new ScrollBarArea(new OxyAreaSettings()
            {
                brush_background       = "#282E38",
                brush_scroll_bacground = "#282E38",
                cursor_X_is_active     = true,
                Tag = "ScrollChart",
            }, all_areas, this);

            scroll_chart.chart_name = this.chart_name;
            scroll_chart.date_time_axis_X.MaximumPadding = 0;
            scroll_chart.date_time_axis_X.MinimumPadding = 0;
            scroll_chart.plot_model.Padding                 = new OxyThickness(0, 0, 0, 0);
            scroll_chart.plot_model.PlotMargins             = new OxyThickness(0, 0, 0, 0);
            scroll_chart.plot_model.PlotAreaBorderThickness = new OxyThickness(1, 1, 2, 2);
            scroll_chart.plot_model.PlotAreaBorderColor     = OxyColor.Parse("#50BEFFD5");

            main_grid_chart.RowDefinitions.Add(new RowDefinition()
            {
                Tag    = "ScrollChart",
                Height = new System.Windows.GridLength(40),
            });

            System.Windows.Controls.Grid.SetRow(scroll_chart.GetViewUI(), main_grid_chart.RowDefinitions.Count - 1);
            System.Windows.Controls.Grid.SetColumn(scroll_chart.GetViewUI(), 0);

            main_grid_chart.Children.Add(scroll_chart.GetViewUI());

            all_areas.Add(scroll_chart);
            mediator.AddOxyArea(scroll_chart);

            if (start_program != StartProgram.IsOsData)
            {
                var control_panel = new ControlPanelArea(new OxyAreaSettings()
                {
                    brush_background = "#111721",
                    Tag = "ControlPanel",
                }, all_areas, this);

                control_panel.chart_name       = this.chart_name;
                control_panel.plot_view.Height = 50;

                if (all_areas.Exists(x => (string)x.Tag == "ControlPanel"))
                {
                    var area_control = all_areas.Find(x => (string)x.Tag == "ControlPanel");

                    ((ControlPanelArea)area_control).Dispose();

                    all_areas.Remove(all_areas.Find(x => (string)x.Tag == "ControlPanel"));
                }


                main_grid_chart.RowDefinitions.Add(new RowDefinition()
                {
                    Tag    = "ControlPanel",
                    Height = new System.Windows.GridLength(40),
                });

                System.Windows.Controls.Grid.SetRow(control_panel.GetViewUI(), main_grid_chart.RowDefinitions.Count - 1);
                System.Windows.Controls.Grid.SetColumn(control_panel.GetViewUI(), 0);

                main_grid_chart.Children.Add(control_panel.GetViewUI());

                all_areas.Add(control_panel);
                mediator.AddOxyArea(control_panel);

                control_panel.plot_model.InvalidatePlot(true);
                control_panel.Calculate(time_frame_span, time_frame);
                control_panel.Redraw();
            }

            if (all_areas.Count > 3)
            {
                for (int i = 0; i < all_areas.Count; i++)
                {
                    if ((string)all_areas[i].Tag != "ScrollChart" && (string)all_areas[i].Tag != "Prime" && (string)all_areas[i].Tag != "ControlPanel")
                    {
                        var axes = all_areas[i].plot_model.Axes.ToList().Find(x => x.Key == "DateTime");

                        axes.TextColor      = OxyColors.Transparent;
                        axes.TicklineColor  = OxyColors.Transparent;
                        axes.AxisDistance   = -50;
                        axes.MaximumPadding = 0;
                        axes.MinimumPadding = 0;

                        all_areas[i].plot_model.Padding     = new OxyThickness(0, 0, all_areas[i].plot_model.Padding.Right, 0);
                        all_areas[i].plot_model.PlotMargins = new OxyThickness(0, 0, all_areas[i].plot_model.PlotMargins.Right, 0);
                        all_areas[i].plot_view.Padding      = new System.Windows.Thickness(0, 0, all_areas[i].plot_view.Padding.Right, 0);
                        all_areas[i].plot_view.Margin       = new System.Windows.Thickness(0, 0, all_areas[i].plot_view.Margin.Right, 0);
                    }
                    else
                    {
                        //цвет прозрачный + смещение вниз
                    }
                }
            }
        }
コード例 #6
0
        public void ProcessIndicator(IIndicator indicator)
        {
            if (isPaint == false || can_draw == false)
            {
                return;
            }

            if (!series.Exists(x => x.AreaName == indicator.NameArea))
            {
                return;
            }

            OxyArea area = all_areas.Find(x => (string)x.Tag == indicator.NameArea);

            if (indicator.ValuesToChart != null)
            {
                if (indicator.PaintOn == false)
                {
                    UpdateIndicatorEvent?.Invoke(); // тут может быть косяк так как некоторые индюки нужно прорисовывать даже на false
                    return;
                }

                List <List <decimal> > val_list = indicator.ValuesToChart;
                List <Color>           colors   = indicator.Colors;
                string name = indicator.Name;


                Parallel.For(0, val_list.Count, i =>
                {
                    if (val_list[i] == null || val_list[i].Count == 0)
                    {
                        return;
                    }

                    var seria = series.Find(x => x.SeriaName == name + i.ToString());

                    if (seria.OxyColor != null)
                    {
                        seria.OxyColor = OxyColor.FromArgb(colors[i].A, colors[i].R, colors[i].G, colors[i].B);
                    }

                    seria.Count = val_list.Count;

                    try
                    {
                        if (area != null)
                        {
                            area.BuildIndicatorSeries(seria, val_list[i], time_frame_span);
                        }
                    }
                    catch { return; }
                });



                UpdateIndicatorEvent?.Invoke();

                return;
            }

            Aindicator ind = (Aindicator)indicator;
            List <IndicatorDataSeries> indi_series = ind.DataSeries;


            Parallel.For(0, indi_series.Count, i =>
            {
                if (indi_series[i].IsPaint == false)
                {
                    return;
                }

                var seria = series.Find(x => x.SeriaName == indi_series[i].NameSeries);

                seria.OxyColor = OxyColor.FromArgb(indi_series[i].Color.A, indi_series[i].Color.R, indi_series[i].Color.G, indi_series[i].Color.B);

                seria.Count = indi_series.Count;
                try
                {
                    if (area != null)
                    {
                        mediator.BuildIndicatorSeries(area, seria, indi_series[i].Values, time_frame_span);
                    }
                }
                catch { return; }
            });


            UpdateIndicatorEvent?.Invoke();
        }
コード例 #7
0
 public void UpdateDoneEvent(OxyArea oxyArea)
 {
 }
コード例 #8
0
 public void BuildIndicatorSeries(OxyArea oxy_area, IndicatorSeria seria, List <decimal> values, TimeSpan time_frame_span)
 {
     oxy_area.BuildIndicatorSeries(seria, values, time_frame_span);
 }
コード例 #9
0
 public void RemoveOxyArea(OxyArea oxy_area)
 {
     indicators_list.Remove((IndicatorArea)oxy_area);
 }