private List <SupportAndResistanceValue> FindGaps(ref List <double> volumeProfile, ref List <double> priceChain)
        {
            List <SupportAndResistanceValue> gapSR = new List <SupportAndResistanceValue>();

            if (!volumeProfile.Exists(d => d.AlmostEqualRelative(0.0, AbsoluteError)))
            {
                return(gapSR);
            }

            List <int> gapUp, gapDown;

            _data.FindGaps(out gapUp, out gapDown);

            gapSR.AddRange(gapUp.Select(j =>
            {
                double val    = _data.Low[j];
                DateTime date = _data.Date[j];
                SupportAndResistanceValue srVal = new SupportAndResistanceValue(val, date, SupportAndResistanceValueType.GapSupport);
                return(srVal);
            }));

            gapSR.AddRange(gapDown.Select(j =>
            {
                double val    = _data.High[j];
                DateTime date = _data.Date[j];
                SupportAndResistanceValue srVal = new SupportAndResistanceValue(val, date, SupportAndResistanceValueType.GapResistance);
                return(srVal);
            }));

            int i = 0;

            while (i < volumeProfile.Count)
            {
                if (volumeProfile[i].AlmostEqualRelative(0.0, AbsoluteError))
                {
                    volumeProfile.RemoveAt(i);
                    priceChain.RemoveAt(i);
                }
                else
                {
                    i++;
                }
            }
            return(gapSR);
        }