public void Convergence() { foreach (int qty in convergeQuantities) { IEnumerable <Quote> h = HistoryTestData.GetLong(110 + qty); IEnumerable <ChaikinOscResult> r = Indicator.GetChaikinOsc(h); ChaikinOscResult l = r.LastOrDefault(); Console.WriteLine("CHAIKIN OSC on {0:d} with {1,4} periods: {2:N8}", l.Date, h.Count(), l.Oscillator); } }
public void ChaikinOsc() { foreach (int qty in QuotesQuantities) { IEnumerable <Quote> quotes = TestData.GetLongish(qty); IEnumerable <ChaikinOscResult> r = quotes.GetChaikinOsc(); ChaikinOscResult l = r.LastOrDefault(); Console.WriteLine( "CHAIKIN OSC on {0:d} with {1,4} periods: {2:N8}", l.Date, quotes.Count(), l.Oscillator); } }
public void Removed() { int fastPeriods = 3; int slowPeriods = 10; List <ChaikinOscResult> results = quotes.GetChaikinOsc(fastPeriods, slowPeriods) .RemoveWarmupPeriods() .ToList(); // assertions Assert.AreEqual(502 - (slowPeriods + 100), results.Count); ChaikinOscResult last = results.LastOrDefault(); Assert.AreEqual(3439986548.42, Math.Round(last.Adl, 2)); Assert.AreEqual(0.8052, Math.Round(last.MoneyFlowMultiplier, 4)); Assert.AreEqual(118396116.25, Math.Round(last.MoneyFlowVolume, 2)); Assert.AreEqual(-19135200.72, Math.Round((double)last.Oscillator, 2)); }
// CHAIKIN OSCILLATOR /// <include file='./info.xml' path='indicator/*' /> /// public static IEnumerable <ChaikinOscResult> GetChaikinOsc <TQuote>( this IEnumerable <TQuote> quotes, int fastPeriods = 3, int slowPeriods = 10) where TQuote : IQuote { // check parameter arguments ValidateChaikinOsc(fastPeriods, slowPeriods); // money flow List <ChaikinOscResult> results = GetAdl(quotes) .Select(r => new ChaikinOscResult { Date = r.Date, MoneyFlowMultiplier = r.MoneyFlowMultiplier, MoneyFlowVolume = r.MoneyFlowVolume, Adl = r.Adl }) .ToList(); // EMA of ADL List <BasicD> bdAdl = results .Select(x => new BasicD { Date = x.Date, Value = x.Adl }) .ToList(); List <EmaResult> adlEmaSlow = CalcEma(bdAdl, slowPeriods); List <EmaResult> adlEmaFast = CalcEma(bdAdl, fastPeriods); // add Oscillator for (int i = slowPeriods - 1; i < results.Count; i++) { ChaikinOscResult r = results[i]; EmaResult f = adlEmaFast[i]; EmaResult s = adlEmaSlow[i]; r.Oscillator = (double)(f.Ema - s.Ema); } return(results); }
public void GetChaikinOsc() { int fastPeriod = 3; int slowPeriod = 10; List <ChaikinOscResult> results = Indicator.GetChaikinOsc(history, fastPeriod, slowPeriod).ToList(); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count); Assert.AreEqual(502 - slowPeriod + 1, results.Where(x => x.Oscillator != null).Count()); // sample value ChaikinOscResult r = results[501]; Assert.AreEqual(3439986548.42m, Math.Round(r.Adl, 2)); Assert.AreEqual(0.8052m, Math.Round(r.MoneyFlowMultiplier, 4)); Assert.AreEqual(118396116.25m, Math.Round(r.MoneyFlowVolume, 2)); Assert.AreEqual(-19135200.72m, Math.Round((decimal)r.Oscillator, 2)); }
public void GetChaikinOscTest() { int fastPeriod = 3; int slowPeriod = 10; IEnumerable <ChaikinOscResult> results = Indicator.GetChaikinOsc(history, fastPeriod, slowPeriod); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count()); Assert.AreEqual(502 - slowPeriod + 1, results.Where(x => x.Oscillator != null).Count()); // sample value ChaikinOscResult r = results.Where(x => x.Date == DateTime.ParseExact("12/31/2018", "MM/dd/yyyy", null)).FirstOrDefault(); Assert.AreEqual((decimal)3439986548.42, Math.Round(r.Adl, 2)); Assert.AreEqual((decimal)0.8052, Math.Round(r.MoneyFlowMultiplier, 4)); Assert.AreEqual((decimal)118396116.25, Math.Round(r.MoneyFlowVolume, 2)); Assert.AreEqual((decimal) - 19135200.72, Math.Round((decimal)r.Oscillator, 2)); }
public void Standard() { int fastPeriods = 3; int slowPeriods = 10; List <ChaikinOscResult> results = quotes.GetChaikinOsc(fastPeriods, slowPeriods) .ToList(); // assertions // proper quantities // should always be the same number of results as there is quotes Assert.AreEqual(502, results.Count); Assert.AreEqual(502 - slowPeriods + 1, results.Where(x => x.Oscillator != null).Count()); // sample value ChaikinOscResult r = results[501]; Assert.AreEqual(3439986548.42, Math.Round(r.Adl, 2)); Assert.AreEqual(0.8052, Math.Round(r.MoneyFlowMultiplier, 4)); Assert.AreEqual(118396116.25, Math.Round(r.MoneyFlowVolume, 2)); Assert.AreEqual(-19135200.72, Math.Round((double)r.Oscillator, 2)); }