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

Вывод на график свече, сделок, индикаторов
Atom
2/17/2013
Иван З.


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

Code
<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 буквы:

Code
<stock:Chart Name="Chart"/>

заменить на
Code
<stock:SciChart Name="Chart"/>


На мой взгляд, он более удобен, и решает вышеперечисленные проблемы. Рисунок SciChart приведен ниже вторым.
Chart.jpg 138 KB (310) SciChart.jpg 118 KB (263)



Thanks:


Дюшес

Avatar
Date: 2/17/2013
Reply


Иван З.

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

Code

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

Иван З.

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

Чтобы не было пропусков, нужно поставить параметр IsIndexed в true
Code

            _area = new ChartArea();
            _chart.Areas.Add(_area);
            _chart.IsIndexed = true;
Thanks: Иван З.

Иван З.

Avatar
Date: 2/18/2013
Reply


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

PavelAd

Avatar
Date: 2/19/2013
Reply


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

Moadip

Avatar
Date: 2/19/2013
Reply


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

SciChartElement.cs
Code

        /// <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 задать необходимый шаблон.

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

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.
Thanks:

noob

Avatar
Date: 2/27/2013
Reply


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


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

Moadip

Avatar
Date: 2/27/2013
Reply


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

Исходники StockSharp.Xaml.SciChart.
Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy