namespace SampleConnection { using System; using System.Linq; using System.Windows.Media; using StockSharp.Algo; using StockSharp.Algo.Candles; using StockSharp.Algo.Indicators; using StockSharp.Xaml.Charting; partial class ChartWindow { private readonly Connector _connector; private readonly CandleSeries _candleSeries; private readonly ChartCandleElement _candleElem; ChartIndicatorElement indicatorElement; IIndicator indicator;//мне нужно именно через интерфей public ChartWindow(CandleSeries candleSeries) { if (candleSeries == null) throw new ArgumentNullException(nameof(candleSeries)); InitializeComponent(); _candleSeries = candleSeries; _connector = MainWindow.Instance.Connector; Chart.ChartTheme = ChartThemes.ExpressionDark; var area = new ChartArea(); Chart.Areas.Add(area); _candleElem = new ChartCandleElement { AntiAliasing = false, UpFillColor = Colors.White, UpBorderColor = Colors.Black, DownFillColor = Colors.Black, DownBorderColor = Colors.Black, }; area.Elements.Add(_candleElem); indicatorElement = new ChartIndicatorElement(); indicator = new MovingAverageConvergenceDivergenceSignal();//Например с дефолтными параметрами var specialArea = new ChartArea() { Title = "specialArea" };//т.к. МАКД то в отдельной Area Chart.Areas.Add(specialArea); specialArea.Elements.Add(indicatorElement); //Chart.AddElement(specialArea,indicatorElement,candleSeries,indicator);// так тоже не работает _connector.CandleSeriesProcessing += ProcessNewCandle; _connector.SubscribeCandles(_candleSeries); } private void ProcessNewCandle(CandleSeries series, Candle candle) { if (series != _candleSeries) return; var osnValue = indicator.Process(candle); //Chart.Draw(_candleElem, candle); ChartDrawData data = new ChartDrawData(); //Навсякий случай упростил задачу, если сигнальная линия не сформирована, то даже и не пытаюсь нарисовать if (((ComplexIndicatorValue)osnValue).InnerValues.Count() > 1 && ((ComplexIndicatorValue)osnValue).InnerValues.ToArray()[1].Value.IsFormed) { data.Group(candle.OpenTime) .Add(_candleElem, candle) .Add(indicatorElement, osnValue); Chart.Draw(data); } } protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { _connector.CandleSeriesProcessing -= ProcessNewCandle; _connector.UnSubscribeCandles(_candleSeries); base.OnClosing(e); } } }