コード例 #1
0
        private void drawCandleLine(DrawingContext dc, double highest, double lowest, DrawingObject obj)
        {
            var opens = obj.Vals;
            var closes = obj.Vals1;
            var highs = obj.Vals2;
            var lows = obj.Vals3;
            if (opens == null || closes == null || highs == null || lows == null 
                || opens.Length==0
                || opens.Length != closes.Length || closes.Length != highs.Length || highs.Length != lows.Length)
            {
                return;
            }

            //绘制可视区域的K线
            for (int i = 0; i < drawItemCount; ++i)
            {
                int itemIndex = drawItemStartIndex + i;
                double xoffset = (int)(i * (itemWidth + itemSpace)) + 0.5 + left;
                double yTop = (int)((highest - highs[itemIndex]) / (highest - lowest) * height) + 0.5 + top;

                double yBottom = (int)((highest - lows[itemIndex]) / (highest - lowest) * height) + 0.5 + top;
                double yOpen = (int)((highest - opens[itemIndex]) / (highest - lowest) * height) + 0.5 + top;
                double yClose = (int)((highest - closes[itemIndex]) / (highest - lowest) * height) + 0.5 + top;
                double bodyBottom = yOpen;
                double bodyTop = yClose;

                Color bodyColor = new Color();
                bodyColor.R = 255;
                bodyColor.G = 0;
                bodyColor.B = 0;
                if (opens[itemIndex] > closes[itemIndex])
                {
                    bodyTop = yOpen;
                    bodyBottom = yClose;
                    bodyColor.R = 0;
                    bodyColor.G = 128;
                    bodyColor.B = 0;
                }

                var pen = getPen(0, 0, 0, 1);
                var brush = getBrush(bodyColor.R, bodyColor.G, bodyColor.B);

                //draw top vertical line
                dc.DrawLine(pen, new Point(xoffset + itemWidth / 2, yTop), new Point(xoffset + itemWidth / 2, bodyTop));

                //draw kline body
                double bodyHeight = bodyBottom - bodyTop;
                dc.DrawRectangle(brush, pen, new Rect(xoffset, bodyTop, itemWidth, bodyHeight));

                //draw bottom line.
                dc.DrawLine(pen, new Point(xoffset + itemWidth / 2, bodyBottom), new Point(xoffset + itemWidth / 2, yBottom));
            }


        }
コード例 #2
0
        private void drawZeroVerticalLines(DrawingContext dc, double highest, double lowest, DrawingObject obj)
        {
            if (obj.Type != DrawingObjectType.zVLines)
            {
                return;
            }
            initPart(obj.Part);

            var pen = getPen(0, 0, 255, 1);

            for (var i = 0; i < drawItemCount; ++i)
            {
                var itemIndex = drawItemStartIndex + i;
                var xoffset = (int)(i * (itemWidth + itemSpace)) + 0.5 + left;
                var yoffset = height - (int)((obj.Vals[itemIndex] + highest) / (2 * highest) * height) + 0.5 + top;
                if (itemIndex > 0)
                {
                    if (obj.Vals[itemIndex] * obj.Vals[itemIndex - 1] < 0)
                    {
                        if (obj.Vals[itemIndex - 1] < 0)
                        {
                            dc.DrawLine(getPen(255, 0, 0, 2.5), new Point(xoffset, top + height / 2 - 4), new Point(xoffset, top + height / 2 + 4));
                        }
                        if (obj.Vals[itemIndex - 1] > 0)
                        {
                            dc.DrawLine(getPen(0, 128, 0, 2.5), new Point(xoffset, top + height / 2 - 4), new Point(xoffset, top + height / 2 + 4));
                        }

                        continue;
                    }

                }

                pen.Thickness = 1;
                dc.DrawLine(pen, new Point(xoffset, top + height / 2 + 0.5), new Point(xoffset, yoffset));

            }
        }
