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


Здравствуйте! Хотелось бы поделиться одним недавним открытием в 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 приведен ниже вторым.
Chart.jpg 138,8KB (7) SciChart.jpg 118KB (6)



Спасибо:




6 Ответов
Дюшес

Фотография
Программист
Дата: 17.02.2013
Ответить


Иван З. Перейти

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

Код

                _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;
Спасибо: Иван З.

Иван З.

Фотография
Курсы Автор статей Благотворитель
Дата: 18.02.2013
Ответить


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

PavelAd

Фотография
Дата: 19.02.2013
Ответить


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

Moadip

Фотография
Автор статей Программист
Дата: 19.02.2013
Ответить


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

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

Фотография
Дата: 26.02.2013
Ответить


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


Это исходники SciChart есть?
Спасибо:

Moadip

Фотография
Автор статей Программист
Дата: 27.02.2013
Ответить


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

Исходники StockSharp.Xaml.SciChart.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy