﻿<?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">Индикатор Fractal на графике (ошибка)</title>
  <id>~/topic/3624/indikator-fractal-na-grafike-(oshibka)/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-10T07:24:37Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3624" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/25586/</id>
    <title type="text">Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график индикатор F...</title>
    <published>2013-04-24T16:19:42Z</published>
    <updated>2013-06-23T15:53:22Z</updated>
    <author>
      <name>UsilaDobry</name>
      <uri>https://stocksharp.ru/users/28825/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график индикатор Fractals, у меня было две ошибки исполнения. Я удалил весь код, связанный с Fractals и опять запустил вот этот код. Выпадает Exception в строке&lt;br /&gt;var candleBounds = ((TimeSpan)candle.Arg).GetCandleBounds(_candleSeries.Security);&lt;br /&gt;&amp;quot;Заданный аргумент находится вне диапазона допустимых значений.&amp;quot;&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_11a5ec3564774c23840364f6e4b2e039');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_11a5ec3564774c23840364f6e4b2e039' 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;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows;
using System.Windows.Media;
using Ecng.Xaml;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Indicators.Trend;
using StockSharp.Quik;
using StockSharp.TraderConnection;
using StockSharp.Xaml;

namespace MARKET_SUCCESS
{
    /// &amp;lt;summary&amp;gt;
    /// Логика взаимодействия для MainWindow.xaml
    /// &amp;lt;/summary&amp;gt;
    public partial class MainWindow
    {
        private CandleManager _candleManager;                       //Менеджер свечей
        private CandleSeries _candleSeries;                         //Серия свечей

        private ChartArea _chartArea;                               //Область на графике

        private ChartCandleElement _chartCandleElement;             //Графический элемент свечи
        private ChartIndicatorElement _chartBollingerElement;       //Графический элемент Bollinger
        private ChartIndicatorElement _chartParabolicElement;       //Графический элемент Parabolic SAR
        private ChartIndicatorValue _chartBollingerValue;           //графическое значение Bollinger
        private ChartIndicatorValue _chartParabolicValue;           //Графическое значение Parabolic SAR
        private BollingerBands _bollinger;                          //Индикатор Bollinger Bands
        private ParabolicSar _parabolic;                            //Индикатор Parabolic SAR

        public MainWindow()
        {
            InitializeComponent();

            //Указываем конкретный вариант коннектора в обертку
            ConnectionInterface.SafeConnection = new SafeConnection(new QuikTrader(QuikTerminal.GetDefaultPath()));

        }
        private void ChartButton_Click(object sender, RoutedEventArgs e)
        {
            //Проверяем, чтобы значение тайм-фрейма было указано
            if (TpTimeFrame.Value == null)
            {
                Debug.Print(&amp;quot;Value from tpTimeFrame is null&amp;quot;);
                return;
            }

            InitChart();
            //Создаем экземпляр графического элемента свечи
            _chartCandleElement = new ChartCandleElement();
            //Добавляем графический элемент свечи в коллекцию
            _chartArea.Elements.Add(_chartCandleElement);

            //Инициализируем индикаторы
            InitIndicators();

            //Получаем тайм-фрейм
            var timeFrame = TpTimeFrame.Value.Value.TimeOfDay;

            //Инициируем процесс получения свечей и дальнейшей отрисовки
            RunProcessGetCandles(timeFrame);

            //Инициализируем стратегию
            //InitStrategy();
        }

        /// &amp;lt;summary&amp;gt;
        /// Метод инициирования среды для получения свечей и дальнейшей отрисовки
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;timeFrame&amp;quot;&amp;gt;Тайм-фрейм для свечей&amp;lt;/param&amp;gt;
        private void RunProcessGetCandles(TimeSpan timeFrame)
        {
            //Создаем менеджер свечей
            _candleManager = new CandleManager(ConnectionInterface.SafeConnection.Trader);

            //Получаем торговый инструмент
            var security = ConnectionInterface.SelectedSecurity;

            //Создаем серию свечей
            _candleSeries = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame);

            //Подписываемся на событие обработки свечи
            _candleSeries.ProcessCandle += Draw;

