Добрый день! Скажите пожалуйста как можно отрисовать стопы без вертикальных линий? Дело в том что когда позиция переворачивается то линия стопа переносится на противоположную сторону, и этот перенос соединяется неразрывной линией.
Может в рендере нужно использовать какие то классы реализующие IChartElement или в свойство Style устанавливать какое значение?
Индикатор такой:
public class StopLossIndicator : BaseIndicator
{
protected override IIndicatorValue OnProcess(IIndicatorValue input)
{
var value = input.GetValue<decimal>();
IsFormed = value != 0;
return new DecimalIndicatorValue(this, value);
}
}
Рендер такой:
public class StopLossPainter : BaseChartIndicatorPainter
{
[Display(Name = "Стоп-Лосс", Description = "Область графика для отрисовки стопа")]
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;
}
}
Отрисовка как:
.....
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);
}
评论 (12)
登录 或 创建账户, 登录或注册以发表评论
Добрый день
Вы можете использовать аннотации для этого:
На примере SampleChart это выглядит так:
Если _annotation объявить как поле типа ChartAnnotation один раз, добавить его на график Chart.AddElement(_areaComb, _annotation) и добавлять на него новые данные ChartDrawData.AnnotationData, то предыдущая линия стирается и начитает прорисовываться новая. Можно ли как то рисовать не одну линию, а несколько? Неужели для каждого стопа нужно добавлять новый элемент ChartAnnotation на график?
Если я правильно понимаю решения в настоящее время нет. Если да то у меня сопутствующий вопрос - Планируется ли реализация данного решения в будущем?
Добрый день
Да, пока только через создание новых элементов. Мы обсудим возможность введение единичного элемента графика.
Добрый день. Не было ли принято решение по данному вопросу?
Здравствуйте. Пока на стадии рассмотрения. Как будут новости мы оповестим в данном топике.
На самом деле это очень нужная опция. Так как без нее очень сложно разбираться где был выставлен и как подтягивался трейл стоп. Рисовать индикатором слегка деревянный способ.🧐
Судя по всему вопрос был отклонен. В связи с этим вопрос: Как рисовать стопы на истории? Если группировка данных происходит по времени
то следуя логике если я буду рисовать линию по 10 свечей так
то линия должна прерываться каждые 10 свечей. Вместо этого линия рисуется без разрывов, но пропуск 10 свечей учтен. Линия получается в два раза короче. Какой смысл в группировке по времени, если индикатор никаким образом не реагирует на это?
if (drawLine) gr.Add(_indicatorElement, (double)longValue); else gr.Add(_indicatorElement, double.NaN);
Идея в том, что нужно хоть что-то рисовать, чтобы значения индикатора не пропускались и из-за этого следующие значения не съезжали влево по горизонтальной оси. Еще момент - если вы так нарисуете линию только в одной свечке, а слева и справа значения будут double.NaN - то вы не увидите линию. Для этого можно использовать стиль линии Dots. Собственно так в StockSharp рисуются фракталы.
К сожалению так нельзя делать со свечками, т.е. нельзя просто так взять и нарисовать индикатором одну свечку в нужном месте. Поясню: допустим у вас рисуются свечки на оси + рисуются другие свечки индикатором на этой же оси, но другим элементом ChartCandleElement. Так вот, пропуск вторых свечек приведет к тому, что как ни группируй свечки будут рисоваться одна за другой, без пропусков. И по сути вы правы - группировка по времени при таком использовании не работает. И еще момент - свечки нельзя рисовать в кастомном рендерере (унаследовав от BaseChartIndicatorPainter), почему так сделано - для меня загадка.
Одним double.nan не получилось обойтись. Сделал на основе индикатора и рендера отрисовки.