Индикаторы в Chart

Индикаторы в Chart


Добрый день!

Результат на рисунках

Не могу понять это баг или я неправильно что то делаю:

Создаю график со скользящей средней:

Code

//Объявляю:
public ChartPanel TradeChartPanel { get; set; }
private ChartIndicatorElement _emaChartElement;
private ExponentialMovingAverage _ema;
public ChartArea CandlesArea { get; set; }
public ChartCandleElement CandlesElem { get; set; }

//Инициализирую:
TradeChartPanel = panel;
TradeChartPanel.IsInteracted = true;

TradeChartPanel.ClearAreas();
TradeChartPanel.FillIndicators();
CandlesArea = new ChartArea();
var yAxis = CandlesArea.YAxises.First();
var xAxis = CandlesArea.XAxises.First();
//yAxis.AutoRange = true;
//TradeChartPanel.IsAutoRange = true;
//TradeChartPanel.IsAutoScroll = true;
TradeChartPanel.AddArea(CandlesArea);
CandlesElem = new ChartCandleElement { FullTitle = "Candles", YAxisId = yAxis.Id, /*XAxisId = xAxis.Id*/};
 TradeChartPanel.AddElement(CandlesArea, CandlesElem, series);

_ema = new ExponentialMovingAverage() { Length = 9 };

_emaChartElement = new ChartIndicatorElement
 {
    DrawStyle = ChartIndicatorDrawStyles.Line,
     AntiAliasing = true,
    StrokeThickness = 1,
    Color = Colors.Blue,
    YAxisId = yAxis.Id,
    // XAxisId = xAxis.Id
 };

TradeChartPanel.AddElement(CandlesArea, _emaChartElement, series, _ema);

//Обрабатываю событие:
protected override void DrawCandle(CandleSeries series, Candle candle)
 {
            Application.Current.Dispatcher.InvokeAsync(() =>
            {

                var dict = new Dictionary<IChartElement, object>
            {
                { CandlesElem, candle },
            };

                if (_emaChartElement != null )
                {
                    dict.Add(_emaChartElement, _ema.Process(candle));                   
                }
TradeChartPanel.Draw(candle.OpenTime, dict);
}
}
2016-04-26.png 213 KB (235) 2016-04-26 (1).png 197 KB (260)

Tags:


Thanks:


1 2  >
Сергей Гаврилов

Avatar
Date: 4/26/2016
Reply


Красота... Не знаю почему так получается, но, для размышления 1. вы скользяшку строите не по свечам, а по тикам...
Thanks:

Гоша Батарейкин

Avatar
Date: 4/26/2016
Reply


Так она мне нужна живая ;) Подразумевается что время в каждом тике OpenTime свечи!
Добавление условия:

if (_emaChartElement != null && candle.State == CandleStates.Finished)
{
dict.Add(_emaChartElement, _ema.Process(candle));
}

картины не меняет ;(
Thanks:

Mikhail Sukhov

Avatar
Date: 4/26/2016
Reply


Посмотрите примеры. Как там передаются свечи и индикаторы.
Thanks:

Гоша Батарейкин

Avatar
Date: 4/26/2016
Reply


Так из примеров и код ;)

Изменены только названия переменных
Thanks:

Mikhail Sukhov

Avatar
Date: 4/26/2016
Reply


Хотите сказать что пример не работает? Какой именно?
Thanks:

Гоша Батарейкин

Avatar
Date: 4/26/2016
Reply


Я просто скопировал последовательность действий из примера. Насколько я понимаю дело не в примере, а в реализации интерфейса индикатора. Хотя Вам виднее.
Я пробовал разные примеры в том числе из документации про Chart.
Thanks:

Mikhail Sukhov

Avatar
Date: 4/26/2016
Reply


Гоша Батарейкин
Я просто скопировал последовательность действий из примера. Насколько я понимаю дело не в примере, а в реализации интерфейса индикатора. Хотя Вам виднее.
Я пробовал разные примеры в том числе из документации про Chart.


Какой-то индикатор не работает? EMA? Проверил сейчас на примере SampleChart - рисуется как должно.
Thanks:

Гоша Батарейкин

Avatar
Date: 4/26/2016
Reply


Возможно. Я за базовый брал пример из документации. В приведенном коде где может быть ошибка?
Thanks:

Mikhail Sukhov

Avatar
Date: 4/26/2016
Reply


Не знаю. Я проверяю на примере
Thanks:

Гоша Батарейкин

Avatar
Date: 4/27/2016
Reply


Тогда получается что в документации по Chart написано "что то написано" :)
Thanks:
1 2  >

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

loading
clippy