            //Запускаем получение свечей
            _candleManager.Start(_candleSeries);
        }

        /// &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)
        {
            //Временные рамки свечи
            var candleBounds = ((TimeSpan)candle.Arg).GetCandleBounds(_candleSeries.Security);

            //Получаем значение Bollinger по данной свече
            var valueBb = _bollinger.Process(candle);
            //Создаем экземпляр значения Bollinger для непосредственного вывода на график
            _chartBollingerValue = new ChartIndicatorValue(_bollinger, valueBb);
            //Получаем значение Parabolic SAR по данной свечке
            var valueSar = _parabolic.Process(candle);
            //Создаем экземпляр значение Paraboli SAR для вывода на график  
            _chartParabolicValue = new ChartIndicatorValue(_parabolic, valueSar);

            //Работаем только с завершенными свечами и одной последней свечей с произвольным состоянием
            if (candle.State == CandleStates.Finished || candle.OpenTime &amp;gt;= candleBounds.Min)
            {
                //Выводим значения на график
                this.GuiAsync(() =&amp;gt; Chart.ProcessValues(candle.OpenTime, new Dictionary&amp;lt;IChartElement, object&amp;gt;
                    {
                        {_chartCandleElement, candle},                         //для свечи
                        {_chartBollingerElement, _chartBollingerValue},        //для Bollinger Bands 
                        {_chartParabolicElement, _chartParabolicValue}        //для Parabolic SAR_
                    }));
            }
        }

        /// &amp;lt;summary&amp;gt;
        /// Метод инициализации графика
        /// &amp;lt;/summary&amp;gt;
        private void InitChart()
        {
            //Включить авто-прокрутку
            Chart.IsAutoScroll = true;

            //Создаем экземпляр области
            _chartArea = new ChartArea();
            //Добавляем экземпляр области в коллекцию визуального контрола графика
            Chart.Areas.Add(_chartArea);

        }

