Отрисовка стопов без вертикальных линий


Отрисовка стопов без вертикальных линий
Atom
03.06.2019


Добрый день! Скажите пожалуйста как можно отрисовать стопы без вертикальных линий? Дело в том что когда позиция переворачивается то линия стопа переносится на противоположную сторону, и этот перенос соединяется неразрывной линией.

Может в рендере нужно использовать какие то классы реализующие 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);
}



Спасибо:


< 1 2 
Sprite

Фотография
Дата: 07.09.2020
Ответить


Константин Перейти
Вы пользуетесь сигнатурой этого метода? Быть может я что то делаю не так, но я не могу запихать double в метод так как его невозможно привести к типу IIndicatorValue.

Да, но у этого метода есть куча перегрузок. Если ваш _indicatorElement будет типом ChartLineElement - то всё должно получиться.
UPDATE По сути если вам не надо делать разрывы больше чем соседние свечки вы можете просто поменяете тип линии (DrawStyle) на Dots и получите вместо линии, как на картинке в первом посте, серии горизонтальных точек с разрывами. Или, если точки не подходят и хочется именно линии, то нужно для какой-то свечки организовать разрыв, вставляя double.NaN или сделать два элемента и рисовать их поочередно заполняя то один то другой значениями double.NaN. Ну или как писал support - используйте аннотации, но там есть свои баги.

Спасибо: Константин

Константин

Фотография
Дата: 11.09.2020
Ответить


sprite Перейти
Константин Перейти
Вы пользуетесь сигнатурой этого метода? Быть может я что то делаю не так, но я не могу запихать double в метод так как его невозможно привести к типу IIndicatorValue.

Да, но у этого метода есть куча перегрузок. Если ваш _indicatorElement будет типом ChartLineElement - то всё должно получиться.
UPDATE По сути если вам не надо делать разрывы больше чем соседние свечки вы можете просто поменяете тип линии (DrawStyle) на Dots и получите вместо линии, как на картинке в первом посте, серии горизонтальных точек с разрывами. Или, если точки не подходят и хочется именно линии, то нужно для какой-то свечки организовать разрыв, вставляя double.NaN или сделать два элемента и рисовать их поочередно заполняя то один то другой значениями double.NaN. Ну или как писал support - используйте аннотации, но там есть свои баги.



Одним double.nan не получилось обойтись. Сделал на основе индикатора и рендера отрисовки.
Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy