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


Добрый день!

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

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

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

Код

//Объявляю:
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 (207) 2016-04-26 (1).png 197 KB (232)

Теги:


Спасибо:


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

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


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

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

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


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

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

картины не меняет ;(
Спасибо:

Mikhail Sukhov

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


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

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

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


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

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

Mikhail Sukhov

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


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

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

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


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

Mikhail Sukhov

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


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


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

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

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


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

Mikhail Sukhov

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


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

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

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


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

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

loading
clippy