﻿<?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-06-21T08:19:41Z</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">&lt;p&gt;Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график индикатор Fractals, у меня было две ошибки исполнения. Я удалил весь код, связанный с Fractals и опять запустил вот этот код. Выпадает Exception в строке
var candleBounds = ((TimeSpan)candle.Arg).GetCandleBounds(_candleSeries.Security);
&amp;quot;Заданный аргумент находится вне диапазона допустимых значений.&amp;quot;&lt;/p&gt;
&lt;div class="spoiler"&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&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">UsilaDobry: Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график...</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;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(25586)" rel="nofollow" target="_blank"&gt;UsilaDobry&lt;/a&gt;:&lt;/strong&gt;
Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график индикатор Fractals, у меня было две ошибки исполнения. Я удалил весь код, связанный с Fractals и опять запустил вот этот код. Выпадает Exception в строке
var candleBounds = ((TimeSpan)candle.Arg).GetCandleBounds(_candleSeries.Security);
&amp;quot;Заданный аргумент находится вне диапазона допустимых значений.&amp;quot;&lt;/p&gt;
&lt;div class="spoiler"&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&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;&lt;/p&gt;
&lt;p&gt;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;                         //Серия свечей&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    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;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; 
:::
Свечи графики не отрисовываются по тому, что контрол SciChart не успевает загрузиться до того как мы начинаем его инициализацию, поэтому предлагаю перенести инициализацию графика в обработчик нажатия на кнопку:
:::spoiler

```csharp
        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;/code&gt;&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.ru/posts/m/25599/</id>
    <title type="text">UsilaDobry: Значение 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;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(25590)" rel="nofollow" target="_blank"&gt;UsilaDobry&lt;/a&gt;:&lt;/strong&gt;
Значение timeframe указано.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Пришлите проект на почту.&lt;/p&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">&lt;p&gt;Значение timeframe указано.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/25589/</id>
    <title type="text">UsilaDobry: Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график...</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;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(25586)" rel="nofollow" target="_blank"&gt;UsilaDobry&lt;/a&gt;:&lt;/strong&gt;
Днем данный код работал, все было нормально. Потом я пробовал добавить на вывод в график индикатор Fractals, у меня было две ошибки исполнения. Я удалил весь код, связанный с Fractals и опять запустил вот этот код. Выпадает Exception в строке
var candleBounds = ((TimeSpan)candle.Arg).GetCandleBounds(_candleSeries.Security);
&amp;quot;Заданный аргумент находится вне диапазона допустимых значений.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Значение timeframe указано?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>