﻿<?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/10763/otrisovka-stopov-bez-vertikalnyh-linii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-13T01:15:07Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=10763" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/51379/</id>
    <title type="text">sprite: Константин: Вы пользуетесь сигнатурой этого метода? Быть может я что то делаю не так, но я н...</title>
    <published>2020-09-10T22:31:43Z</published>
    <updated>2020-09-10T22:31:43Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(51366)" rel="nofollow" target="_blank"&gt;sprite&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(51365)" rel="nofollow" target="_blank"&gt;Константин&lt;/a&gt;:&lt;/strong&gt;
Вы пользуетесь сигнатурой этого метода? Быть может я что то делаю не так, но я не могу запихать double в метод так как его невозможно привести к типу IIndicatorValue.
Да, но у этого метода есть куча перегрузок. Если ваш _indicatorElement будет типом ChartLineElement - то всё должно получиться.
UPDATE По сути если вам не надо делать разрывы больше чем соседние свечки вы можете просто поменяете тип линии (DrawStyle) на Dots и получите вместо линии, как на картинке в первом посте, серии горизонтальных точек с разрывами. Или, если точки не подходят и хочется именно линии, то нужно для какой-то свечки организовать разрыв, вставляя double.NaN или сделать два элемента и рисовать их поочередно заполняя то один то другой значениями double.NaN. Ну или как писал support - используйте аннотации, но там есть свои баги.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Одним double.nan не получилось обойтись. Сделал на основе индикатора и рендера отрисовки.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/51366/</id>
    <title type="text">Константин: Вы пользуетесь сигнатурой этого метода? Быть может я что то делаю не так, но я не могу з...</title>
    <published>2020-09-07T20:18:26Z</published>
    <updated>2020-09-07T23:12:07Z</updated>
    <author>
      <name>Sprite</name>
      <uri>https://stocksharp.ru/users/104190/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(51365)" rel="nofollow" target="_blank"&gt;Константин&lt;/a&gt;:&lt;/strong&gt;
Вы пользуетесь сигнатурой этого метода? Быть может я что то делаю не так, но я не могу запихать double в метод так как его невозможно привести к типу IIndicatorValue.
Да, но у этого метода есть куча перегрузок. Если ваш _indicatorElement будет типом ChartLineElement - то всё должно получиться.
UPDATE По сути если вам не надо делать разрывы больше чем соседние свечки вы можете просто поменяете тип линии (DrawStyle) на Dots и получите вместо линии, как на картинке в первом посте, серии горизонтальных точек с разрывами. Или, если точки не подходят и хочется именно линии, то нужно для какой-то свечки организовать разрыв, вставляя double.NaN или сделать два элемента и рисовать их поочередно заполняя то один то другой значениями double.NaN. Ну или как писал support - используйте аннотации, но там есть свои баги.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/51365/</id>
    <title type="text">sprite: if (drawLine) gr.Add(_indicatorElement, double.NaN); Вы пользуетесь сигнатурой этого метода?...</title>
    <published>2020-09-07T20:05:51Z</published>
    <updated>2020-09-07T20:05:51Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(51364)" rel="nofollow" target="_blank"&gt;sprite&lt;/a&gt;:&lt;/strong&gt;
