← Zurück

Вывод на график свече, сделок, индикаторов

Здравствуйте! Хотелось бы поделиться одним недавним открытием в S#, связанны с выводом на график свече, сделок, индикаторов. Дело в том, что до недавнего времени, для отображения графиков, я пользовался классом Chart(он используется во всех примерах документации). При этом возникает проблема вывода сделок, они выводятся маленькими кружочками, которых почти не видно(рисунок приведен ниже первым). При выводе индикатора цвет линии выставить невозможно. Не заполненное свечками время, особенно то время когда торгов нет, тоже мало радует. Так вот, есть класс SciChart, используется он точно так же как и Chart. График я вывожу в новое окно:

<Window x:Class="SampleHistoryTesting.ChartWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:stock="clr-namespace:StockSharp.Xaml;assembly=StockSharp.Xaml"
        Title="ChartWindow" Height="300" Width="300">
    <Grid>
        <stock:SciChart Name="Chart"/>
    </Grid>
</Window>

Чтобы использовать SciChart вместо Chart, надо дописать 3 буквы:

<stock:Chart Name="Chart"/>

заменить на

<stock:SciChart Name="Chart"/>

На мой взгляд, он более удобен, и решает вышеперечисленные проблемы. Рисунок SciChart приведен ниже вторым.

Kommentare (6)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Дюшес
Дюшес

Иван З.: При выводе индикатора цвет линии выставить невозможно.


                _shortMaElem = new ChartIndicatorElement
                {
                    Title = "Короткая",
                    Indicator = _strategy.ShortSma,
                    Color = Colors.Red                   // Цвет линии
                };
                _longMaElem = new ChartIndicatorElement
                {
                    Title = "Длинная",
                    Indicator = _strategy.LongSma,
                    Color = Colors.Green                 // Цвет линии
                };

Иван З.: Не заполненное свечками время, особенно то время когда торгов нет, тоже мало радует. Чтобы не было пропусков, нужно поставить параметр IsIndexed в true


            _area = new ChartArea();
            _chart.Areas.Add(_area);
            _chart.IsIndexed = true;

Иван З.
Иван З.
Иван З. Autor

О, спасибо! Про IsIndexed я не знал. А цвет раньше действительно не выставлялся, сейчас выставляется. Еще бы стрелочки при сделках, и вообще красота.

PavelAd
PavelAd

Подскажите, как сделать чтобы индикатор выводился в виде точек а не линий в Chart?

Moadip
Moadip

Про Chart не знаю, если касаемо SciChart, то напрямую никак. Но сейчас есть исходники на codeplex. Поэтому возможно все.🙂

SciChartElement.cs


        /// <summary>
        /// Элемент графика - индикатор
        /// </summary>
        private sealed class SciChartIndicator : SciChartElement
        {
            private readonly Dictionary<IIndicator, ChartSeriesViewModel> _vms =
                new Dictionary<IIndicator, ChartSeriesViewModel>();

            private ChartIndicatorElement IndicatorElement
            {
                get { return (ChartIndicatorElement) Elem; }
            }

	        public SciChartIndicator(SciChartPaneViewModel pane, ChartIndicatorElement fromElem)
		        : base(pane, fromElem)
	        {
		        foreach (var ind in GetSimpleIndicators(fromElem.Indicator))
		        {
			        var renderable = new FastLineRenderableSeries
			        {
				        SeriesColor = IndicatorElement.Color,
				        StrokeThickness = 2
			        };

			        var vm = new ChartSeriesViewModel(new XyDataSeries<DateTime, double>(), renderable);
			        _vms[ind] = vm;
			        Pane.ChartSeriesViewModels.Add(vm);
		        }
	        }

...


Для отрисовки линии используется FastLineRenderableSeries. Чтобы рисовались точки(ромбики, квадратики и т.д. зависит от шаблона) надо использовать XyScatterRenderableSeries И свойству XyScatterRenderableSeries.PointMarkerTemplate задать необходимый шаблон.

Например такой:


var template = new ControlTemplate { VisualTree = new FrameworkElementFactory(typeof(Ellipse)) };
template.VisualTree.SetValue(FrameworkElement.WidthProperty, 8D);
template.VisualTree.SetValue(FrameworkElement.HeightProperty, 8D);
template.VisualTree.SetValue(Shape.FillProperty, new SolidColorBrush(Colors.Green));

Будет отрисовываться зеленая точка 8px.

noob
noob

Moadip: Про Chart не знаю, если касаемо SciChart, то напрямую никак. Но сейчас есть исходники на codeplex. Поэтому возможно все.🙂

Это исходники SciChart есть?

Moadip
Moadip

Это исходники SciChart есть? Исходники StockSharp.Xaml.SciChart.