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);
            }
        }
Пример #2
0
    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);
        }
    }
Пример #3
0
    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));
    }
Пример #4
0
    // 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));
        }
Пример #7
0
    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));
    }