Пример #1
0
        protected override void CalculateFor(int current)
        {
            HistoricalPriceVolumeEntry entry = HistoricalData.Items[current];
            //            int current = i + 1;

            DateTime date = entry.Date;
            //            int back = current - Period;
            //            back = back < 0 ? 0 : back;

            //            List<HistoricalPriceVolumeEntry> range = HistoricalData.GetPrevAsList(current, BeginCalculationOffset);
            List <HistoricalPriceVolumeEntry> range = GetPrevRange();

            int dayHigh = IndicatorUtils.GetHighestId(range.Select(e => e.High));
            //            int daysSinceHigh = range.Count - dayHigh;
            decimal aroonUp = 100 * (BeginCalculationOffset - dayHigh) / (decimal)BeginCalculationOffset;

            int dayLow = IndicatorUtils.GetLowestId(range.Select(e => e.Low));
            //            int daysSinceLow = range.Count - dayLow;
            decimal aroonDown = 100 * (BeginCalculationOffset - dayLow) / (decimal)BeginCalculationOffset;

            //            Debug.WriteLine("");
            //            Debug.WriteLine($"Date: {date.ToString("d")}");
            //            Debug.WriteLine($"Up: {aroonUp}");
            //            Debug.WriteLine($"Down: {aroonDown}");

            _upItems.Add(new TechnicalIndicatorItem(date, aroonUp));
            _downItems.Add(new TechnicalIndicatorItem(date, aroonDown));
        }
Пример #2
0
        public void Calculate(HistoricalPriceVolume data)
        {
            List <HistoricalPriceVolumeEntry> graph = data.Items;

            for (int i = Period; i < graph.Count; i++)
            {
                HistoricalPriceVolumeEntry entry = graph[i];
                int current = i + 1;

                DateTime date = entry.Date;
                int      back = current - Period;
                back = back < 0 ? 0 : back;

                List <HistoricalPriceVolumeEntry> range = graph.GetRange(i - Period, Period + 1);

                int     dayHigh       = IndicatorUtils.GetHighestId(range.Select(e => e.High));
                int     daysSinceHigh = range.Count - dayHigh;
                decimal aroonUp       = 100 * (Period - daysSinceHigh) / (decimal)Period;

                int     dayLow       = IndicatorUtils.GetLowestId(range.Select(e => e.Low));
                int     daysSinceLow = range.Count - dayLow;
                decimal aroonDown    = 100 * (Period - daysSinceLow) / (decimal)Period;

                Debug.WriteLine("");
                Debug.WriteLine($"Date: {date.ToString("d")}");
                Debug.WriteLine($"Up: {aroonUp}");
                Debug.WriteLine($"Down: {aroonDown}");

                AroonGraph.Add(date, new[] { aroonUp, aroonDown });
            }
        }
        /// <summary>
        /// Gets the value.
        /// </summary>
        /// <returns></returns>
        public override IEnumerable <double> Update(Period period, bool normalize = true)
        {
            var ma_20       = Ma20.Update(period, false).First();
            var two_std_dev = 2 * IndicatorUtils.StandardDeviation(Ma20.Periods.Select(p => p.Close));

            var upperBand = period.Close + two_std_dev;
            var lowerBand = period.Close - two_std_dev;

            Value = new double[3] {
                upperBand, ma_20, lowerBand
            };

            return(normalize ? Value.Select(v => Normalizers.Price.Normalize(v)) : Value);
        }
Пример #4
0
        /// <summary>
        /// Gets the value.
        /// </summary>
        /// <returns></returns>
        protected override double AveragePeriods()
        {
            if (Periods.Count < Size)
            {
                return(0.0);
            }

            var period = Periods.Last();

            if (PreviousEMA == 0.0)
            {
                PreviousEMA = base.AveragePeriods();
            }

            PreviousEMA = IndicatorUtils.EMA(period.Close, PreviousEMA, Multiplier);

            return(PreviousEMA);
        }
Пример #5
0
        /// <summary>
        /// Gets the value.
        /// </summary>
        /// <returns></returns>
        public override IEnumerable <double> Update(Period period, bool normalize = true)
        {
            var adx     = 0.0;
            var plusDI  = 0.0;
            var minusDI = 0.0;

            if (PreviousPeriod != null)
            {
                var upMove   = period.High - PreviousPeriod.High;
                var downMove = period.Low - PreviousPeriod.Low;

                var plusDM  = upMove > downMove && upMove > 0.0 ? upMove : 0.0;
                var minusDM = downMove > upMove && downMove > 0.0 ? downMove : 0.0;

                var atr            = Atr.Update(period).First();
                var plusDMOverATR  = atr != 0.0 ? plusDM / atr : 0.0;
                var minusDMOverATR = atr != 0.0 ? minusDM / atr : 0.0;

                PreviousEMAPlusDI  = IndicatorUtils.EMA(plusDMOverATR, PreviousEMAPlusDI, Multiplier);
                PreviousEMAMinusDI = IndicatorUtils.EMA(minusDMOverATR, PreviousEMAMinusDI, Multiplier);

                plusDI  = 100 * PreviousEMAPlusDI;
                minusDI = 100 * PreviousEMAMinusDI;

                var val = (plusDI + minusDI) != 0.0 ? Math.Abs((plusDI - minusDI) / (plusDI + minusDI)) : 0.0;
                PreviousEmaADX = IndicatorUtils.EMA(val, PreviousEmaADX, Multiplier);

                adx = 100 * PreviousEmaADX;
            }

            PreviousPeriod = period;

            Value = new double[3] {
                adx, plusDI, minusDI
            };

            return(normalize ? Value.Select(v => Normalizers.DMI.Normalize(v)) : Value);
        }