Exemplo n.º 1
0
    private static void DrawRetraceLine(
        List <ZigZagResult> results,
        string lastDirection,
        ZigZagPoint lastLowPoint,
        ZigZagPoint lastHighPoint,
        ZigZagPoint nextPoint)
    {
        ZigZagPoint priorPoint = new();

        // handle type and reset last point
        if (lastDirection == "L")
        {
            priorPoint.Index = lastHighPoint.Index;
            priorPoint.Value = lastHighPoint.Value;

            lastHighPoint.Index = nextPoint.Index;
            lastHighPoint.Value = nextPoint.Value;
        }

        // low line
        else if (lastDirection == "H")
        {
            priorPoint.Index = lastLowPoint.Index;
            priorPoint.Value = lastLowPoint.Value;

            lastLowPoint.Index = nextPoint.Index;
            lastLowPoint.Value = nextPoint.Value;
        }

        // nothing to draw cases
        if (
            lastDirection == "U" || // first line skipped, single line
            priorPoint.Index == 1 || // first line skipped, normal case
            nextPoint.Index == priorPoint.Index) // no span
        {
            return;
        }

        // narrow to period
        decimal increment = (nextPoint.Value - priorPoint.Value) / (nextPoint.Index - priorPoint.Index);

        // add new line segment
        for (int i = priorPoint.Index - 1; i < nextPoint.Index; i++)
        {
            ZigZagResult r     = results[i];
            int          index = i + 1;

            // high line
            if (lastDirection == "L")
            {
                r.RetraceHigh = priorPoint.Value + (increment * (index - priorPoint.Index));
            }

            // low line
            else if (lastDirection == "H")
            {
                r.RetraceLow = priorPoint.Value + (increment * (index - priorPoint.Index));
            }
        }
    }
Exemplo n.º 2
0
        public void GetZigZagClose()
        {
            decimal             percentChange = 3;
            List <ZigZagResult> results       =
                Indicator.GetZigZag(history, ZigZagType.Close, percentChange)
                .ToList();

            // assertions

            // proper quantities
            // should always be the same number of results as there is history
            Assert.AreEqual(502, results.Count);
            Assert.AreEqual(234, results.Where(x => x.ZigZag != null).Count());
            Assert.AreEqual(234, results.Where(x => x.RetraceHigh != null).Count());
            Assert.AreEqual(221, results.Where(x => x.RetraceLow != null).Count());
            Assert.AreEqual(14, results.Where(x => x.PointType != null).Count());

            // sample values
            ZigZagResult r0 = results[249];

            Assert.AreEqual(null, r0.ZigZag);
            Assert.AreEqual(null, r0.RetraceHigh);
            Assert.AreEqual(null, r0.RetraceLow);
            Assert.AreEqual(null, r0.PointType);

            ZigZagResult r1 = results[277];

            Assert.AreEqual(248.13m, r1.ZigZag);
            Assert.AreEqual(272.248m, r1.RetraceHigh);
            Assert.AreEqual(248.13m, r1.RetraceLow);
            Assert.AreEqual("L", r1.PointType);

            ZigZagResult r2 = results[483];

            Assert.AreEqual(272.52m, r2.ZigZag);
            Assert.AreEqual(272.52m, r2.RetraceHigh);
            Assert.AreEqual(248.799m, r2.RetraceLow);
            Assert.AreEqual("H", r2.PointType);

            ZigZagResult r3 = results[439];

            Assert.AreEqual(276.0133m, Math.Round((decimal)r3.ZigZag, 4));
            Assert.AreEqual(280.9158m, Math.Round((decimal)r3.RetraceHigh, 4));
            Assert.AreEqual(264.5769m, Math.Round((decimal)r3.RetraceLow, 4));
            Assert.AreEqual(null, r3.PointType);

            ZigZagResult r4 = results[500];

            Assert.AreEqual(241.4575m, Math.Round((decimal)r4.ZigZag, 4));
            Assert.AreEqual(246.7933m, Math.Round((decimal)r4.RetraceHigh, 4));
            Assert.AreEqual(null, r4.RetraceLow);
            Assert.AreEqual(null, r4.PointType);

            ZigZagResult r5 = results[501];

            Assert.AreEqual(245.28m, r5.ZigZag);
            Assert.AreEqual(245.28m, r5.RetraceHigh);
            Assert.AreEqual(null, r5.RetraceLow);
            Assert.AreEqual(null, r5.PointType);
        }
