﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">RSI.IsFormed команда IsFormed не работает в индикаторе RSI== помогите</title>
  <id>~/topic/3239/rsi_isformed-komanda-isformed-ne-rabotaet-v-indikatore-rsi-pomogite/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-24T09:13:57Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3239" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/24020/</id>
    <title type="text">Исправлено в последней версии на кодепдексе.</title>
    <published>2013-02-14T07:36:54Z</published>
    <updated>2013-02-14T07:36:54Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Исправлено в последней версии на кодепдексе.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23988/</id>
    <title type="text">я на 4.1.7 сижу. Не за что.</title>
    <published>2013-02-13T04:38:02Z</published>
    <updated>2013-02-13T04:38:36Z</updated>
    <author>
      <name>Иван З.</name>
      <uri>https://stocksharp.com/users/6502/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">я на 4.1.7 сижу.&lt;br /&gt;Не за что.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23987/</id>
    <title type="text">Версия библиотеки какая? Иван З., спасибо за пример, багу подтверждаю.</title>
    <published>2013-02-13T04:25:02Z</published>
    <updated>2013-02-13T04:36:11Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Версия библиотеки какая?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Иван З.&lt;/b&gt;, спасибо за пример, багу подтверждаю.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23986/</id>
    <title type="text">создал индикатор private RelativeStrengthIndex RSI = new RelativeStrengthIndex() { Length=10}; подпи...</title>
    <published>2013-02-13T04:12:37Z</published>
    <updated>2013-02-13T04:12:37Z</updated>
    <author>
      <name>Иван З.</name>
      <uri>https://stocksharp.com/users/6502/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">создал индикатор&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
