// 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); }
// 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); }