← Назад

Индикаторы в 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);
}
}

Комментарии (12)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Сергей Гаврилов
Сергей Гаврилов

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

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

Mikhail Sukhov
Mikhail Sukhov

Гоша Батарейкин: Тогда получается что в документации по Chart написано "что то написано" :)

Если у вас есть замечания, оформляйте их через пул реквесты в нашем репозитарии https://github.com/StockSharp/StockSharp/.

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

А можно просто банальную поддержку на элементарный вопрос по Вашей документации без отсыланий в "пул реквесты в нашем репозитарии"? ;) Так слона не продашь :) Пример, на который Вы ссылаетесь, достаточно сложный, а по документации описано все просто. Но по документации что то не так работает :) Я прекрасно понимаю Ваше желание монетизировать Вашу прекрасную разработку, но то что сделано для широкой публики ДОЛЖНО соответствовать заявленному, работать и поддерживаться. Хотя .... Вам решать :) Я спрашиваю только по документации :)