/// <summary> /// прорисовать паттерн на его индивидуальном чарте /// </summary> private void PaintSinglePattern(IPattern pattern, ChartPainter chart) { if (chart.GetChart().InvokeRequired) { chart.GetChart().Invoke(new Action <IPattern, ChartPainter>(PaintSinglePattern), pattern, chart); return; } chart.ClearDataPointsAndSizeValue(); chart.ClearSeries(); if (pattern.Type == PatternType.Candle) { chart.PaintSingleCandlePattern(((PatternCandle)pattern).GetInCandle()); } if (pattern.Type == PatternType.Volume) { chart.PaintSingleVolumePattern(((PatternVolume)pattern).GetInCandle()); } if (pattern.Type == PatternType.Indicators) { PatternIndicators pat = (PatternIndicators)pattern; for (int i = 0; pat.Indicators != null && i < pat.Indicators.Count; i++) { if (chart.IndicatorIsCreate(pat.Indicators[i].Name + "0") == false) { chart.CreateSeries(chart.GetChartArea(pat.Indicators[i].NameArea), pat.Indicators[i].TypeIndicator, pat.Indicators[i].NameSeries + "0"); } chart.ProcessIndicator(pat.Indicators[i]); } } }
/// <summary> /// Пересобрать контекстное меню для чарта /// </summary> private void ReloadContext() { try { List <MenuItem> menuRedact = null; List <MenuItem> menuDelete = null; if (_indicatorsCandles != null) { menuRedact = new List <MenuItem>(); menuDelete = new List <MenuItem>(); for (int i = 0; i < _indicatorsCandles.Count; i++) { menuRedact.Add(new MenuItem(_indicatorsCandles[i].GetType().Name)); menuRedact[menuRedact.Count - 1].Click += RedactContextMenu_Click; if (_indicatorsCandles[i].CanDelete) { menuDelete.Add(new MenuItem(_indicatorsCandles[i].GetType().Name)); menuDelete[menuDelete.Count - 1].Click += DeleteContextMenu_Click; } } } if (ChartCandle.GetChartArea("TradeArea") != null) { if (menuRedact == null) { menuRedact = new List <MenuItem>(); menuDelete = new List <MenuItem>(); } menuDelete.Add(new MenuItem("Trades")); menuDelete[menuDelete.Count - 1].Click += DeleteContextMenu_Click; } List <MenuItem> items; items = new List <MenuItem>(); items.Add(new MenuItem("Отрисовка чарта", new MenuItem[] { new MenuItem("Цветовая схема", new MenuItem[] { new MenuItem("Тёмная"), new MenuItem("Светлая") }), new MenuItem("Фигура сделки", new MenuItem[] { new MenuItem("Ромб"), new MenuItem("Кружок"), new MenuItem("Треугольник(тормозит при дебаггинге)") }), new MenuItem("Размер фигуры", new MenuItem[] { new MenuItem("6"), new MenuItem("10"), new MenuItem("14") }) } )); items[items.Count - 1].MenuItems[0].MenuItems[0].Click += ChartBlackColor_Click; items[items.Count - 1].MenuItems[0].MenuItems[1].Click += ChartWhiteColor_Click; items[items.Count - 1].MenuItems[1].MenuItems[0].Click += ChartRombToPosition_Click; items[items.Count - 1].MenuItems[1].MenuItems[1].Click += ChartCircleToPosition_Click; items[items.Count - 1].MenuItems[1].MenuItems[2].Click += ChartTriangleToPosition_Click; items[items.Count - 1].MenuItems[2].MenuItems[0].Click += ChartMinPointSize_Click; items[items.Count - 1].MenuItems[2].MenuItems[1].Click += ChartMiddlePointSize_Click; items[items.Count - 1].MenuItems[2].MenuItems[2].Click += ChartMaxPointSize_Click; items.Add(new MenuItem("Скрыть области")); items[items.Count - 1].Click += ChartHideIndicators_Click; items.Add(new MenuItem("Показать области")); items[items.Count - 1].Click += ChartShowIndicators_Click; if (menuRedact != null) { items.Add(new MenuItem("Редактировать индикаторы", menuRedact.ToArray())); items.Add(new MenuItem("Удалить индикатор", menuDelete.ToArray())); } items.Add(new MenuItem("Добавить индикатор")); items[items.Count - 1].Click += CreateIndicators_Click; ContextMenu menu = new ContextMenu(items.ToArray()); ChartCandle.GetChart().ContextMenu = menu; } catch (Exception error) { SendErrorMessage(error); } }
/// <summary> /// пересобрать контекстное меню для чарта /// </summary> private void ReloadContext() { try { List <MenuItem> menuRedact = null; List <MenuItem> menuDelete = null; if (_indicatorsCandles != null) { menuRedact = new List <MenuItem>(); menuDelete = new List <MenuItem>(); for (int i = 0; i < _indicatorsCandles.Count; i++) { menuRedact.Add(new MenuItem(_indicatorsCandles[i].GetType().Name)); menuRedact[menuRedact.Count - 1].Click += RedactContextMenu_Click; if (_indicatorsCandles[i].CanDelete) { menuDelete.Add(new MenuItem(_indicatorsCandles[i].GetType().Name)); menuDelete[menuDelete.Count - 1].Click += DeleteContextMenu_Click; } } } if (_chartCandle.GetChartArea("TradeArea") != null) { if (menuRedact == null) { menuRedact = new List <MenuItem>(); menuDelete = new List <MenuItem>(); } menuDelete.Add(new MenuItem("Trades")); menuDelete[menuDelete.Count - 1].Click += DeleteContextMenu_Click; } List <MenuItem> items; items = new List <MenuItem>(); items.Add(new MenuItem("Цвет чарта", new MenuItem[] { new MenuItem("Тёмный"), new MenuItem("Светлый") })); items[items.Count - 1].MenuItems[0].Click += ChartBlackColor_Click; items[items.Count - 1].MenuItems[1].Click += ChartWhiteColor_Click; items.Add(new MenuItem("Частота обновления", new MenuItem[] { new MenuItem("Максимально часто"), new MenuItem("Раз в секунду(оптимально)"), new MenuItem("Раз в пять секунд") })); items[items.Count - 1].MenuItems[0].Click += ChartReloadMaxFast_Click; items[items.Count - 1].MenuItems[1].Click += ChartReloadOneSecond_Click; items[items.Count - 1].MenuItems[2].Click += ChartReloadFiveSeconds_Click; items.Add(new MenuItem("Скрыть области")); items[items.Count - 1].Click += ChartHideIndicators_Click; items.Add(new MenuItem("Показать области")); items[items.Count - 1].Click += ChartShowIndicators_Click; if (menuRedact != null) { items.Add(new MenuItem("Редактировать индикаторы", menuRedact.ToArray())); items.Add(new MenuItem("Удалить индикатор", menuDelete.ToArray())); } items.Add(new MenuItem("Добавить индикатор")); items[items.Count - 1].Click += CreateIndicators_Click; ContextMenu menu = new ContextMenu(items.ToArray()); _chartCandle.GetChart().ContextMenu = menu; // menu.Show(_chartCandle.GetChart(), ((MouseEventArgs)e).Location); } catch (Exception error) { SendErrorMessage(error); } }