/// <summary> /// 更新数据到图像 /// </summary> /// <param name="obj"></param> public void UpdateDataToGraph(List <SecurityData> list, bool clear) { if (clear) { DataSource.Clear(); } BarShape barVolume = GetShape("成交量") as BarShape; CandleShape candleShape = GetShape("K线") as CandleShape; int startIndex = DataSource.RowsCount; if (startIndex < 0) { startIndex = 0; } for (int i = 0; i < list.Count; i++) { SecurityData data = list[i]; if (!double.IsNaN(data.close)) { DataSource.Set(data.date, COLUMN_VOLUME, data.volume); int index = DataSource.GetRowIndex(data.date); DataSource.Set2(index, COLUMN_OPEN, data.open); DataSource.Set2(index, COLUMN_HIGH, data.high); DataSource.Set2(index, COLUMN_LOW, data.low); DataSource.Set2(index, COLUMN_CLOSE, data.close); if (data.open > data.close) { DataSource.Set2(index, barVolume.StyleField, 0); DataSource.Set2(index, candleShape.StyleField, 0); DataSource.Set2(index, barVolume.ColorField, System.Drawing.Color.FromArgb(80, 255, 255).ToArgb()); } else { DataSource.Set2(index, barVolume.StyleField, 1); DataSource.Set2(index, candleShape.StyleField, 1); DataSource.Set2(index, barVolume.ColorField, System.Drawing.Color.FromArgb(255, 80, 80).ToArgb()); } } } int indicatorsSize = indicators.Count; for (int i = 0; i < indicatorsSize; i++) { indicators[i].OnCalculate(startIndex); } RefreshGraph(); }
/// <summary> /// 初始化控件 /// </summary> public void InitControl() { indicators.Clear(); RemoveAll(); if (minuteMode) { AllowDrag = false; DataSource.SetColsCapacity(20); IsMinute = true; AutoFillXScale = true; ScrollAddSpeed = true; XFieldText = "日期"; CanMoveShape = true; LeftYScaleWidth = 80; RightYScaleWidth = 80; XScalePixel = 21; mainDiv = AddChartDiv(70); mainDiv.ShowVGrid = true; MinuteLineMax = 0; MinuteLineMin = 0; mainDiv.LeftYScale.ScaleType = YScaleType.EqualRatio; mainDiv.RightYScale.ScaleType = YScaleType.EqualRatio; mainDiv.Title = "分时线"; mainDiv.XScale.Visible = false; List <double> scaleSteps = new List <double>(); scaleSteps.Add(LbCommon.GetDateNum(1970, 1, 1, 10, 0, 0, 0)); scaleSteps.Add(LbCommon.GetDateNum(1970, 1, 1, 10, 30, 0, 0)); scaleSteps.Add(LbCommon.GetDateNum(1970, 1, 1, 11, 0, 0, 0)); scaleSteps.Add(LbCommon.GetDateNum(1970, 1, 1, 11, 30, 0, 0)); scaleSteps.Add(LbCommon.GetDateNum(1970, 1, 1, 13, 30, 0, 0)); scaleSteps.Add(LbCommon.GetDateNum(1970, 1, 1, 14, 0, 0, 0)); scaleSteps.Add(LbCommon.GetDateNum(1970, 1, 1, 14, 30, 0, 0)); mainDiv.XScale.ScaleSteps = scaleSteps; mainDiv.PaddingBottom = 10; mainDiv.PaddingTop = 10; LineShape lineShape = AddLine("分时线", COLUMN_CLOSE, mainDiv); lineShape.LineColor = Color.White; //成交量 volumeDiv = AddChartDiv(30); volumeDiv.LeftYScale.Distance = 60; volumeDiv.Title = "成交量"; volumeDiv.RightYScale.Distance = 60; volumeDiv.XScale.ScaleSteps = scaleSteps; BarShape barShape = AddBar("成交量", COLUMN_VOLUME, volumeDiv); volumeDiv.XScale.Format = "hh:mm"; barShape.Title = ""; barShape.BarStyle = BarStyle.Line; SetBar("成交量", System.Drawing.Color.FromArgb(255, 255, 80), System.Drawing.Color.FromArgb(255, 255, 80)); if (!Program.BlackOrWhite) { mainDiv.ForeColor = Color.Black; mainDiv.BackColor = Color.White; mainDiv.LeftYScale.TipForeColor = Color.White; mainDiv.RightYScale.TipForeColor = Color.White; volumeDiv.LeftYScale.TipForeColor = Color.White; volumeDiv.RightYScale.TipForeColor = Color.White; volumeDiv.XScale.TipForeColor = Color.White; volumeDiv.BackColor = Color.White; mainDiv.BorderColor = Color.Black; volumeDiv.BorderColor = Color.Black; macdDiv.BorderColor = Color.Black; mainDiv.LeftYScale.ForeColor = Color.Black; mainDiv.RightYScale.ForeColor = Color.Black; mainDiv.LeftYScale.ScaleColor = Color.Black; mainDiv.RightYScale.ScaleColor = Color.Black; volumeDiv.LeftYScale.ForeColor = Color.Black; volumeDiv.RightYScale.ForeColor = Color.Black; volumeDiv.LeftYScale.ScaleColor = Color.Black; volumeDiv.RightYScale.ScaleColor = Color.Black; mainDiv.GridColor = Color.Black; volumeDiv.GridColor = Color.Black; lineShape.LineColor = Color.Black; barShape.UpColor = Color.Black; barShape.DownColor = Color.Black; volumeDiv.XScale.ForeColor = Color.Black; volumeDiv.XScale.ScaleColor = Color.Black; } } else { AllowDrag = true; DataSource.SetColsCapacity(20); IsMinute = false; AutoFillXScale = false; ScrollAddSpeed = true; XFieldText = "日期"; CanMoveShape = true; LeftYScaleWidth = 80; RightYScaleWidth = 80; XScalePixel = 11; mainDiv = AddChartDiv(60); mainDiv.Title = "日线"; mainDiv.XScale.Visible = false; mainDiv.PaddingBottom = 10; mainDiv.PaddingTop = 10; //mainDiv.LeftYScale.System = VScaleSystem.Logarithmic; mainDiv.RightYScale.ScaleType = YScaleType.Percent; CandleShape candleShape = AddCandle("K线", COLUMN_OPEN, COLUMN_HIGH, COLUMN_LOW, COLUMN_CLOSE, mainDiv); candleShape.UpColor = Color.FromArgb(255, 80, 80); candleShape.DownColor = Color.FromArgb(80, 255, 255); candleShape.CandleStyle = CandleStyle.CloseLine; candleShape.StyleField = CTableEx.AutoField; candleShape.ColorField = CTableEx.AutoField; dataSource.AddColumn(candleShape.StyleField); dataSource.AddColumn(candleShape.ColorField); IndicatorMovingAverage indBoll = (IndicatorMovingAverage)AddIndicator("MA"); indBoll.SetParam(COLUMN_CLOSE, mainDiv); //成交量 volumeDiv = AddChartDiv(15); volumeDiv.XScale.Visible = false; volumeDiv.LeftYScale.Magnitude = 10000; volumeDiv.RightYScale.Magnitude = 10000; volumeDiv.LeftYScale.Digit = 0; volumeDiv.RightYScale.Digit = 0; BarShape barShape = AddBar("成交量", COLUMN_VOLUME, volumeDiv); barShape.Title = "成交量"; barShape.BarStyle = BarStyle.Bar; barShape.Digit = 0; barShape.StyleField = CTableEx.AutoField; barShape.ColorField = CTableEx.AutoField; dataSource.AddColumn(barShape.StyleField); dataSource.AddColumn(barShape.ColorField); SetBar("成交量", System.Drawing.Color.FromArgb(255, 255, 80), System.Drawing.Color.FromArgb(125, 206, 235)); macdDiv = AddChartDiv(25); macdDiv.XScale.Format = "hh:mm"; div2Indicator = ChangeIndicator(indicatorName); indicators.Add(indBoll); indicators.Add(div2Indicator); if (!Program.BlackOrWhite) { mainDiv.LeftYScale.TipForeColor = Color.White; mainDiv.RightYScale.TipForeColor = Color.White; volumeDiv.LeftYScale.TipForeColor = Color.White; volumeDiv.RightYScale.TipForeColor = Color.White; mainDiv.ForeColor = Color.Black; mainDiv.BackColor = Color.White; volumeDiv.BackColor = Color.White; macdDiv.BackColor = Color.White; mainDiv.BorderColor = Color.Black; volumeDiv.BorderColor = Color.Black; macdDiv.BorderColor = Color.Black; mainDiv.LeftYScale.ForeColor = Color.Black; mainDiv.RightYScale.ForeColor = Color.Black; mainDiv.LeftYScale.ScaleColor = Color.Black; mainDiv.RightYScale.ScaleColor = Color.Black; volumeDiv.LeftYScale.ForeColor = Color.Black; volumeDiv.RightYScale.ForeColor = Color.Black; volumeDiv.LeftYScale.ScaleColor = Color.Black; volumeDiv.RightYScale.ScaleColor = Color.Black; macdDiv.LeftYScale.ForeColor = Color.Black; macdDiv.RightYScale.ForeColor = Color.Black; macdDiv.LeftYScale.ScaleColor = Color.Black; macdDiv.RightYScale.ScaleColor = Color.Black; macdDiv.XScale.ForeColor = Color.Black; macdDiv.XScale.ScaleColor = Color.Black; mainDiv.GridColor = Color.Black; volumeDiv.GridColor = Color.Black; macdDiv.GridColor = Color.Black; candleShape.UpColor = Color.Black; candleShape.DownColor = Color.Black; barShape.UpColor = Color.Black; barShape.DownColor = Color.Black; candleShape.HighTitleColor = Color.Black; candleShape.LowTitleColor = Color.Black; candleShape.CloseTitleColor = Color.Black; candleShape.OpenTitleColor = Color.Black; List <BaseShape> shapes = indBoll.GetShapeList(); for (int i = 0; i < shapes.Count; i++) { BaseShape bShape = shapes[i] as BaseShape; if (bShape is BarShape) { (bShape as BarShape).DownColor = Color.Black; (bShape as BarShape).UpColor = Color.Black; } else if (bShape is LineShape) { (bShape as LineShape).LineColor = Color.Black; } } } } }