Exemplo n.º 3
0
        public void GetZigZagHighLow()
        {
            decimal             percentChange = 3;
            List <ZigZagResult> results       =
                Indicator.GetZigZag(history, ZigZagType.HighLow, percentChange)
                .ToList();

            // assertions

            // proper quantities
            // should always be the same number of results as there is history
            Assert.AreEqual(502, results.Count);
            Assert.AreEqual(463, results.Where(x => x.ZigZag != null).Count());
            Assert.AreEqual(462, results.Where(x => x.RetraceHigh != null).Count());
            Assert.AreEqual(445, results.Where(x => x.RetraceLow != null).Count());
            Assert.AreEqual(31, results.Where(x => x.PointType != null).Count());

            // sample values
            ZigZagResult r0 = results[38];

            Assert.AreEqual(null, r0.ZigZag);
            Assert.AreEqual(null, r0.RetraceHigh);
            Assert.AreEqual(null, r0.RetraceLow);
            Assert.AreEqual(null, r0.PointType);

            ZigZagResult r1 = results[277];

            Assert.AreEqual(252.9550m, r1.ZigZag);
            Assert.AreEqual(262.8054m, Math.Round((decimal)r1.RetraceHigh, 4));
            Assert.AreEqual(245.4467m, Math.Round((decimal)r1.RetraceLow, 4));
            Assert.AreEqual(null, r1.PointType);

            ZigZagResult r2 = results[316];

            Assert.AreEqual(249.48m, r2.ZigZag);
            Assert.AreEqual(258.34m, r2.RetraceHigh);
            Assert.AreEqual(249.48m, r2.RetraceLow);
            Assert.AreEqual("L", r2.PointType);

            ZigZagResult r3 = results[456];

            Assert.AreEqual(261.3325m, Math.Round((decimal)r3.ZigZag, 4));
            Assert.AreEqual(274.3419m, Math.Round((decimal)r3.RetraceHigh, 4));
            Assert.AreEqual(256.1050m, Math.Round((decimal)r3.RetraceLow, 4));
            Assert.AreEqual(null, r3.PointType);

            ZigZagResult r4 = results[500];

            Assert.AreEqual(246.73m, Math.Round((decimal)r4.ZigZag, 4));
            Assert.AreEqual(246.73m, r4.RetraceHigh);
            Assert.AreEqual(238.3867m, Math.Round((decimal)r4.RetraceLow, 4));
            Assert.AreEqual("H", r4.PointType);

            ZigZagResult r5 = results[501];

            Assert.AreEqual(242.87m, r5.ZigZag);
            Assert.AreEqual(null, r5.RetraceHigh);
            Assert.AreEqual(242.87m, r5.RetraceLow);
            Assert.AreEqual(null, r5.PointType);
        }
Exemplo n.º 4
0
    public void StandardHighLow()
    {
        List <ZigZagResult> results =
            quotes.GetZigZag(EndType.HighLow, 3)
            .ToList();

        // assertions

        // proper quantities
        // should always be the same number of results as there is quotes
        Assert.AreEqual(502, results.Count);
        Assert.AreEqual(463, results.Where(x => x.ZigZag != null).Count());
        Assert.AreEqual(463, results.Where(x => x.RetraceHigh != null).Count());
        Assert.AreEqual(442, results.Where(x => x.RetraceLow != null).Count());
        Assert.AreEqual(30, results.Where(x => x.PointType != null).Count());

        // sample values
        ZigZagResult r38 = results[38];

        Assert.AreEqual(null, r38.ZigZag);
        Assert.AreEqual(null, r38.RetraceHigh);
        Assert.AreEqual(null, r38.RetraceLow);
        Assert.AreEqual(null, r38.PointType);

        ZigZagResult r277 = results[277];

        Assert.AreEqual(252.9550m, r277.ZigZag);
        Assert.AreEqual(262.8054m, Math.Round((decimal)r277.RetraceHigh, 4));
        Assert.AreEqual(245.4467m, Math.Round((decimal)r277.RetraceLow, 4));
        Assert.AreEqual(null, r277.PointType);

        ZigZagResult r316 = results[316];

        Assert.AreEqual(249.48m, r316.ZigZag);
        Assert.AreEqual(258.34m, r316.RetraceHigh);
        Assert.AreEqual(249.48m, r316.RetraceLow);
        Assert.AreEqual("L", r316.PointType);

        ZigZagResult r456 = results[456];

        Assert.AreEqual(261.3325m, Math.Round((decimal)r456.ZigZag, 4));
        Assert.AreEqual(274.3419m, Math.Round((decimal)r456.RetraceHigh, 4));
        Assert.AreEqual(256.1050m, Math.Round((decimal)r456.RetraceLow, 4));
        Assert.AreEqual(null, r456.PointType);

        ZigZagResult r500 = results[500];

        Assert.AreEqual(240.1667m, Math.Round((decimal)r500.ZigZag, 4));
        Assert.AreEqual(246.95083m, Math.Round((decimal)r500.RetraceHigh, 5));
        Assert.AreEqual(null, r500.RetraceLow);
        Assert.AreEqual(null, r500.PointType);

        ZigZagResult r501 = results[501];

        Assert.AreEqual(245.54m, r501.ZigZag);
        Assert.AreEqual(245.54m, r501.RetraceHigh);
        Assert.AreEqual(null, r501.RetraceLow);
        Assert.AreEqual(null, r501.PointType);
    }