public DescriptiveStatisticsDataPoints Calculate(SecurityPrice price)
 {
     if (price != null)
     {
         if (price.Index > Period)
         {
             var previousPeriods = price.GetPreviousPrices((int)Period);
             if (previousPeriods != null)
             {
                 var stats = new DescriptiveStatisticsDataPoints(previousPeriods.Select(p => p.Price));
                 return(stats);
             }
             else
             {
                 return(null);
             }
         }
         else
         {
             return(null);
         }
     }
     else
     {
         return(null);
     }
 }
Example #2
0
        public override bool Identify(SecurityPrice price)
        {
            if (price != null && price.Index > 15)
            {
                IStatisticsCalculator calc = new StatisticCalculator(15);

                var dataPoints = calc.Calculate(price);
                //   Console.WriteLine(dataPoints.SU);
                if (price.Price < dataPoints.Mean - Math.Abs(dataPoints.StandardDeviation) && dataPoints.SU < _suThreshold)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Example #3
0
 public abstract bool Identify(SecurityPrice price);
        public override bool Identify(SecurityPrice price)
        {
            if (price.Index > MeanValue == false)
            {
                return(false);
            }

            IStatisticsCalculator calc = new StatisticCalculator(MeanValue);
            var calculation            = calc.Calculate(price);

            var currentSU = calculation.SU;

            var currentStdev = calculation.StandardDeviation;
            var currentMean  = calculation.Mean;
            var currentPrice = price.Price;

            CurrentMean  = currentMean;
            CurrentStDev = currentStdev;
            CurrentSU    = currentSU;

            double bottomBand = 0;
            double upperBand  = 0;



            //if (currentSU < 0)
            //{
            bottomBand       = currentMean - Math.Abs(currentStdev);
            CurrentLowerBand = bottomBand;
            //}
            //else if (currentSU > 0)
            //{
            upperBand        = currentMean + Math.Abs(currentStdev);
            CurrentUpperBand = upperBand;
            //}

            if (PriceLocation == PriceLocationOnChart.PriceIsBelowLowerBand)
            {
                if (currentSU >= (LowerStandardUnitLimit) * -1)
                {
                    return(false);
                }
            }

            if (PriceLocation == PriceLocationOnChart.PriceIsAboveUpperBand)
            {
                if (currentSU <= UpperStandardUnitLimit)
                {
                    return(false);
                }
            }



            if (PriceLocation == PriceLocationOnChart.PriceIsBelowLowerBand)
            {
                if (currentPrice < bottomBand)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            if (PriceLocation == PriceLocationOnChart.PriceIsAboveUpperBand)
            {
                if (currentPrice > upperBand)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else if (PriceLocation == PriceLocationOnChart.PriceIsBetweenLowerAndUpperBands)
            {
                if (currentPrice < upperBand && currentPrice > bottomBand)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(false);
        }