Пример #1
0
        /// <summary>
        /// Рисует блок состоящий из нескольких свечей
        /// </summary>
        /// <param name="prepHorV"></param>
        /// <param name="max"></param>
        /// <param name="countInBlock"></param>
        private void PaintOneBlock(PrepareHorVol prepHorV, Chart max, int countInBlock)
        {
            var canvas        = Panel.GetGraphics;
            var canvasOnlyVol = PanelVolume.GetGraphics;

            if (prepHorV.RectBlock.Width >= MIN_WIDTH_FOR_LAYBORDER)
            {
                //рисует прямоугольник выделяющий период
                var rectVol = new RectDraw();
                rectVol.ColorFill   = ColorLayVol;
                rectVol.ColorBorder = ColorLayBorder;
                rectVol.Paint(canvas, prepHorV.RectBlock.X, prepHorV.RectBlock.Y,
                              prepHorV.RectBlock.Width, prepHorV.RectBlock.Height);

                var textMax = new TextDraw();
                textMax.Color = Color.Black;
                var text = "max:" + prepHorV.MaxVol.ToString();
                var size = textMax.GetSizeText(canvas, text);
                textMax.Paint(canvas, text, prepHorV.RectBlock.X, prepHorV.RectBlock.Y - size.Height);
            }

            prepHorV.HorVolumes.ToArray().ForEach <ChartFull>((hv) =>
            {
                this.PaintLineHVol(canvas, prepHorV.RectBlock, max, new Chart(), hv);
                if (PaintOnlyFirstBlock)
                {
                    this.PaintLineHVol(canvasOnlyVol, PanelVolume.Rect.Rectangle, max, new Chart(), hv, Color.Blue);
                }
            });
        }
