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

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


Добрый день! Скажите пожалуйста как можно отрисовать стопы без вертикальных линий? Дело в том что когда позиция переворачивается то линия стопа переносится на противоположную сторону, и этот перенос соединяется неразрывной линией. Может в рендере нужно использовать какие то классы реализующие 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);
}




Thanks:


< 1 2 
Sprite

Avatar
Date: 9/7/2020
Reply


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

Thanks: Константин

Константин

Avatar
Date: 9/11/2020
Reply


sprite:

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

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

Thanks:
< 1 2 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy