﻿<?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">Различия значений Indicator.GetCurrentValue и ChartingIndicatorValue</title>
  <id>~/topic/4778/razlichiya-znachenii-indicator_getcurrentvalue-i-chartingindicatorvalue/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-24T01:44:00Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=4778" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/31954/</id>
    <title type="text">При тестировании обнаружил, что в рамках одной и той же обрабатываемой свечи значения одного и того ...</title>
    <published>2014-10-20T13:50:05Z</published>
    <updated>2014-10-20T13:50:05Z</updated>
    <author>
      <name>JaguarFX</name>
      <uri>https://stocksharp.com/users/49779/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">При тестировании обнаружил, что в рамках одной и той же обрабатываемой свечи значения одного и того же индикатора разные при вызове Indicator.GetCurrentValue и ChartingIndicatorValue.&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;


        public CandleSeries series { get; set; }
        private SimpleMovingAverage LongSma { get; set; }
        private SimpleMovingAverage ShortSma { get; set; }
        private AwesomeOscillator AweOsc { get; set; }
        private ChartIndicatorElement LongSmaInd { get; set; }
        private ChartIndicatorElement ShortSmaInd { get; set; }
        private ChartIndicatorElement AweInd { get; set; }

        protected override void OnStarted()
        {
            base.OnStarted();

            LongSma = new SimpleMovingAverage();
            LongSma.Length = 60;
           
            ShortSma = new SimpleMovingAverage();
            ShortSma.Length = 20;

            AweOsc = new AwesomeOscillator(LongSma, ShortSma);
        
            series
                .WhenCandlesFinished()
                .Do(ProcessCandle)
                .Apply(this);

            if (Params.chartIndex)
            {
                LongSmaInd = new ChartIndicatorElement { Title = &amp;quot;LongSMA&amp;quot;, Indicator = LongSma, Color = Colors.DarkBlue};
                MainWindow.Instance.GuiAsync(() =&amp;gt; HistoryChart.Areas[0].Elements.Add(LongSmaInd));

                ShortSmaInd = new ChartIndicatorElement { Title = &amp;quot;ShortSMA&amp;quot;, Indicator = ShortSma, Color = Colors.Crimson};
                MainWindow.Instance.GuiAsync(() =&amp;gt; HistoryChart.Areas[0].Elements.Add(ShortSmaInd));

                AweInd = new ChartIndicatorElement { Title = &amp;quot;DiffSMA&amp;quot;, Indicator = AweOsc, Color = Colors.Crimson};

            }

            ......
       }
private void ProcessCandle(Candle candle)
        {

            if (Params.chartIndex)
            {
                var OpenTime = candle.OpenTime;
                var myDic = new Dictionary&amp;lt;IChartElement, object&amp;gt;();


                    var valLongSMA = LongSmaInd.Indicator.Process(new CandleIndicatorValue(candle) );
                    var ValueLongSMA = new ChartIndicatorValue(LongSmaInd.Indicator, valLongSMA);
                    myDic.Add(LongSmaInd, ValueLongSMA);

                    var valShortSma = ShortSmaInd.Indicator.Process(new CandleIndicatorValue(candle) );
                    var ValueShortSma = new ChartIndicatorValue(ShortSmaInd.Indicator, valShortSma);
                    myDic.Add(ShortSmaInd, ValueShortSma);

                    var valAweInd = AweInd.Indicator.Process(new CandleIndicatorValue(candle));
                    var ValueAweInd = new ChartIndicatorValue(AweInd.Indicator, valAweInd);
                    myDic.Add(AweInd, ValueAweInd);
      
                MainWindow.Instance.GuiAsync(() =&amp;gt;
                    {
                        HistoryChart.ProcessValues(OpenTime, myDic);
                    });
            }
            

            // вычисляем новое положение относительно друг друга (SLL = ShortLessThenLong)
            var SSMval = ShortSma.GetCurrentValue();
            var LSMval = LongSma.GetCurrentValue();
            var SLdiff = SSMval - LSMval;
......
   }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В результате для каждой обработанной свечки обнаруживаем что, значения базовых индикаторов LongSMA и ShortSma, полученные через функцию ChartIndicatorValue, отличаются от значений тех же индикаторов на основе функции GetCurrentValue (т.е. ValueLongSMA&amp;lt;&amp;gt;LSMval  и ValueShortSma&amp;lt;&amp;gt;SSMval).&lt;br /&gt;При этом значение индикатора разницы AwesomeOscillator, полученное через функцию ChartIndicatorValue совпадает с вычисленой разницей между значениями базовых индикаторов (т.е. ValueAweInd= SSMval - LSMval).&lt;br /&gt;&lt;br /&gt;Это более чем странно!&lt;br /&gt;Так явно не должно быть, т.е. где-то ошибка.&lt;br /&gt;&lt;br /&gt;Таблица с реальными значениями, полученными при прогоне на SPFB.SBRF в аттаче.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>