        /// &amp;lt;summary&amp;gt;
        /// Метод инициализации индикаторов
        /// &amp;lt;/summary&amp;gt;
        private void InitIndicators()
        {
             //Создаем экземпляр Bollinger Bands 
             _bollinger = new BollingerBands
                 {
                     Length = 20,
                     Width = 2
                 };

             //Создаем экземпляр графического элемента Bollinger
             _chartBollingerElement = new ChartIndicatorElement
                 {
                     Title = &amp;quot;Bollinger&amp;quot;,
                     Color = Colors.Blue,
                     Indicator = _bollinger
                 };
             //Добавляем графический элемент индикатора в коллекцию области
             _chartArea.Elements.Add(_chartBollingerElement);

             //Создаем экземпляр Parabolic SAR
            _parabolic = new ParabolicSar
                {
                    AccelerationMax = (decimal) 0.02,
                    AccelerationStep = (decimal) 0.2
                };
            //Создаем экземпляр графического элемента Parabolic SAR
            _chartParabolicElement = new ChartIndicatorElement
                {
                    Title = &amp;quot;Parabolic&amp;quot;,
                    Color = Colors.Aqua,
                    Indicator = _parabolic
                };
            //Добавляем графический элемент в коллекцию области
            _chartArea.Elements.Add(_chartParabolicElement);
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/25604/</id>
    <title type="text">Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график индикатор F...</title>
    <published>2013-04-25T06:37:40Z</published>
    <updated>2013-04-25T06:38:14Z</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;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25586/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график индикатор Fractals, у меня было две ошибки исполнения. Я удалил весь код, связанный с Fractals и опять запустил вот этот код. Выпадает Exception в строке&lt;br /&gt;var candleBounds = ((TimeSpan)candle.Arg).GetCandleBounds(_candleSeries.Security);&lt;br /&gt;&amp;quot;Заданный аргумент находится вне диапазона допустимых значений.&amp;quot;&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_c513207102d3418696df4d30e5fc4fe9');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_c513207102d3418696df4d30e5fc4fe9' 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;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows;
using System.Windows.Media;
using Ecng.Xaml;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Indicators.Trend;
using StockSharp.Quik;
using StockSharp.TraderConnection;
using StockSharp.Xaml;

namespace MARKET_SUCCESS
{
    /// &amp;lt;summary&amp;gt;
    /// Логика взаимодействия для MainWindow.xaml
    /// &amp;lt;/summary&amp;gt;
    public partial class MainWindow
    {
        private CandleManager _candleManager;                       //Менеджер свечей
        private CandleSeries _candleSeries;                         //Серия свечей

        private ChartArea _chartArea;                               //Область на графике

        private ChartCandleElement _chartCandleElement;             //Графический элемент свечи
        private ChartIndicatorElement _chartBollingerElement;       //Графический элемент Bollinger
        private ChartIndicatorElement _chartParabolicElement;       //Графический элемент Parabolic SAR
        private ChartIndicatorValue _chartBollingerValue;           //графическое значение Bollinger
        private ChartIndicatorValue _chartParabolicValue;           //Графическое значение Parabolic SAR
        private BollingerBands _bollinger;                          //Индикатор Bollinger Bands
        private ParabolicSar _parabolic;                            //Индикатор Parabolic SAR

        public MainWindow()
        {
            InitializeComponent();

            //Указываем конкретный вариант коннектора в обертку
            ConnectionInterface.SafeConnection = new SafeConnection(new QuikTrader(QuikTerminal.GetDefaultPath()));

        }
        private void ChartButton_Click(object sender, RoutedEventArgs e)
        {
            //Проверяем, чтобы значение тайм-фрейма было указано
            if (TpTimeFrame.Value == null)
            {
                Debug.Print(&amp;quot;Value from tpTimeFrame is null&amp;quot;);
                return;
            }

            InitChart();
            //Создаем экземпляр графического элемента свечи
            _chartCandleElement = new ChartCandleElement();
            //Добавляем графический элемент свечи в коллекцию
            _chartArea.Elements.Add(_chartCandleElement);

            //Инициализируем индикаторы
            InitIndicators();

            //Получаем тайм-фрейм
            var timeFrame = TpTimeFrame.Value.Value.TimeOfDay;

            //Инициируем процесс получения свечей и дальнейшей отрисовки
            RunProcessGetCandles(timeFrame);

            //Инициализируем стратегию
            //InitStrategy();
        }

        /// &amp;lt;summary&amp;gt;
        /// Метод инициирования среды для получения свечей и дальнейшей отрисовки
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;timeFrame&amp;quot;&amp;gt;Тайм-фрейм для свечей&amp;lt;/param&amp;gt;
        private void RunProcessGetCandles(TimeSpan timeFrame)
        {
            //Создаем менеджер свечей
            _candleManager = new CandleManager(ConnectionInterface.SafeConnection.Trader);

            //Получаем торговый инструмент
            var security = ConnectionInterface.SelectedSecurity;

            //Создаем серию свечей
            _candleSeries = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame);

            //Подписываемся на событие обработки свечи
            _candleSeries.ProcessCandle += Draw;

            //Запускаем получение свечей
            _candleManager.Start(_candleSeries);
        }

        /// &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)
        {
            //Временные рамки свечи
            var candleBounds = ((TimeSpan)candle.Arg).GetCandleBounds(_candleSeries.Security);

            //Получаем значение Bollinger по данной свече
            var valueBb = _bollinger.Process(candle);
            //Создаем экземпляр значения Bollinger для непосредственного вывода на график
            _chartBollingerValue = new ChartIndicatorValue(_bollinger, valueBb);
            //Получаем значение Parabolic SAR по данной свечке
            var valueSar = _parabolic.Process(candle);
            //Создаем экземпляр значение Paraboli SAR для вывода на график  
            _chartParabolicValue = new ChartIndicatorValue(_parabolic, valueSar);

            //Работаем только с завершенными свечами и одной последней свечей с произвольным состоянием
            if (candle.State == CandleStates.Finished || candle.OpenTime &amp;gt;= candleBounds.Min)
            {
                //Выводим значения на график
                this.GuiAsync(() =&amp;gt; Chart.ProcessValues(candle.OpenTime, new Dictionary&amp;lt;IChartElement, object&amp;gt;
                    {
                        {_chartCandleElement, candle},                         //для свечи
                        {_chartBollingerElement, _chartBollingerValue},        //для Bollinger Bands 
                        {_chartParabolicElement, _chartParabolicValue}        //для Parabolic SAR_
                    }));
            }
        }

        /// &amp;lt;summary&amp;gt;
        /// Метод инициализации графика
        /// &amp;lt;/summary&amp;gt;
        private void InitChart()
        {
            //Включить авто-прокрутку
            Chart.IsAutoScroll = true;

            //Создаем экземпляр области
            _chartArea = new ChartArea();
            //Добавляем экземпляр области в коллекцию визуального контрола графика
            Chart.Areas.Add(_chartArea);

        }

        /// &amp;lt;summary&amp;gt;
        /// Метод инициализации индикаторов
        /// &amp;lt;/summary&amp;gt;
        private void InitIndicators()
        {
             //Создаем экземпляр Bollinger Bands 
             _bollinger = new BollingerBands
                 {
                     Length = 20,
                     Width = 2
                 };

             //Создаем экземпляр графического элемента Bollinger
             _chartBollingerElement = new ChartIndicatorElement
                 {
                     Title = &amp;quot;Bollinger&amp;quot;,
                     Color = Colors.Blue,
                     Indicator = _bollinger
                 };
             //Добавляем графический элемент индикатора в коллекцию области
             _chartArea.Elements.Add(_chartBollingerElement);

             //Создаем экземпляр Parabolic SAR
            _parabolic = new ParabolicSar
                {
                    AccelerationMax = (decimal) 0.02,
                    AccelerationStep = (decimal) 0.2
                };
            //Создаем экземпляр графического элемента Parabolic SAR
            _chartParabolicElement = new ChartIndicatorElement
                {
                    Title = &amp;quot;Parabolic&amp;quot;,
                    Color = Colors.Aqua,
                    Indicator = _parabolic
                };
            //Добавляем графический элемент в коллекцию области
            _chartArea.Elements.Add(_chartParabolicElement);
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Свечи графики не отрисовываются по тому, что контрол SciChart не успевает загрузиться до того как мы начинаем его инициализацию, поэтому предлагаю перенести инициализацию графика в обработчик нажатия на кнопку:&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_e0a14f119b784112a88f7511b6674be9');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_e0a14f119b784112a88f7511b6674be9' 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;
        private void MarketSuccessWindow_Loaded(object sender, RoutedEventArgs e)
        {
            
        }

        private void ChartButton_Click(object sender, RoutedEventArgs e)
        {
            //Проверяем, чтобы значение тайм-фрейма было указано
            if (TpTimeFrame.Value == null)
            {
                Debug.Print(&amp;quot;Value from tpTimeFrame is null&amp;quot;);
                return;
            }

            InitChart();

            //Создаем экземпляр графического элемента свечи
            _chartCandleElement = new ChartCandleElement();
            //Добавляем графический элемент свечи в коллекцию
            _chartArea.Elements.Add(_chartCandleElement);
            ...&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/25599/</id>
    <title type="text">Значение timeframe указано. Пришлите проект на почту.</title>
    <published>2013-04-25T03:12:06Z</published>
    <updated>2013-04-25T03:12:06Z</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;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25590/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Значение timeframe указано.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Пришлите проект на почту.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/25590/</id>
    <title type="text">Значение timeframe указано.</title>
    <published>2013-04-24T17:57:57Z</published>
    <updated>2013-04-24T17:57:57Z</updated>
    <author>
      <name>UsilaDobry</name>
      <uri>https://stocksharp.ru/users/28825/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Значение timeframe указано.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/25589/</id>
    <title type="text">Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график индикатор F...</title>
    <published>2013-04-24T17:49:07Z</published>
    <updated>2013-04-24T17:49:07Z</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;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25586/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график индикатор Fractals, у меня было две ошибки исполнения. Я удалил весь код, связанный с Fractals и опять запустил вот этот код. Выпадает Exception в строке&lt;br /&gt;var candleBounds = ((TimeSpan)candle.Arg).GetCandleBounds(_candleSeries.Security);&lt;br /&gt;&amp;quot;Заданный аргумент находится вне диапазона допустимых значений.&amp;quot;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Значение timeframe указано?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>