// SIMPLE MOVING AVERAGE
        public static IEnumerable <ChaikinOscResult> GetChaikinOsc(
            IEnumerable <Quote> history,
            int fastPeriod = 3,
            int slowPeriod = 10)
        {
            // clean quotes
            history = Cleaners.PrepareHistory(history);

            // check parameters
            ValidateChaikinOsc(history, fastPeriod, slowPeriod);

            // initialize
            List <ChaikinOscResult> results    = new List <ChaikinOscResult>();
            IEnumerable <AdlResult> adlResults = GetAdl(history);


            // EMA of ADL
            IEnumerable <BasicData> adlBasicData = adlResults
                                                   .Select(x => new BasicData {
                Index = x.Index, Date = x.Date, Value = x.Adl
            });

            IEnumerable <EmaResult> adlEmaSlow = CalcEma(adlBasicData, slowPeriod);
            IEnumerable <EmaResult> adlEmaFast = CalcEma(adlBasicData, fastPeriod);


            // roll through history
            foreach (AdlResult r in adlResults)
            {
                ChaikinOscResult result = new ChaikinOscResult
                {
                    Index = r.Index,
                    Date  = r.Date,
                    MoneyFlowMultiplier = r.MoneyFlowMultiplier,
                    MoneyFlowVolume     = r.MoneyFlowVolume,
                    Adl = r.Adl
                };

                // add Oscillator
                if (r.Index >= slowPeriod)
                {
                    EmaResult f = adlEmaFast.Where(x => x.Index == r.Index).FirstOrDefault();
                    EmaResult s = adlEmaSlow.Where(x => x.Index == r.Index).FirstOrDefault();

                    result.Oscillator = f.Ema - s.Ema;
                }

                results.Add(result);
            }

            return(results);
        }
        // SIMPLE MOVING AVERAGE
        public static IEnumerable <ChaikinOscResult> GetChaikinOsc(
            IEnumerable <Quote> history,
            int fastPeriod = 3,
            int slowPeriod = 10)
        {
            // clean quotes
            Cleaners.PrepareHistory(history);

            // check parameters
            ValidateChaikinOsc(history, fastPeriod, slowPeriod);

            // initialize
            IEnumerable <AdlResult> adlResults = GetAdl(history);

            // money flow
            List <ChaikinOscResult> results = adlResults
                                              .Select(r => new ChaikinOscResult
            {
                Index = r.Index,
                Date  = r.Date,
                MoneyFlowMultiplier = r.MoneyFlowMultiplier,
                MoneyFlowVolume     = r.MoneyFlowVolume,
                Adl = r.Adl
            })
                                              .ToList();

            // EMA of ADL
            IEnumerable <BasicData> adlBasicData = adlResults
                                                   .Select(x => new BasicData {
                Index = x.Index, Date = x.Date, Value = x.Adl
            });

            List <EmaResult> adlEmaSlow = CalcEma(adlBasicData, slowPeriod).ToList();
            List <EmaResult> adlEmaFast = CalcEma(adlBasicData, fastPeriod).ToList();

            // add Oscillator
            for (int i = slowPeriod - 1; i < results.Count; i++)
            {
                ChaikinOscResult r = results[i];

                EmaResult f = adlEmaFast[i];
                EmaResult s = adlEmaSlow[i];

                r.Oscillator = f.Ema - s.Ema;
            }

            return(results);
        }
Exemple #3
0
        // CHAIKIN OSCILLATOR
        public static IEnumerable <ChaikinOscResult> GetChaikinOsc <TQuote>(
            IEnumerable <TQuote> history,
            int fastPeriod = 3,
            int slowPeriod = 10)
            where TQuote : IQuote
        {
            // check parameters
            ValidateChaikinOsc(history, fastPeriod, slowPeriod);

            // money flow
            List <ChaikinOscResult> results = GetAdl(history)
                                              .Select(r => new ChaikinOscResult
            {
                Date = r.Date,
                MoneyFlowMultiplier = r.MoneyFlowMultiplier,
                MoneyFlowVolume     = r.MoneyFlowVolume,
                Adl = r.Adl
            })
                                              .ToList();

            // EMA of ADL
            List <BasicData> adlBasicData = results
                                            .Select(x => new BasicData {
                Date = x.Date, Value = x.Adl
            })
                                            .ToList();

            List <EmaResult> adlEmaSlow = CalcEma(adlBasicData, slowPeriod).ToList();
            List <EmaResult> adlEmaFast = CalcEma(adlBasicData, fastPeriod).ToList();

            // add Oscillator
            for (int i = slowPeriod - 1; i < results.Count; i++)
            {
                ChaikinOscResult r = results[i];

                EmaResult f = adlEmaFast[i];
                EmaResult s = adlEmaSlow[i];

                r.Oscillator = f.Ema - s.Ema;
            }

            return(results);
        }