コード例 #3
0
        private void drawVLines(DrawingContext dc, double highest, double lowest, DrawingObject obj)
        {
            if (obj.Type != DrawingObjectType.vLines)
            {
                return;
            }
            var vals = obj.Vals;
            for (var i = 0; i < drawItemCount; ++i)
            {
                int itemIndex = drawItemStartIndex + i;
                double xoffset = (int)(i * (itemWidth + itemSpace)) + 0.5 + left;
                double yoffset = (1.0 - vals[itemIndex] / highest) * height + 0.5 + top;

                Color color = obj.Color;

                if (obj.drawItemHandler != null)
                {
                    //very slow.
                    /*
                    JSEngine.Inst.call(obj.drawItemHandler,priceFile.Opens[itemIndex],
                        priceFile.Closes[itemIndex],
                        priceFile.Highs[itemIndex],
                        priceFile.Lows[itemIndex],
                        priceFile.Vols[itemIndex],
                        priceFile.Amounts[itemIndex]);
                     * */
                }

                var pen = getPen(color.R, color.G, color.B, 1);
                if (priceList.Opens[itemIndex] > priceList.Closes[itemIndex])
                {
                    pen = getPen(255, 0, 0, 1);
                }
                else
                {
                    pen = getPen(0, 128, 0, 1);
                }

                
                dc.DrawLine(pen, new Point(xoffset + itemWidth / 2, yoffset), new Point(xoffset + itemWidth / 2, top + height));

            }

        }
コード例 #4
0
        private void drawObj(DrawingContext dc,double highest,double lowest,DrawingObject obj)
        {
            initPart(obj.Part);
            switch (obj.Type)
            {
                case DrawingObjectType.Line:
                    drawLine(dc, highest, lowest, obj);
                    break;
                case DrawingObjectType.zVLines:
                    drawZeroVerticalLines(dc, highest, lowest, obj);
                    break;
                case DrawingObjectType.CandleLine:
                    drawCandleLine(dc, highest, lowest, obj);
                    break;
                case DrawingObjectType.vLines:
                    drawVLines(dc, highest, lowest, obj);
                    break;
            }
           

        }
コード例 #5
0
        internal void addDrawingObj(string id, double[] points, int part, Color c, double thickness,DrawingObjectType type )
        {
            DrawingObject obj =new DrawingObject()
            {
                Vals = points,
                Part = part,
                Color = c,
                Thickness = thickness,
                Type=type,
            };

            if (objects.ContainsKey(id))
            {
                objects[id] = obj;
                return;
            }

           
            objects.Add(id,obj);

        }
コード例 #6
0
        //
        internal void addKLineObj(string id,int part, double[] open, double[] close, double[] high, double[] low)
        {
            DrawingObject obj = new DrawingObject()
            {
                Type=DrawingObjectType.CandleLine,
                Vals=open,
                Vals1=close,
                Vals2=high,
                Vals3=low
            };

            if (objects.ContainsKey(id))
            {
                objects[id] = obj;
                return;
            }

            objects.Add(id, obj);

        }
コード例 #7
0
        private void drawLine(DrawingContext dc, double highest, double lowest, DrawingObject obj)
        {
            var pen = getPen(obj.Color.R, obj.Color.G, obj.Color.B, obj.Thickness);

            PathFigure pfFast = new PathFigure();
            PathGeometry pgFast = new PathGeometry();
            pgFast.Figures.Add(pfFast);


            for (var i = 0; i < drawItemCount; ++i)
            {
                var itemIndex = drawItemStartIndex + i;
                var xoffset = (int)(i * (itemWidth + itemSpace)) + 0.5 + left;
                var yoffset = (int)((highest - obj.Vals[itemIndex]) / (highest - lowest) * height) + 0.5 + top;

                if (i == 0)
                {
                    pfFast.StartPoint = new Point(xoffset, yoffset);
                }
                else
                {
                    pfFast.Segments.Add(new LineSegment(new Point(xoffset, yoffset), true));

                }
            }
            dc.DrawGeometry(Brushes.Transparent, pen, pgFast);

        }