示例#1
0
        private void DrawRegion(BarRegion r, Graphics g, RectangleD worldRect, Rectangle canvasRect)
        {
            double x1 = r.IndexStart.HasValue ? r.IndexStart.Value :
                        r.Start.HasValue ? Chart.CandleRange.GetXCoord(r.Start.Value)
                    : worldRect.Left;
            double x2 = r.IndexEnd.HasValue ? r.IndexEnd.Value :
                        r.End.HasValue ? Chart.CandleRange.GetXCoord(r.End.Value)
                : worldRect.Right;

            if (x2 == x2)
            {
                x1 -= singleBarRegionWidth;
                x2 += singleBarRegionWidth;
            }

            double y1 = r.UpperBound.HasValue ? r.UpperBound.Value : worldRect.Bottom;
            double y2 = r.LowerBound.HasValue ? r.LowerBound.Value : worldRect.Top;
            PointD p1 = Conversion.WorldToScreen(new PointD(x1, y1), worldRect, canvasRect);
            PointD p2 = Conversion.WorldToScreen(new PointD(x2, y2), worldRect, canvasRect);

            if (!DrawAsFrame)
            {
                var color = CustomAlphaChannel ? r.Color : Color.FromArgb(regionAlpha, r.Color);
                using (var brush = new SolidBrush(color))
                {
                    g.FillRectangle(brush, (float)p1.X, (float)p1.Y, (float)p2.X - (float)p1.X,
                                    (float)p2.Y - (float)p1.Y);
                }
            }
            else
            {
                using (var pen = r.MakePen())
                {
                    g.DrawRectangle(pen, (float)p1.X, (float)p1.Y, (float)p2.X - (float)p1.X,
                                    (float)p2.Y - (float)p1.Y);
                }
            }
        }
示例#2
0
        public void BuildSeries(ChartControl chart)
        {
            seriesRSI.Data.Clear();
            seriesBound.data.Clear();
            // границы
            var reg = new BarRegion { Color = Color.Black, UpperBound = 100 - marginPercent, LowerBound = marginPercent };
            seriesBound.data.Add(reg);
            // RSI
            for (var i = 0; i < Period; i++)
                seriesRSI.Data.Add(50);

            var dataCount = GetSourceDataCount();
            for (var i = Period; i < dataCount; i++)
            {
                double sumU = 0, sumD = 0;
                for (var j = 0; j < Period; j++)
                {
                    var delta = GetSourcePrice(i - j)
                                - GetSourcePrice(i - j - 1);
                    if (delta < 0) sumD -= delta;
                    else sumU += delta;
                }
                double RSI;
                if (sumU == sumD && sumU == 0) RSI = 50;
                else if (sumD == 0) RSI = 100;
                else
                    RSI = 100 - 100.0 / (1 + sumU / sumD);
                seriesRSI.Data.Add(RSI);
            }
        }
示例#3
0
        private void DrawRegion(BarRegion r, Graphics g, RectangleD worldRect, Rectangle canvasRect)
        {
            double x1 = r.IndexStart.HasValue ? r.IndexStart.Value :
                    r.Start.HasValue ? Chart.CandleRange.GetXCoord(r.Start.Value)
                    : worldRect.Left;
            double x2 = r.IndexEnd.HasValue ? r.IndexEnd.Value :
                r.End.HasValue ? Chart.CandleRange.GetXCoord(r.End.Value)
                : worldRect.Right;

            if (x2 == x2)
            {
                x1 -= singleBarRegionWidth;
                x2 += singleBarRegionWidth;
            }

            double y1 = r.UpperBound.HasValue ? r.UpperBound.Value : worldRect.Bottom;
            double y2 = r.LowerBound.HasValue ? r.LowerBound.Value : worldRect.Top;
            PointD p1 = Conversion.WorldToScreen(new PointD(x1, y1), worldRect, canvasRect);
            PointD p2 = Conversion.WorldToScreen(new PointD(x2, y2), worldRect, canvasRect);

            if (!DrawAsFrame)
            {
                var color = CustomAlphaChannel ? r.Color : Color.FromArgb(regionAlpha, r.Color);
                using (var brush = new SolidBrush(color))
                {
                    g.FillRectangle(brush, (float) p1.X, (float) p1.Y, (float) p2.X - (float) p1.X,
                                    (float) p2.Y - (float) p1.Y);
                }
            }
            else
            {
                using (var pen = r.MakePen())
                {
                    g.DrawRectangle(pen, (float)p1.X, (float)p1.Y, (float)p2.X - (float)p1.X,
                                    (float)p2.Y - (float)p1.Y);
                }
            }
        }