﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Добавление своего индикатора на график</title>
  <id>~/topic/3495/dobavlenie-svoego-indikatora-na-grafik/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-30T09:21:45Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3495" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/24759/</id>
    <title type="text">Код, в котором добавляется индикатор namespace Lesson7 { /// /// Логика взаимодействия для MainWindo...</title>
    <published>2013-03-25T01:12:30Z</published>
    <updated>2013-03-28T10:42:00Z</updated>
    <author>
      <name>Compressor</name>
      <uri>https://stocksharp.ru/users/374/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Код, в котором добавляется индикатор&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_1d8a7a41cc644dad872eef8a139472f3');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_1d8a7a41cc644dad872eef8a139472f3' style='display:none'&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
namespace Lesson7
{
    /// &amp;lt;summary&amp;gt;
    /// Логика взаимодействия для MainWindow.xaml
    /// &amp;lt;/summary&amp;gt;
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            //создаем лог менеджер
            _logManager= new LogManager();
            //добавляем источник информации трейдера
            _logManager.Sources.Add(Connection.Trader);
            //добавляем отображение с помощью монитора
            _logManager.Listeners.Add(new GuiLogListener(_monitor));
            _candleManager = new CandleManager(Connection.Trader);
            _monitor.Show();
            Connection.Trader.NewMyTrades += DrawTradesOnChart;
        }
        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            if (Connection.Trader != null &amp;amp;&amp;amp; Connection.Trader.IsConnected)
            {
                Connection.Trader.Dispose();
            }
            Thread.CurrentThread.Abort();
            base.OnClosing(e);
        }
        /// &amp;lt;summary&amp;gt;
        /// Окно для отображения графика со свечками
        /// &amp;lt;/summary&amp;gt;
        private ChartWindow _chartWindow;

        private readonly LogManager _logManager;
        private readonly MonitorWindow _monitor= new MonitorWindow();

        /*----------Элементы для графика------------*/
        private ChartCandleElement _candlesElem;
        private ChartTradeElement _tradeElement;
        private ChartArea _area;
        private ChartIndicatorElement _indichElem;
        private ChartIndicatorElement _indiclElem;
        private ChartIndicatorElement _step1Elem;
        private ChartIndicatorElement _bollingerElem;
        /*------------------------------------------*/

        /*--Получение свечек из торговой платформы-*/
        private CandleSeries _series;
        private readonly CandleManager _candleManager;
        /*-----------------------------------------*/

        private void ChartClick(object sender, RoutedEventArgs e)
        {
           //создаем окно с графиком со всеми элементами
            InitChart();
            //передаем исторически свечки на график 
            GethistoryCandles().ForEach(Draw);
            //запускаем стратегию
            InitStrategy();
            //подписываемся на свечки из торговой платформы
            _series.ProcessCandle += Draw;
            //запускаем получение свечек из торговой платформы
            _candleManager.Start(_series);
        
        }
        /// &amp;lt;summary&amp;gt;
        /// Исторические свечки
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
        private IEnumerable&amp;lt;Candle&amp;gt; GethistoryCandles()
        {
            //закачка из текстового файла
            /* return  CultureInfo.InvariantCulture.DoInCulture(() =&amp;gt; File.ReadAllLines(&amp;quot;RIZ2.txt&amp;quot;).Select(line =&amp;gt;
            {
                var timeFrame = (TimeSpan)_series.Arg;
                var parts = line.Split(&amp;#39;,&amp;#39;);
                var time = (parts[0] + parts[1]).ToDateTime(&amp;quot;yyyyMMddHHmmss&amp;quot;);
                return (Candle)new TimeFrameCandle
                {
                    OpenPrice = parts[2].To&amp;lt;decimal&amp;gt;(),
                    HighPrice = parts[3].To&amp;lt;decimal&amp;gt;(),
                    LowPrice = parts[4].To&amp;lt;decimal&amp;gt;(),
                    ClosePrice = parts[5].To&amp;lt;decimal&amp;gt;(),
                    TimeFrame = timeFrame,
                    OpenTime = time,
                    CloseTime = time + timeFrame,
                    TotalVolume = parts[6].To&amp;lt;decimal&amp;gt;(),
                    Security = Connection.SelectedSecurity,
                    State = CandleStates.Finished,
                };
            }).ToArray());*/
            //var candles = Finam.History.GetCandles(Connection.SelectedSecurity, DateTime.Now - TimeSpan.FromDays(1), DateTime.Now - TimeSpan.FromDays(1), (TimeSpan) _series.Arg);
            return   Finam.History.GetHistoryCandles(Connection.SelectedSecurity, TimeSpan.FromMinutes(1), DateTime.Now - TimeSpan.FromDays(10), DateTime.Now - TimeSpan.FromDays(1)).ToArray();
        }

        /// &amp;lt;summary&amp;gt;
        /// Инициализируем чарт
        /// &amp;lt;/summary&amp;gt;
        private void InitChart()
        {
            var security = Connection.SelectedSecurity;
            _series = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromSeconds(20) /*TimeFrame.Value.Value.TimeOfDay*/);
            _series.WorkingTime.Times[0].Min = TimeSpan.FromHours(4);
            _series.WorkingTime.Times[0].Max = TimeSpan.FromHours(23);
            //создаем окно с графиком свечек
            _chartWindow = new ChartWindow
            {
                Title = &amp;quot;{0} {1}&amp;quot;.Put(security.Code, _series.Arg)
            };
            
            _chartWindow.MakeHideable();

            /* ----- Добавляем все нужные участки для нашего графика*/
            _area = new ChartArea();
            _chartWindow.Chart.Areas.Add(_area);

            _candlesElem = new ChartCandleElement();
            _area.Elements.Add(_candlesElem);

            _tradeElement= new ChartTradeElement();
            _area.Elements.Add(_tradeElement);

            _indichElem = new ChartIndicatorElement() { Title = &amp;quot;Moving&amp;quot;, Indicator = new Highest() { Name = &amp;quot;Moving&amp;quot;, Length = 2} };
            _area.Elements.Add(_indichElem);

            _indiclElem = new ChartIndicatorElement() { Title = &amp;quot;Moving&amp;quot;, Indicator = new Lowest() { Name = &amp;quot;Moving&amp;quot;, Length = 2 } };
            _area.Elements.Add(_indiclElem);

            _step1Elem = new ChartIndicatorElement() { Title = &amp;quot;Moving&amp;quot;, Indicator = new Step1() { Name = &amp;quot;Moving&amp;quot;, Length = 2 } };
            _area.Elements.Add(_step1Elem);

            _bollingerElem = new ChartIndicatorElement() { Title = &amp;quot;Bollinger&amp;quot;, Indicator = new BollingerBands() { Name = &amp;quot;Bollinger&amp;quot;, Length = 20, Width = 2 } };
            _area.Elements.Add(_bollingerElem);
            /*----------------------------------------------------*/
            _chartWindow.Show();
        }

        /// &amp;lt;summary&amp;gt;
        /// отрисовываем сделки стратегии
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;mytrades&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
        private void DrawTradesOnChart(IEnumerable&amp;lt;MyTrade&amp;gt; mytrades)
        {
            if (_tradeElement == null) return;
            this.GuiAsync(() =&amp;gt; mytrades.ForEach(t =&amp;gt; _chartWindow.Chart.ProcessValues(t.Trade.Time,new Dictionary&amp;lt;IChartElement, object&amp;gt;()
                                                                                                        {
                                                                                                            {_tradeElement,t}
                                                                                                        })));
        }
        /// &amp;lt;summary&amp;gt;
        /// создаем и запускаем стратегию
        /// &amp;lt;/summary&amp;gt;
        private void InitStrategy()
        {
            var bs = new BollingerStrategy((BollingerBands) _bollingerElem.Indicator, _series)
                         {
                             Trader = Connection.Trader,
                             Security = Connection.SelectedSecurity,
                             Portfolio = Connection.SelectedPortfolio,
                             Volume = 1,
                         };
            bs.NewMyTrades += DrawTradesOnChart;
            bs.Start();

        }
        /// &amp;lt;summary&amp;gt;
        /// Основной алгоритм прорисовки он-лайн и законченных свечек
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;candle&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
        private void Draw(Candle candle)
        {
            if (candle.State == CandleStates.Finished || candle.State==CandleStates.Changed)
            {
                var final = candle.State == CandleStates.Finished;
                //значения у индикаторы в данный момент времени(finished,changed)
                var val = _bollingerElem.Indicator.Process(new DecimalIndicatorValue(candle.ClosePrice) {IsFinal =final});
                var bollingerValue = new ChartIndicatorValue(_bollingerElem.Indicator, val);

                var valh = _indichElem.Indicator.Process(new DecimalIndicatorValue(candle.HighPrice) { IsFinal = final });
                var indichValue = new ChartIndicatorValue(_indichElem.Indicator, valh);

                var vall = _indiclElem.Indicator.Process(new DecimalIndicatorValue(candle.LowPrice) { IsFinal = final });
                var indiclValue = new ChartIndicatorValue(_indiclElem.Indicator, vall);

                var st1 = _step1Elem.Indicator.Process(new DecimalIndicatorValue(candle.HighPrice) { IsFinal = final });
                var stValue = new ChartIndicatorValue(_indichElem.Indicator, st1);

                //определеяем время последней свечки
                var timeFrame = (TimeSpan) _series.Arg;
                var time = timeFrame.GetCandleBounds(_series.Security).Min-timeFrame;//находим последнее время свечки
                //добавляем свечки на чарт
                if(candle.State==CandleStates.Finished || (candle.State==CandleStates.Changed &amp;amp;&amp;amp; candle.OpenTime&amp;gt;=time))
                { 
                    this.GuiAsync(() =&amp;gt; _chartWindow.Chart.ProcessValues(candle.OpenTime, new Dictionary&amp;lt;IChartElement, object&amp;gt;
                                                                                          {
                                                                                              {_candlesElem, candle},
                                                                                  //            {_bollingerElem, bollingerValue},
                                                                                              {_indichElem, indichValue},
                                                                                              {_indiclElem, indiclValue},
                                                                                              {_step1Elem, stValue},
                                                                                          }));
                }
            }
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Код добавляемого индикатора Step1&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
namespace Swing
{
    public class Step1 : LengthIndicator&amp;lt;decimal&amp;gt;
	{
       //         private readonly CandleSeries _series;

   //     private bool NoActiveOrders { get { return Orders.Count(o =&amp;gt; o.State == OrderStates.Active) == 0; } }
   //     public Step1(CandleSeries series)
   //     {
            
   //         _series = series;
    //    }
		/// &amp;lt;summary&amp;gt;
		/// Создать &amp;lt;see cref=&amp;quot;Highest&amp;quot;/&amp;gt;.
		/// &amp;lt;/summary&amp;gt;
		public Step1()
			: base(typeof(decimal))
		{
		}

		/// &amp;lt;summary&amp;gt;
		/// Обработать входное значение.
		/// &amp;lt;/summary&amp;gt;
		/// &amp;lt;param name=&amp;quot;input&amp;quot;&amp;gt;Входное значение.&amp;lt;/param&amp;gt;
		/// &amp;lt;returns&amp;gt;Результирующее значение.&amp;lt;/returns&amp;gt;
		public override decimal OnProcess(IIndicatorValue input)
		{
			var newValue = input.GetValue&amp;lt;decimal&amp;gt;();

			var lastValue = LastValue;

			if (Buffer.Count == 0)
			{
				// Инициализируем при добавлении первого значения
				lastValue = newValue;
			}

			// добавляем новое начало
			Buffer.Add(newValue);

			if (newValue &amp;gt; lastValue)
			{
				// Новое значение и есть экстремум 
				lastValue = newValue;
			}

			if (Buffer.Count &amp;gt; Length)
			{
				// удаляется экстремум, для поиска нового значения необходим проход по всему буфферу
				if (Buffer[0] == lastValue &amp;amp;&amp;amp; lastValue != newValue)
				{
					Buffer.RemoveAt(0);

					// ищем новый экстремум
					lastValue = Buffer.Aggregate(newValue, (current, t) =&amp;gt; Math.Max(t, current));
				}
				else
				{
					// удаляем хвостовое значение
					Buffer.RemoveAt(0);
				}
			}

			return lastValue;
		}
	}
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Его отличие от Highest в том, что он добавляется из своей библиотеки, а не из библиотеки StoskSharp&amp;#39;а.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24862/</id>
    <title type="text">По примеру Highest параметр LastValue не существует в текущем контексте. Я полагаю, Вы используете с...</title>
    <published>2013-03-27T07:04:58Z</published>
    <updated>2013-03-27T07:04:58Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.ru/users/26984/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Compressor &lt;a href="https://stocksharp.ru/posts/m/24861/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;По примеру Highest параметр LastValue не существует в текущем контексте.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я полагаю, Вы используете старый вариант, попробуйте это:&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_6ea80c1afe374be18e464edcf2965c98');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_6ea80c1afe374be18e464edcf2965c98' style='display:none'&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
public class Highest : LengthIndicator&amp;lt;decimal&amp;gt;
	{
		/// &amp;lt;summary&amp;gt;
		/// Создать &amp;lt;see cref=&amp;quot;Highest&amp;quot;/&amp;gt;.
		/// &amp;lt;/summary&amp;gt;
		public Highest()
			: base(typeof(decimal))
		{
		}

		/// &amp;lt;summary&amp;gt;
		/// Обработать входное значение.
		/// &amp;lt;/summary&amp;gt;
		/// &amp;lt;param name=&amp;quot;input&amp;quot;&amp;gt;Входное значение.&amp;lt;/param&amp;gt;
		/// &amp;lt;returns&amp;gt;Результирующее значение.&amp;lt;/returns&amp;gt;
		protected override decimal OnProcess(IIndicatorValue input)
		{
			var newValue = input.GetValue&amp;lt;decimal&amp;gt;();

			var lastValue = Buffer.Count == 0 ? newValue : this.GetCurrentValue();

			// добавляем новое начало
			if (input.IsFinal)
				Buffer.Add(newValue);

			if (newValue &amp;gt; lastValue)
			{
				// Новое значение и есть экстремум 
				lastValue = newValue;
			}

			if (Buffer.Count &amp;gt; Length)
			{
				var first = Buffer[0];

				// удаляем хвостовое значение
				if (input.IsFinal)
					Buffer.RemoveAt(0);

				// удаляется экстремум, для поиска нового значения необходим проход по всему буфферу
				if (first == lastValue &amp;amp;&amp;amp; lastValue != newValue)
				{
					// ищем новый экстремум
					lastValue = Buffer.Aggregate(newValue, (current, t) =&amp;gt; Math.Max(t, current));
				}
			}

			return lastValue;
		}
	}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Рекомендую пройти уроки C#, многое будет понятно, меньше будет подобных проблем.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24861/</id>
    <title type="text">По примеру Highest параметр LastValue не существует в текущем контексте.</title>
    <published>2013-03-27T06:37:02Z</published>
    <updated>2013-03-27T06:37:02Z</updated>
    <author>
      <name>Compressor</name>
      <uri>https://stocksharp.ru/users/374/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">По примеру Highest параметр LastValue не существует в текущем контексте.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24856/</id>
    <title type="text">В последнем варианте величина Length просто поднимает или опускает график сильнее, но не влияет на б...</title>
    <published>2013-03-27T04:35:48Z</published>
    <updated>2013-03-27T04:35:48Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.ru/users/26984/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Compressor &lt;a href="https://stocksharp.ru/posts/m/24855/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;В последнем варианте величина Length просто поднимает или опускает график сильнее, но не влияет на базу расчета индикатора.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Правильно, свойство Length только хранит целочисленное значение и никак не влияет на работу индикатора, если Вы его не используете.&lt;br /&gt;Вам необходимо самостоятельно использовать это свойство (Length) для реализации алгоритма индикатора.&lt;br /&gt;Вы можете посмотреть код индикатора Highest, там в переопределенном методе OnProcess обеспечивается управление историческим буфером (Buffer) с использованием свойства Length.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24855/</id>
    <title type="text">В последнем варианте величина Length просто поднимает или опускает график сильнее, но не влияет на б...</title>
    <published>2013-03-27T04:25:34Z</published>
    <updated>2013-03-27T04:25:34Z</updated>
    <author>
      <name>Compressor</name>
      <uri>https://stocksharp.ru/users/374/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">В последнем варианте величина Length просто поднимает или опускает график сильнее, но не влияет на базу расчета индикатора.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24853/</id>
    <title type="text">К сожалению и этот вариант не работает правильно, если посмотреть график, то коричневая линия это ка...</title>
    <published>2013-03-27T04:13:57Z</published>
    <updated>2013-03-27T04:21:43Z</updated>
    <author>
      <name>Compressor</name>
      <uri>https://stocksharp.ru/users/374/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">К сожалению и этот вариант не работает правильно, если посмотреть график, то коричневая линия это как раз Максимум за 2 бара плюс shift (она производная от розовой без смещения на верх), если присмотреться то вершины образуют макс только на одном баре и не продляются на второй, а вот желтая линия графика это правильная линия, она держит максимум 2 бара.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24852/</id>
    <title type="text">После изменений, связанных с переопределением библиотек, индикатор не реагирует на параметр Length, ...</title>
    <published>2013-03-27T03:16:34Z</published>
    <updated>2013-03-27T03:18:32Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.ru/users/26984/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Compressor &lt;a href="https://stocksharp.ru/posts/m/24850/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;После изменений, связанных с переопределением библиотек, индикатор не реагирует на параметр Length, везде берет значение 1.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Привожу в качестве примера код индикатора, который адекватно работает, в том числе принимает значение Length:&lt;br /&gt;   &lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
 public class Step2 : LengthIndicator&amp;lt;decimal&amp;gt;
    {
        /// &amp;lt;summary&amp;gt;
		/// Создать
		/// &amp;lt;/summary&amp;gt;
		public Step2()
			: base(typeof(decimal))
		{
		}

        public override bool IsFormed
        {
            get
            {
                return true;
            }
        }

		/// &amp;lt;summary&amp;gt;
		/// Обработать входное значение.
		/// &amp;lt;/summary&amp;gt;
		/// &amp;lt;param name=&amp;quot;input&amp;quot;&amp;gt;Входное значение.&amp;lt;/param&amp;gt;
		/// &amp;lt;returns&amp;gt;Результирующее значение.&amp;lt;/returns&amp;gt;
		protected override decimal OnProcess(IIndicatorValue input)
		{
			var val = input.GetValue&amp;lt;decimal&amp;gt;();

		    var newValue = val + Length;
            return newValue;
		}
    }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Замечу, что здесь наследуемый класс LengthIndicator&amp;lt;&amp;gt; взят из S#.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24850/</id>
    <title type="text">После изменений, связанных с переопределением библиотек, индикатор не реагирует на параметр Length, ...</title>
    <published>2013-03-27T02:59:46Z</published>
    <updated>2013-03-27T02:59:46Z</updated>
    <author>
      <name>Compressor</name>
      <uri>https://stocksharp.ru/users/374/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">После изменений, связанных с переопределением библиотек, индикатор не реагирует на параметр Length, везде берет значение 1.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24762/</id>
    <title type="text">Не помогло, в 132 строке все равно выдает ошибку. Подключенные сборки проверяли? Пришлите архив прое...</title>
    <published>2013-03-25T06:17:58Z</published>
    <updated>2013-03-25T06:17:58Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.ru/users/26984/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Compressor &lt;a href="https://stocksharp.ru/posts/m/24761/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Не помогло, в 132 строке все равно выдает ошибку.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Подключенные сборки проверяли?&lt;br /&gt;Пришлите архив проекта на электронную почту &lt;a href="https://stocksharp.ru/away/?u=AQAAAAAAAAAkAlIA1jlc-ZJHCHdUGPCeB4ew36__oNFwlPG5-1YrkQ"&gt;iv_qul@list.ru&lt;/a&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24761/</id>
    <title type="text">Не помогло, в 132 строке все равно выдает ошибку.</title>
    <published>2013-03-25T05:52:45Z</published>
    <updated>2013-03-25T05:52:45Z</updated>
    <author>
      <name>Compressor</name>
      <uri>https://stocksharp.ru/users/374/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Не помогло, в 132 строке все равно выдает ошибку.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24760/</id>
    <title type="text">Просмотрев код, видно, что есть ошибка в следующих строках: var st1 = _step1Elem.Indicator.Process(n...</title>
    <published>2013-03-25T04:22:15Z</published>
    <updated>2013-03-25T04:24:01Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.ru/users/26984/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Просмотрев код, видно, что есть ошибка в следующих строках:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
                var st1 = _step1Elem.Indicator.Process(new DecimalIndicatorValue(candle.HighPrice) { IsFinal = final });
                var stValue = new ChartIndicatorValue(_indichElem.Indicator, st1);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Во второй строке Вы хотели бы получить значение индикатора _step1Elem.Indicator, но используете индикатор _indichElem.Indicator. Так правильно: &lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
                var st1 = _step1Elem.Indicator.Process(new DecimalIndicatorValue(candle.HighPrice) { IsFinal = final });
                var stValue = new ChartIndicatorValue(_step1Elem.Indicator, st1);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Даже если выполнить проект с Вашим кодом и без исправления указанной выше ошибки, то проект выполняется успешно.&lt;br /&gt;Есть предположение, что Вы используете разные версии модулей S# в разных сборках своего приложения, это может привести к исключению о котором Вы писали. Проверьте версии подключенных модулей, если ошибку не удастся устранить, пришлите архив с проектами.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24755/</id>
    <title type="text">Здравствуйте Compressor. Нам нужен код, как переопределяете индикатор Highest и как затем использует...</title>
    <published>2013-03-24T15:41:21Z</published>
    <updated>2013-03-24T15:43:12Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.ru/users/26984/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Здравствуйте &lt;b&gt;Compressor&lt;/b&gt;.&lt;br /&gt;Нам нужен код, как переопределяете индикатор Highest и как затем используете новый, чтобы помочь Вам.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24754/</id>
    <title type="text">Здравствуйте. Вопрос по добавлению своего индикатора на график. Индикатор создан на базе индикаторов...</title>
    <published>2013-03-24T13:30:35Z</published>
    <updated>2013-03-24T13:30:35Z</updated>
    <author>
      <name>Compressor</name>
      <uri>https://stocksharp.ru/users/374/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Здравствуйте. Вопрос по добавлению своего индикатора на график. Индикатор создан на базе индикаторов из stocksharp.codeplex только у итогового изменено название с highest на step1, как библиотека классов. При добавлении его на график появляется ошибка - Неявное преобразование типа &amp;quot;Swing.Step1&amp;quot; в &amp;quot;StockSharp.Algo.Indicators.IIndicator&amp;quot; невозможно. Существует явное преобразование (возможно, отсутствует приведение). В каком направлении двигаться? </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>