private RelativeStrengthIndex RSI = new RelativeStrengthIndex() { Length=10};&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;подписываюсь на свечки&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
        private void Chart_Click(object sender, RoutedEventArgs e)
        {

            //добавляем источник информации трейдера
            _trader = new QuikTrader();
            InitChart();
            _candleManager = new CandleManager();
            var startTime = new DateTime(2012, 1, 1);
            var endTime = new DateTime(2012, 1, 5);

            // Добавление в источник свечек TimeFrameCandleBuilder источник данных в виде файлов гидры 
            var storageRegistry = new StorageRegistry();
            ((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = PathStorage;
            var stor = new StorageCandleSource { StorageRegistry = storageRegistry };
            _series = new CandleSeries(typeof(TimeFrameCandle), SelectedSecurity,
                                       TimeSpan.FromMinutes(SelectedTimeFrame));

            _candleManager.Sources.Add(stor);

            _candleManager.Container.CandlesKeepTime = TimeSpan.FromDays(2);

            _candleManager.Processing += Draw;

            _candleManager.Start(_series, startTime, endTime);
        }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;через отладку смотрю значения&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
 private void Draw(CandleSeries series, Candle candle)
        {
           var ggg = RSI.Process(candle.ClosePrice);
           var fff = RSI.GetCurrentValue();
        }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;И ggg и fff равны 100&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23985/</id>
    <title type="text">Давайте пока не трогать код индикатора, просто покажите как вы его используете.</title>
    <published>2013-02-13T03:42:48Z</published>
    <updated>2013-02-13T03:42:48Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Давайте пока не трогать код индикатора, просто покажите как вы его используете.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23982/</id>
    <title type="text">Здравствуйте. Проверил RSI, действительно не работает. Стал разбираться в чем дело. RSI в себе испол...</title>
    <published>2013-02-13T02:38:14Z</published>
    <updated>2013-02-13T02:47:38Z</updated>
    <author>
      <name>Иван З.</name>
      <uri>https://stocksharp.com/users/6502/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Здравствуйте. Проверил RSI, действительно не работает. Стал разбираться в чем дело. RSI в себе использует индикатор SmoothedMovingAverage. Взял коды двух индикаторов. И получилось следующее.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

using StockSharp.Algo.Indicators;


namespace WpfApplication1
{
    using System.ComponentModel;
    using System.Linq;
    /// &amp;lt;summary&amp;gt;
    /// Сглаженное скользящее среднее.
    /// &amp;lt;/summary&amp;gt;
    [DisplayName(&amp;quot;SMMA&amp;quot;)]
    [Description(&amp;quot;Сглаженное скользящее среднее.&amp;quot;)]
    public class SmoothedMovingAverage : LengthIndicator&amp;lt;decimal&amp;gt;
    {
        /// &amp;lt;summary&amp;gt;
        /// Создать &amp;lt;see cref=&amp;quot;SmoothedMovingAverage&amp;quot;/&amp;gt;.
        /// &amp;lt;/summary&amp;gt;
        public SmoothedMovingAverage()
            : 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;();

            if (input.IsFinal)
                Buffer.Add(newValue);

            if (!IsFormed)
                return this.GetCurrentValue();

            if (Buffer.Count == Length)
            {
                return Buffer.Sum() / Length;
            }
            else
            {
                if (input.IsFinal)
                    Buffer.RemoveAt(0);
                return (this.GetCurrentValue() * (Length - 1) + newValue) / Length;
            }
        }
    }

    /// &amp;lt;summary&amp;gt;
    /// Индекс относительной силы.
    /// &amp;lt;/summary&amp;gt;
    [DisplayName(&amp;quot;RSI&amp;quot;)]
    [Description(&amp;quot;Индекс относительной силы.&amp;quot;)]
    public class RelativeStrengthIndex : LengthIndicator&amp;lt;decimal&amp;gt;
    {
        private readonly SmoothedMovingAverage _gain;
        private readonly SmoothedMovingAverage _loss;
        private bool _isInitialized;
        private decimal _last;

        /// &amp;lt;summary&amp;gt;
        /// Создать &amp;lt;see cref=&amp;quot;RelativeStrengthIndex&amp;quot;/&amp;gt;.
        /// &amp;lt;/summary&amp;gt;
        public RelativeStrengthIndex()
            : base(typeof(decimal))
        {
            _gain = new SmoothedMovingAverage();
            _loss = new SmoothedMovingAverage();
        }

        /// &amp;lt;summary&amp;gt;
        /// Сформирован ли индикатор.
        /// &amp;lt;/summary&amp;gt;
        public override bool IsFormed { get { return _gain.IsFormed; } }

        /// &amp;lt;summary&amp;gt;
        /// Длина периода.
        /// &amp;lt;/summary&amp;gt;
        public override int Length
        {
            get
            {
                return _gain.Length;
            }
            set
            {
                _loss.Length = _gain.Length = value;
                Reset();
            }
        }

        /// &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 value = input.GetValue&amp;lt;decimal&amp;gt;();

            if (!_isInitialized)
            {
                _last = value;
                _isInitialized = true;
                return this.GetCurrentValue();
            }

            var delta = value - _last; 
            

            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            // Для проверки ввел следующие 4 строки, на работу индикатора они ни как не влияют, их можно удалить
            var g = input.SetValue(delta &amp;gt; 0 ? delta : 0m); // После изменения входное значения индикатора, у g значения индикатора g свойство IsFinal=false
            var l = input.SetValue(delta &amp;gt; 0 ? 0m : -delta); // После изменения значения индикатора, у l значения индикатора g свойство IsFinal=false
            var gg = _gain.Process(g);//SmoothedMovingAverage проверяет свойство IsFinal и при false считается несформированным и выдает последнее значение которое = 100
            var ll = _loss.Process(l);//SmoothedMovingAverage проверяет свойство IsFinal и при false считается несформированным и выдает последнее значение которое = 100
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


            //Поможет следующее действие
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            // Это мы закоментируем до лучших времен
            //var gainValue = _gain.Process(input.SetValue(delta &amp;gt; 0 ? delta : 0m)).GetValue&amp;lt;decimal&amp;gt;();
            //var lossValue = _loss.Process(input.SetValue(delta &amp;gt; 0 ? 0m : -delta)).GetValue&amp;lt;decimal&amp;gt;();
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            // Честно говоря, не вижу смысла изменять входное значение индикатора(если я не прав прошу поправить и объяснить почему? Здесь так мало что-то кому-то объясняют, до всего самому доходить приходиться.), так как SmoothedMovingAverage принимает на вход decimal то
            // input.SetValue(delta &amp;gt; 0 ? delta : 0m) можно заменить на delta &amp;gt; 0 ? delta : 0m И все, код работает
            var gainValue = _gain.Process(delta &amp;gt; 0 ? delta : 0m).GetValue&amp;lt;decimal&amp;gt;();
            var lossValue = _loss.Process(delta &amp;gt; 0 ? 0m : -delta).GetValue&amp;lt;decimal&amp;gt;();

            _last = value;

            if (lossValue == 0)
            {
                return 100m;
            }
            else if (gainValue / lossValue == 1)
            {
                return 0m;
            }
            else
            {
                return 100m - 100m / (1m + gainValue / lossValue);
            }
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Проблема возникает из-за того, что input.SetValue(delta &amp;gt; 0 ? 0m : -delta) выдает значение со свойством IsFinal=false, SmoothedMovingAverage проверяет свойство IsFinal и при false считается не сформированным и выдает последнее значение которое = 100. В коде я написал как привести индикатор в рабочее состояния, по крайней мере у меня он работает.[blush] &lt;br /&gt;&lt;br /&gt;Остается вопрос input.SetValue() должно выдавать значение со свойством IsFinal=false?&lt;br /&gt;&lt;br /&gt;p.s. Когда проверять будете длину индикатора RSI поставте. Значение по умолчанию 100 и 0 выдает. Хотя бы так&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
private RelativeStrengthIndex RSI = new RelativeStrengthIndex() { Length=10};&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23979/</id>
    <title type="text">В проекте с индикаторами есть набор тестов для большинства индикаторов, в том числе для RSI. Т.к. ин...</title>
    <published>2013-02-12T18:39:34Z</published>
    <updated>2013-02-12T18:39:34Z</updated>
    <author>
      <name>Kefir</name>
      <uri>https://stocksharp.com/users/6033/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;esper &lt;a href="https://stocksharp.com/posts/m/23952/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;В проекте с индикаторами есть набор тестов для большинства индикаторов, в том числе для RSI. Т.к. индикатор RSI свой тест проходит без ошибок, то он должен рассчитывать свои значения верно и ошибка, скорее всего, где-то у вас, что и было написано в предыдущем сообщении.&lt;br /&gt;Т.к. вы не показали никакого кода, как вы работаете с индикатором, то и сказать что-то еще нет возможности.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;То же столкнулся с той же проблемой значение RSI постоянно равно 100&lt;br /&gt;&lt;br /&gt;в классе RelativeStrengthIndex&lt;br /&gt;&lt;br /&gt;var gainValue = _gain.Process(input.SetValue(delta &amp;gt; 0 ? delta : 0m)).GetValue&amp;lt;decimal&amp;gt;();&lt;br /&gt;var lossValue = _loss.Process(input.SetValue(delta &amp;gt; 0 ? 0m : -delta)).GetValue&amp;lt;decimal&amp;gt;();&lt;br /&gt;&lt;br /&gt;gainValue и lossValue постоянно равны нулю и соответственно&lt;br /&gt;&lt;br /&gt;if (lossValue == 0)&lt;br /&gt;{&lt;br /&gt;  return 100m;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;всегда возвращает 100&lt;br /&gt;&lt;br /&gt;не очень силен в программировании может что то не то подаю на вход?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23952/</id>
    <title type="text">В проекте с индикаторами есть набор тестов для большинства индикаторов, в том числе для RSI. Т.к. ин...</title>
    <published>2013-02-12T05:39:02Z</published>
    <updated>2013-02-12T05:39:02Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">В проекте с индикаторами есть набор тестов для большинства индикаторов, в том числе для RSI. Т.к. индикатор RSI свой тест проходит без ошибок, то он должен рассчитывать свои значения верно и ошибка, скорее всего, где-то у вас, что и было написано в предыдущем сообщении.&lt;br /&gt;Т.к. вы не показали никакого кода, как вы работаете с индикатором, то и сказать что-то еще нет возможности.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23945/</id>
    <title type="text">Что-то у вас не так. Rsi из последней версии на кодеплексе проходит тест. Было написано так в ответе...</title>
    <published>2013-02-11T18:15:13Z</published>
    <updated>2013-02-11T18:15:13Z</updated>
    <author>
      <name>kapustin-vladimir</name>
      <uri>https://stocksharp.com/users/227/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Что-то у вас не так. Rsi из последней версии на кодеплексе проходит тест. Было написано так в ответе и воз ныне там, скажите что происходит. больше ответов не было, закончились ли тесты???</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23004/</id>
    <title type="text">Что-то у вас не так. Rsi из последней версии на кодеплексе проходит тест.</title>
    <published>2012-12-17T15:27:29Z</published>
    <updated>2012-12-17T15:27:29Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Что-то у вас не так. Rsi из последней версии на кодеплексе проходит тест.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23003/</id>
    <title type="text">выводил для проверки &amp;quot;LongSma.GetCurrentValue()&amp;quot;, LongSma.GetCurrentValue(), &amp;quot;RSI&amp;quot;, RSI.GetCurrentVa...</title>
    <published>2012-12-17T14:23:12Z</published>
    <updated>2012-12-17T14:23:12Z</updated>
    <author>
      <name>kapustin-vladimir</name>
      <uri>https://stocksharp.com/users/227/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">выводил для проверки &lt;br /&gt;&amp;quot;LongSma.GetCurrentValue()&amp;quot;, LongSma.GetCurrentValue(), &amp;quot;RSI&amp;quot;, RSI.GetCurrentValue()&lt;br /&gt;LongSma.GetCurrentValue(), 10336.05, RSI, 100, SMAStrategy&lt;br /&gt;LongSma.GetCurrentValue(), 11491.05, RSI, 100, SMAStrategy&lt;br /&gt;LongSma.GetCurrentValue(), 12646.05, RSI, 100, SMAStrategy&lt;br /&gt;RSI выводи все время 100 без изменений</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22957/</id>
    <title type="text">А значения вычисляются?</title>
    <published>2012-12-14T15:27:01Z</published>
    <updated>2012-12-14T15:27:01Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">А значения вычисляются?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22956/</id>
    <title type="text">RSI.IsFormed команда IsFormed не работает в индикаторе RSI== помогите.. показывает все время false</title>
    <published>2012-12-14T14:31:31Z</published>
    <updated>2012-12-14T14:31:31Z</updated>
    <author>
      <name>kapustin-vladimir</name>
      <uri>https://stocksharp.com/users/227/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">RSI.IsFormed команда IsFormed не работает в индикаторе RSI== помогите.. показывает все время false</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>