if (drawLine)
gr.Add(_indicatorElement, double.NaN);
Вы пользуетесь сигнатурой этого метода? Быть может я что то делаю не так, но я не могу запихать double в метод так как его невозможно привести к типу IIndicatorValue.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/51364/</id>
    <title type="text">if (drawLine) gr.Add(_indicatorElement, (double)longValue); else gr.Add(_indicatorElement, double.Na...</title>
    <published>2020-09-07T19:24:23Z</published>
    <updated>2020-09-07T19:24:23Z</updated>
    <author>
      <name>Sprite</name>
      <uri>https://stocksharp.ru/users/104190/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;if (drawLine)
gr.Add(_indicatorElement, (double)longValue);
else
gr.Add(_indicatorElement, double.NaN);&lt;/p&gt;
&lt;p&gt;Идея в том, что нужно хоть что-то рисовать, чтобы значения индикатора не пропускались и из-за этого следующие значения не съезжали влево по горизонтальной оси.
Еще момент - если вы так нарисуете линию только в одной свечке, а слева и справа значения будут double.NaN - то вы не увидите линию. Для этого можно использовать стиль линии Dots.
Собственно так в StockSharp рисуются фракталы.&lt;/p&gt;
&lt;p&gt;К сожалению так нельзя делать со свечками, т.е. нельзя просто так взять и нарисовать индикатором одну свечку в нужном месте. Поясню: допустим у вас рисуются свечки на оси + рисуются другие свечки индикатором на этой же оси, но другим элементом ChartCandleElement. Так вот, пропуск вторых свечек приведет к тому, что как ни группируй свечки будут рисоваться одна за другой, без пропусков. И по сути вы правы - группировка по времени при таком использовании не работает. И еще момент - свечки нельзя рисовать в кастомном рендерере (унаследовав от BaseChartIndicatorPainter), почему так сделано - для меня загадка.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/51363/</id>
    <title type="text">Судя по всему вопрос был отклонен. В связи с этим вопрос: Как рисовать стопы на истории? Если группи...</title>
    <published>2020-09-07T16:55:56Z</published>
    <updated>2020-09-07T17:08:44Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Судя по всему вопрос был отклонен. В связи с этим вопрос: Как рисовать стопы на истории?
Если группировка данных происходит по времени&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
var chartData = new ChartDrawData();
var gr =  chartData.Group(candle.OpenTime);

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;то следуя логике если я буду рисовать линию по 10 свечей так&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
if (_count &amp;lt; 10)
   gr.Add(_indicatorElement, longValue);
else  if (_count &amp;gt; 20) _count = 0;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;то линия должна прерываться каждые 10 свечей.
Вместо этого линия рисуется без разрывов, но пропуск 10 свечей учтен. Линия получается в два раза короче. Какой смысл в группировке по времени, если индикатор никаким образом не реагирует на это?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/49103/</id>
    <title type="text">На самом деле это очень нужная опция. Так как без нее очень сложно разбираться где был выставлен и к...</title>
    <published>2019-12-02T14:08:18Z</published>
    <updated>2019-12-02T14:08:18Z</updated>
    <author>
      <name>Koc</name>
      <uri>https://stocksharp.ru/users/103764/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;На самом деле это очень нужная опция. Так как без нее очень сложно разбираться где был выставлен и как подтягивался трейл стоп. Рисовать индикатором слегка деревянный способ.[suspicious]&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/48315/</id>
    <title type="text">Здравствуйте. Пока на стадии рассмотрения. Как будут новости мы оповестим в данном топике. </title>
    <published>2019-09-01T12:17:12Z</published>
    <updated>2019-09-01T12:17:12Z</updated>
    <author>
      <name>Support</name>
      <uri>https://stocksharp.ru/users/97869/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&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/48285/</id>
    <title type="text">Добрый день. Не было ли принято решение по данному вопросу? </title>
    <published>2019-08-28T16:28:31Z</published>
    <updated>2019-08-28T16:28:31Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&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/47820/</id>
    <title type="text">Добрый день Да, пока только через создание новых элементов. Мы обсудим возможность введение единично...</title>
    <published>2019-06-16T20:54:39Z</published>
    <updated>2019-06-16T20:54:39Z</updated>
    <author>
      <name>Support</name>
      <uri>https://stocksharp.ru/users/97869/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день&lt;/p&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/47818/</id>
    <title type="text">Если я правильно понимаю решения в настоящее время нет. Если да то у меня сопутствующий вопрос - Пла...</title>
    <published>2019-06-16T20:26:28Z</published>
    <updated>2019-06-16T20:26:28Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&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/47743/</id>
    <title type="text">Если _annotation объявить как поле типа ChartAnnotation один раз, добавить его на график Chart.AddEl...</title>
    <published>2019-06-10T20:19:01Z</published>
    <updated>2019-06-10T20:19:01Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Если _annotation объявить как поле типа ChartAnnotation один раз, добавить его на график Chart.AddElement(_areaComb, _annotation) и добавлять на него новые данные ChartDrawData.AnnotationData, то предыдущая линия стирается и начитает прорисовываться новая.
Можно ли как то рисовать не одну линию, а несколько?
Неужели для каждого стопа нужно добавлять новый элемент ChartAnnotation на график?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/47712/</id>
    <title type="text">Добрый день Вы можете использовать аннотации для этого: var annotation = new ChartAnnotation { Type ...</title>
    <published>2019-06-08T15:27:01Z</published>
    <updated>2019-06-08T15:27:01Z</updated>
    <author>
      <name>Support</name>
      <uri>https://stocksharp.ru/users/97869/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день&lt;/p&gt;
&lt;p&gt;Вы можете использовать аннотации для этого:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var annotation = new ChartAnnotation { Type = ChartAnnotationTypes.LineAnnotation };
			Chart.AddElement(_areaComb, annotation);

			var data = new ChartDrawData.AnnotationData
			{
				X1 = new DateTimeOffset(2015, 8, 03, 5, 0, 0, TimeSpan.FromHours(3)),
				X2 = new DateTimeOffset(2015, 8, 03, 5, 30, 0, TimeSpan.FromHours(3)),
				Y1 = 2098.5m,
				Y2 = 2098.5m,
				IsVisible = true,
				IsEditable = false,
				Stroke = Brushes.Red,
				CoordinateMode = AnnotationCoordinateMode.Absolute,
			};

			var dd = new ChartDrawData();
			dd.Add(annotation, data);

			Chart.Draw(dd);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;На примере SampleChart это выглядит так:&lt;/p&gt;
&lt;p&gt;&lt;img src="/file/109242/37b04f5a757a10692c5d86dce3070d09.png" alt="37b04f5a757a10692c5d86dce3070d09.png" /&gt;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/47666/</id>
    <title type="text">Добрый день! Скажите пожалуйста как можно отрисовать стопы без вертикальных линий? Дело в том что ко...</title>
    <published>2019-06-03T20:41:31Z</published>
    <updated>2019-06-03T20:58:02Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день! Скажите пожалуйста как можно отрисовать стопы без вертикальных линий? Дело в том что когда позиция переворачивается то линия стопа переносится на противоположную сторону, и этот перенос соединяется неразрывной линией.
&lt;img src="https://pp.userapi.com/c849124/v849124139/1a8174/gHWqfa5hyK8.jpg" alt="" /&gt;
Может в рендере нужно использовать какие то классы реализующие IChartElement или в свойство Style устанавливать какое значение?&lt;/p&gt;
&lt;p&gt;Индикатор такой:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
    public class StopLossIndicator : BaseIndicator
    {
        protected override IIndicatorValue OnProcess(IIndicatorValue input)
        {
            var value = input.GetValue&amp;lt;decimal&amp;gt;();
            IsFormed = value != 0;
            return new DecimalIndicatorValue(this, value);
        }
    }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Рендер такой:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public class StopLossPainter : BaseChartIndicatorPainter
    {
        [Display(Name = &amp;quot;Стоп-Лосс&amp;quot;, Description = &amp;quot;Область графика для отрисовки стопа&amp;quot;)]
        public ChartLineElement StopLossLine { get; }


        public StopLossPainter()
        {
            StopLossLine = new ChartLineElement()
            {
                Style = ChartIndicatorDrawStyles.Line, StrokeThickness = 2, Color = Colors.Red
            };
            AddChildElement(StopLossLine);
        }


        protected override bool OnDraw()
        {
            var ind = (StopLossIndicator)Indicator;
            var result = false;
            result |= DrawValues(ind, StopLossLine);

            return result;
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Отрисовка как:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
.....
StopLoss = new StopLossIndicator();
.....
private void OnCandleSeriesProcessing(CandleSeries candleSeries, Candle candle)
        {
            var chartDrawData = new ChartDrawData();
            var chartDrawDataItem = chartDrawData.Group(candle.OpenTime);
            chartDrawDataItem.Add(ChartCandleElement, candle);

            var dataStop = StopLoss.Process(StopPriсe, candle.State == CandleStates.Finished);
            chartDrawDataItem.Add(StopLossElement, dataStop);

            Chart.Draw(chartDrawData);
}

&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>