예제 #1
0
 /// <summary> Вызываем событие активной свечки </summary>
 /// <param name="candle"></param>
 public void MoveVerticalActiveCandle(Candles.DataCandle candle)
 {
     if (!this.OnMoveVerticalCandle.IsNull())
     {
         this.OnMoveVerticalCandle(candle);
     }
 }
예제 #2
0
        /// <summary>Отрисовка перекрестья</summary>
        /// <param name="coord"></param>
        void PaintCrossLines(Point coord, Candles.DataCandle candle)
        {
            if (candle.IsNull())
            {
                return;
            }
            string d    = candle.Candle.Time.Day.ToString();
            string m    = candle.Candle.Time.Month.ToString();
            string y    = candle.Candle.Time.Year.ToString();
            string min  = candle.Candle.Time.Minute.ToString();
            string hour = candle.Candle.Time.Hour.ToString();
            string time = (d.Length < 2 ? '0' + d : d) + "." + (m.Length < 2 ? '0' + m : m) + "." + y + " " +
                          (hour.Length < 2 ? '0' + hour : hour) + ":" + (min.Length < 2 ? '0' + min : min) + " (" + candle.Description + ")";
            //GraphicShape.PaintLine(this.Canvas, new Point(coord.X, 0), new Point(coord.X, 1000), Color.Black);
            decimal priceY = GraphicShape.GetValueFromCoordinate(this.RectAllTop.Height, this.MaxPrice, this.MinPrice, coord.Y, this.PanelPrices.CountFloat);

            GraphicShape.PaintVLine(this.Canvas, this.RectAllTop, time, new Point(coord.X, 0), new Point(coord.X, this.RectAllTop.Height), Color.Black);
            GraphicShape.PaintHLine(this.Canvas, this.RectAllTop, priceY, this.MaxPrice, this.MinPrice, Color.Black);
        }
예제 #3
0
        /// <summary> Рисует объемы по активной свечке </summary>
        private void PaintHorVolByCandle(Graphics canvas, Candles.DataCandle activeCandle, Point crossLines)
        {
            if (activeCandle.Candle.HorVolumes.HVolCollection.Count == 0)
            {
                return;
            }
            Rectangle rectPaint = new Rectangle();

            rectPaint.X      = activeCandle.TailCoord.High.X + 1;
            rectPaint.Width  = 30 * 2;
            rectPaint.Y      = activeCandle.TailCoord.High.Y;
            rectPaint.Height = activeCandle.TailCoord.Low.Y - rectPaint.Y;

            long MaxVol = activeCandle.Candle.HorVolumes.HVolCollection.CollectionArray.Max(e => e.VolBuy + e.VolSell);
            long MinVol = 0;

            SolidBrush solidBrush = new SolidBrush(Color.LightGray);

            canvas.FillRectangle(solidBrush, rectPaint);
            activeCandle.Candle.HorVolumes.HVolCollection.CollectionArray.ForEach <MarketObject.ChartVol>((hv) =>
            {
                int y  = GraphicShape.GetCoordinate(this.RectAllTop.Height, this.MaxPrice, this.MinPrice, hv.Price);
                int x2 = (int)GraphicShape.GetCoordinate(rectPaint.Width, MaxVol, MinVol, hv.VolBuy + hv.VolSell);
                var p1 = new Point(rectPaint.X, y);
                var p2 = new Point(rectPaint.X + rectPaint.Width - x2, y);
                if (hv.VolBuy + hv.VolSell == MaxVol)
                {
                    GraphicShape.PaintText(canvas, MaxVol.ToString(), activeCandle.TailCoord.High.X, activeCandle.TailCoord.High.Y - 11, Color.Blue);
                }
                if (crossLines.Y + 5 > y && crossLines.Y - 5 < y)
                {
                    decimal priceY = GraphicShape.GetValueFromCoordinate(this.RectAllTop.Height, this.MaxPrice, this.MinPrice, crossLines.Y, this.PanelPrices.CountFloat);
                    if (hv.Price == priceY)
                    {
                        activeCandle.Description = (hv.VolBuy + hv.VolSell).ToString();
                    }
                }
                GraphicShape.PaintLine(canvas, p1, p2, Color.Blue, 2);
            });
        }
예제 #4
0
 /// <summary> Инициализируем внутренние события </summary>
 private void InitEvents()
 {
     //Перед отриосвкой свечей
     PanelCandels.OnBeforePaintCandle += (emptyCandle) =>
     {
         this.ActiveCandle = null;
     };
     //Отрисовка одной свечи
     PanelCandels.OnPaintCandle += (candle) =>
     {
         if (candle.Body.X <= this.CrossLine.X && candle.Body.X + candle.Body.Width >= this.CrossLine.X)
         {
             this.ActiveCandle = candle;
         }
         if (candle.Index == this.CountCandleShowHVol)
         {
             Point p1 = new Point()
             {
                 X = candle.Body.X, Y = candle.PaintRect.Y
             };
             Point p2 = new Point()
             {
                 X = candle.Body.X, Y = candle.PaintRect.Y + candle.PaintRect.Height
             };
             GraphicShape.PaintVLine(this.Canvas, candle.PaintRect, candle.Index.ToString(), p1, p2, Color.Blue, 2);
         }
     };
     //Отрисовка свечей завершена
     PanelCandels.OnPaintedCandles += () =>
     {
         if (!this.ActiveCandle.IsNull())
         {
             this.PaintHorVolByCandle(this.Canvas, ActiveCandle, this.CrossLine);
             this.PanelCandels.MoveVerticalActiveCandle(this.ActiveCandle);
         }
         this.PaintCrossLines(this.CrossLine, ActiveCandle);
     };
 }