← Atrás

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

Comentarios (12)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

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

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

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

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