public void startUpAndDownTrendTest()
        {
            List <IBar> bars = new List <IBar>();

            bars.Add(new MockBar(0M, 75.1M, 74.06M, 75.11M));
            bars.Add(new MockBar(0M, 75.9M, 76.030000M, 74.640000M));
            bars.Add(new MockBar(0M, 75.24M, 76.269900M, 75.060000M));
            bars.Add(new MockBar(0M, 75.17M, 75.280000M, 74.500000M));
            bars.Add(new MockBar(0M, 74.6M, 75.310000M, 74.540000M));
            bars.Add(new MockBar(0M, 74.1M, 75.467000M, 74.010000M));
            bars.Add(new MockBar(0M, 73.740000M, 74.700000M, 73.546000M));
            bars.Add(new MockBar(0M, 73.390000M, 73.830000M, 72.720000M));
            bars.Add(new MockBar(0M, 73.25M, 73.890000M, 72.86M));
            bars.Add(new MockBar(0M, 74.36M, 74.410000M, 73M, 26M));

            bars.Add(new MockBar(0M, 76.510000M, 76.830000M, 74.820000M));
            bars.Add(new MockBar(0M, 75.590000M, 76.850000M, 74.540000M));
            bars.Add(new MockBar(0M, 75.910000M, 76.960000M, 75.510000M));
            bars.Add(new MockBar(0M, 74.610000M, 77.070000M, 74.560000M));
            bars.Add(new MockBar(0M, 75.330000M, 75.530000M, 74.010000M));
            bars.Add(new MockBar(0M, 75.010000M, 75.500000M, 74.510000M));
            bars.Add(new MockBar(0M, 75.620000M, 76.210000M, 75.250000M));
            bars.Add(new MockBar(0M, 76.040000M, 76.460000M, 75.092800M));
            bars.Add(new MockBar(0M, 76.450000M, 76.450000M, 75.435000M));
            bars.Add(new MockBar(0M, 76.260000M, 76.470000M, 75.840000M));
            bars.Add(new MockBar(0M, 76.850000M, 77.000000M, 76.190000M));


            ParabolicSarIndicator sar = new ParabolicSarIndicator(new MockTimeSeries(bars));

            Assert.AreEqual(sar.GetValue(0), Decimals.NaN);
            Assert.AreEqual(sar.GetValue(1), 74.64000000M);
            Assert.AreEqual(sar.GetValue(2), 74.64000000M); // start with up trend
            Assert.AreEqual(sar.GetValue(3), 76.26990000M); // switch to downtrend
            Assert.AreEqual(sar.GetValue(4), 76.23450200M); // hold trend...
            Assert.AreEqual(sar.GetValue(5), 76.20061196M);
            Assert.AreEqual(sar.GetValue(6), 76.112987481600M);
            Assert.AreEqual(sar.GetValue(7), 75.95896823270400M);
            Assert.AreEqual(sar.GetValue(8), 75.6998507740876800M);
            Assert.AreEqual(sar.GetValue(9), 75.461462712160665600M); // switch to up trend
            Assert.AreEqual(sar.GetValue(10), 72.720000M);            // hold trend
            Assert.AreEqual(sar.GetValue(11), 72.80220000M);
            Assert.AreEqual(sar.GetValue(12), 72.9641120000M);
            Assert.AreEqual(sar.GetValue(13), 73.203865280000M);
            Assert.AreEqual(sar.GetValue(14), 73.51315605760000M);
            Assert.AreEqual(sar.GetValue(15), 73.7977035729920000M);
            Assert.AreEqual(sar.GetValue(16), 74.059487287152640000M);
            Assert.AreEqual(sar.GetValue(17), 74.30032830418042880000M);
            Assert.AreEqual(sar.GetValue(18), 74.5219020398459944960000M);
            Assert.AreEqual(sar.GetValue(19), 74.725749876658314936320000M);
            Assert.AreEqual(sar.GetValue(20), 74.91328988652564974141440000M);
        }
        public void TrendSwitchTest()
        {
            IList <Tick> ticks = new List <Tick>();

            ticks.Add(GenerateTick.From(0, 10, 13, 8));
            ticks.Add(GenerateTick.From(0, 8, 11, 6));
            ticks.Add(GenerateTick.From(0, 6, 9, 4));
            ticks.Add(GenerateTick.From(0, 11, 15, 9));
            ticks.Add(GenerateTick.From(0, 13, 15, 9));
            var sar = new ParabolicSarIndicator(GenerateTimeSeries.From(ticks), 1);

            TaTestsUtils.AssertDecimalEquals(sar.GetValue(0), 10);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(1), 8);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(2), 11);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(3), 4);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(4), 4);
        }
        public void UpTrendTest()
        {
            IList <Tick> ticks = new List <Tick>();

            ticks.Add(GenerateTick.From(0, 10, 13, 11));
            ticks.Add(GenerateTick.From(0, 17, 15, 11.38));
            ticks.Add(GenerateTick.From(0, 18, 16, 14));
            ticks.Add(GenerateTick.From(0, 19, 17, 12));
            ticks.Add(GenerateTick.From(0, 20, 18, 9));

            var sar = new ParabolicSarIndicator(GenerateTimeSeries.From(ticks), 1);

            TaTestsUtils.AssertDecimalEquals(sar.GetValue(0), 10);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(1), 17);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(2), 11.38);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(3), 11.38);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(4), 18);
        }
        public void TrendSwitchTest2()
        {
            IList <Tick> ticks = new List <Tick>();

            ticks.Add(GenerateTick.From(0, 10, 13, 11));
            ticks.Add(GenerateTick.From(0, 10, 15, 13));
            ticks.Add(GenerateTick.From(0, 12, 18, 11));
            ticks.Add(GenerateTick.From(0, 10, 15, 9));
            ticks.Add(GenerateTick.From(0, 9, 15, 9));

            var sar = new ParabolicSarIndicator(GenerateTimeSeries.From(ticks), 1);

            TaTestsUtils.AssertDecimalEquals(sar.GetValue(0), 10);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(1), 10);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(2), 0.04 * (18 - 10) + 10);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(3), 18);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(4), 18);
        }
        public void DownTrendTest()
        {
            IList <Tick> ticks = new List <Tick>();

            ticks.Add(GenerateTick.From(0, 20, 18, 9));
            ticks.Add(GenerateTick.From(0, 19, 17, 12));
            ticks.Add(GenerateTick.From(0, 18, 16, 14));
            ticks.Add(GenerateTick.From(0, 17, 15, 11.38));
            ticks.Add(GenerateTick.From(0, 10, 13, 11));
            ticks.Add(GenerateTick.From(0, 10, 30, 11));

            var sar = new ParabolicSarIndicator(GenerateTimeSeries.From(ticks), 1);

            TaTestsUtils.AssertDecimalEquals(sar.GetValue(0), 20);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(1), 19);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(2), 0.04 * (14 - 19) + 19);
            var value = 0.06 * (11.38 - 18.8) + 18.8;

            TaTestsUtils.AssertDecimalEquals(sar.GetValue(3), value);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(4), 0.08 * (11 - value) + value);
            TaTestsUtils.AssertDecimalEquals(sar.GetValue(5), 11);
        }