← Zurück

Пример рендерера

Приветствую, имею индикатор с несколькими линиями, но вот столкнулся с проблемой его раскараски ), может есть у кого пример рендерера? в документации ни слова об этом.

War dieses Thema hilfreich?

Thema teilen

Kommentare (2)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

esper
esper
	/// <summary>
	/// Рендерер для <see cref="Ichimoku"/>.
	/// </summary>
	public class IchimokuPainter : BaseChartIndicatorPainter<Ichimoku>
	{
		private Color _tenkanColor = Colors.Red;

		/// <summary>
		/// Цвет Tenkan линии.
		/// </summary>
		[DisplayName("Цвет Tenkan")]
		[Description("Цвет Tenkan линии.")]
		public Color TenkanColor
		{
			get { return _tenkanColor; }
			set { _tenkanColor = value; }
		}

		private Color _kijunColor = Colors.Blue;

		/// <summary>
		/// Цвет Kijun линии.
		/// </summary>
		[DisplayName("Цвет Kijun")]
		[Description("Цвет Kijun линии.")]
		public Color KijunColor
		{
			get { return _kijunColor; }
			set { _kijunColor = value; }
		}

		private Color _senkouAColor = Colors.SandyBrown;

		/// <summary>
		/// Цвет SenkouA линии.
		/// </summary>
		[DisplayName("Цвет SenkouA")]
		[Description("Цвет SenkouA линии.")]
		public Color SenkouAColor
		{
			get { return _senkouAColor; }
			set { _senkouAColor = value; }
		}

		private Color _senkouBColor = Colors.Thistle;

		/// <summary>
		/// Цвет SenkouA линии.
		/// </summary>
		[DisplayName("Цвет SenkouB")]
		[Description("Цвет SenkouB линии.")]
		public Color SenkouBColor
		{
			get { return _senkouBColor; }
			set { _senkouBColor = value; }
		}

		private Color _chinkouColor = Colors.Green;

		/// <summary>
		/// Цвет Chinkou линии.
		/// </summary>
		[DisplayName("Цвет Chinkou")]
		[Description("Цвет Chinkou линии.")]
		public Color ChinkouColor
		{
			get { return _chinkouColor; }
			set { _chinkouColor = value; }
		}

		/// <summary>
		/// Инициализировать рендерер.
		/// </summary>
		/// <param name="areaName">Название области.</param>
		/// <param name="isIndexed">Индексирована ли область.</param>
		/// <returns>Графические данные.</returns>
		public override IDictionary<IIndicator, ChartIndicatorElement> Init(String areaName, bool isIndexed)
		{
			IndicatorSeries.Clear();

			IndicatorSeries.Add(Indicator.Tenkan, new ChartIndicatorElement
			{
				Indicator = Indicator.Tenkan,
				DrawStyle = ChartIndicatorDrawStyles.Line,
				Color = TenkanColor,
				StrokeThickness = BaseElement.StrokeThickness,
				Title = "Tenkan"
			});

			IndicatorSeries.Add(Indicator.Kijun, new ChartIndicatorElement
			{
				Indicator = Indicator.Kijun,
				DrawStyle = ChartIndicatorDrawStyles.Line,
				Color = KijunColor,
				StrokeThickness = BaseElement.StrokeThickness,
				Title = "Kijun"
			});

			IndicatorSeries.Add(Indicator.SenkouA, new ChartIndicatorElement
			{
				Indicator = Indicator.SenkouA,
				DrawStyle = ChartIndicatorDrawStyles.Band,
				Color = SenkouAColor,
				AdditionalColor = SenkouBColor,
				StrokeThickness = BaseElement.StrokeThickness,
				Title = "SenkouA(B)"
			});

			IndicatorSeries.Add(Indicator.Chinkou, new ChartIndicatorElement
			{
				Indicator = Indicator.Chinkou,
				DrawStyle = ChartIndicatorDrawStyles.Line,
				Color = ChinkouColor,
				StrokeThickness = BaseElement.StrokeThickness,
				Title = "Chinkou"
			});

			return IndicatorSeries;
		}

		/// <summary>
		/// Обработать новые значения.
		/// </summary>
		/// <param name="time">Временная отметка формирования новых данных.</param>
		/// <param name="value">Значения индикатора.</param>
		/// <param name="draw">Метод отрисовки значения на графике.</param>
		/// <returns>Новые значения для отображения на графике.</returns>
		public override IEnumerable<decimal> ProcessValues(DateTime time, ChartIndicatorValue value, DrawHandler draw)
		{
			var newYValues = new List<decimal>();

			if (!value.IsFormed)
			{
				draw(Indicator.Tenkan, 0, double.NaN);
				draw(Indicator.Kijun, 0, double.NaN);
				draw(Indicator.SenkouA, 0, double.NaN, double.NaN);
				draw(Indicator.Chinkou, 0, double.NaN);
			}
			else
			{
				var values = value.GetSimpleValues();

				var tenkanY = values[Indicator.Tenkan].GetValue<decimal>();
				var kijunY = values[Indicator.Kijun].GetValue<decimal>();
				var senkouaY = values[Indicator.SenkouA].GetValue<decimal>();
				var senkoubY = values[Indicator.SenkouB].GetValue<decimal>();
				var chinkouY = values[Indicator.Chinkou].GetValue<decimal>();

				draw(Indicator.Tenkan, 0, (double)tenkanY);
				newYValues.Add(tenkanY);
				
				draw(Indicator.Kijun, 0, (double)kijunY);
				newYValues.Add(kijunY);

				draw(Indicator.SenkouA, 0, (double)senkouaY, (double)senkoubY);
				newYValues.Add(senkouaY);
				newYValues.Add(senkoubY);

				draw(Indicator.Chinkou, 0, double.NaN);
				draw(Indicator.Chinkou, Indicator.Kijun.Length, (double)chinkouY);
				newYValues.Add(chinkouY);
			}

			return newYValues;
		}
	}
Aleksey24 towace
towace
towace Autor

Спасибо! то что надо.