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);
		}
	}
}