Пример #2
0
        /// <summary>
        /// Получает информацию по объемам текущей свечки
        /// </summary>
        /// <param name="crossLine"></param>
        /// <param name="activeCandle"></param>

        /*public void GetValueVolume(Point crossLine, GCandles.CandleInfo activeCandle)
         * {
         *  decimal priceY = GMath.GetValueFromCoordinate(Panel.Rect.Height, Panel.Params.MaxPrice, Panel.Params.MinPrice, crossLine.Y, Panel.Params.CountFloat);
         *  Curr
         *  var hv = activeCandle.Candle.GetHorVolumes().HVolCollection.ToArray().FirstOrDefault(v => v.Price == priceY);
         *  if (hv.NotIsNull())
         *  {
         *      if (priceY == hv.Price)
         *      {
         *          if (hv.Price == priceY) activeCandle.Description = (hv.VolBuy + hv.VolSell).ToString();
         *          activeCandle.CurHorVolume = new ChartFull() { Price = priceY, VolBuy = hv.VolBuy, VolSell = hv.VolSell };
         *      }
         *  }
         * }*/
        /// <summary>
        /// Обработчик каждой свечки
        /// </summary>
        /// <param name="dataCandle"></param>
        public void EachCandle(CandleInfo dataCandle)
        {
            if (dataCandle.Index == 0)
            {
                PrepDataHorVol            = new PrepareHorVol();
                PrepDataHorVol.HorVolumes = new HVolume();

                if (activeCandle2.IsNull())
                {
                    activeCandle2            = new SelectCandle();
                    activeCandle2.dataCandle = dataCandle;
                }
            }
            if (activeCandle1.NotIsNull() && activeCandle2.NotIsNull() && CurrTimeFrame.NotIsNull())
            {
                if (dataCandle.Index <= activeCandle1.dataCandle.Index && dataCandle.Index >= activeCandle2.dataCandle.Index)
                {
                    var hVol = CurrTimeFrame.HVolumes.GetCandle(dataCandle.Candle.Time);
                    if (hVol.NotIsNull())
                    {
                        foreach (var curVol in hVol.ToArray())
                        {
                            if (curVol.Price < Panel.Params.MaxPrice && curVol.Price > Panel.Params.MinPrice)
                            {
                                PrepDataHorVol.HorVolumes.Add(curVol.Price, curVol.VolBuy, curVol.VolSell);
                            }
                        }
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Рисование обьема по каждой свечке
        /// </summary>
        /// <param name="countInBlock"></param>
        public void PaintHorVolEachBlock(int countInBlock = 1, bool isCollection = false)
        {
            lock (_lockPaint)
            {
                Panel.Clear();
                PanelVolume.Clear();
                if (countInBlock <= 0)
                {
                    return;
                }
                List <PrepareHorVol> preDataHVol = new List <PrepareHorVol>();
                var CurrentHVol = new PrepareHorVol();
                CurrentHVol.HorVolumes = new HVolume();
                preDataHVol.Add(CurrentHVol);

                var list   = this.CollectionCandles.ToArray();
                var maxAll = new Chart();

                if (list.NotIsNull() && list.Count() > 0)
                {
                    int indexer = 0;
                    int steper  = countInBlock;
                    if (isCollection)
                    {
                        if (CollectionCandleInBlocks.Count > 0)
                        {
                            steper = CollectionCandleInBlocks.ElementAt(indexer) + 1;
                        }
                        else
                        {
                            return;
                        }
                    }

                    /* foreach (var can in list)
                     * {
                     *   if (can.NotIsNull())
                     *   {
                     *       foreach (var curVol in can.Candle.GetHorVolumes().HVolCollection.ToArray())
                     *       {
                     *           CurrentHVol.HorVolumes.AddVolume(curVol.Price, curVol.VolBuy, true);
                     *           CurrentHVol.HorVolumes.AddVolume(curVol.Price, curVol.VolSell, false);
                     *           CurrentHVol.SumBuyVol += curVol.VolBuy;
                     *           CurrentHVol.SumSellVol += curVol.VolSell;
                     *       }
                     *
                     *       CurrentHVol.RectBlock.X = CurrentHVol.RectBlock.X > can.Body.X || CurrentHVol.RectBlock.X == 0
                     *           ? can.Body.X : CurrentHVol.RectBlock.X;
                     *       CurrentHVol.RectBlock.Y = CurrentHVol.RectBlock.Y > can.TailCoord.High.Y || CurrentHVol.RectBlock.Y == 0
                     *           ? can.TailCoord.High.Y : CurrentHVol.RectBlock.Y;
                     *       CurrentHVol.RectBlock.Width = CurrentHVol.RectBlock.Width < (can.Body.X + can.Body.Width) || CurrentHVol.RectBlock.Width == 0
                     *           ? (can.Body.X + can.Body.Width) : CurrentHVol.RectBlock.Width;
                     *       CurrentHVol.RectBlock.Height = CurrentHVol.RectBlock.Height < can.TailCoord.Low.Y || CurrentHVol.RectBlock.Height == 0
                     *           ? can.TailCoord.Low.Y : CurrentHVol.RectBlock.Height;
                     *   }
                     *   steper--;
                     *   if (steper <= 0)
                     *   {
                     *       CurrentHVol.MaxElem = CurrentHVol.HorVolumes.MaxVolume;
                     *       CurrentHVol.MinElem = CurrentHVol.HorVolumes.MinVolume;
                     *
                     *       if (maxAll.Volume < CurrentHVol.MaxVol)
                     *       {
                     *           maxAll = CurrentHVol.MaxElem;
                     *       }
                     *       CurrentHVol.LastCandle = can;
                     *
                     *       indexer++;
                     *       steper = countInBlock;
                     *       if (isCollection)
                     *       {
                     *           if (indexer >= CollectionCandleInBlocks.Count)
                     *           {
                     *               break;
                     *           }
                     *           steper = CollectionCandleInBlocks.ElementAt(indexer) - CollectionCandleInBlocks.ElementAt(indexer - 1);
                     *       }
                     *       CurrentHVol = new PrepareHorVol();
                     *       CurrentHVol.HorVolumes = new HVolume();
                     *       preDataHVol.Add(CurrentHVol);
                     *   }
                     * }*/
                }
                PaintOnlyFirstBlock = true;
                foreach (var elVol in preDataHVol)
                {
                    RectangleF rectPaint = new RectangleF();
                    rectPaint.X      = elVol.RectBlock.X;
                    rectPaint.Y      = elVol.RectBlock.Y;
                    rectPaint.Width  = elVol.RectBlock.Width - elVol.RectBlock.X;
                    rectPaint.Height = elVol.RectBlock.Height - elVol.RectBlock.Y;
                    elVol.RectBlock  = rectPaint;

                    this.PaintOneBlock(elVol, maxAll, countInBlock);
                    PaintOnlyFirstBlock = false;
                }
            }
        }