Пример #1
0
    // aggregation (quantization)
    /// <include file='./info.xml' path='info/type[@name="Aggregate"]/*' />
    ///
    public static IEnumerable <Quote> Aggregate <TQuote>(
        this IEnumerable <TQuote> quotes,
        PeriodSize newSize)
        where TQuote : IQuote
    {
        if (newSize != PeriodSize.Month)
        {
            // parameter conversion
            TimeSpan newTimeSpan = newSize.ToTimeSpan();

            // convert
            return(quotes.Aggregate(newTimeSpan));
        }
        else // month
        {
            return(quotes
                   .OrderBy(x => x.Date)
                   .GroupBy(x => new DateTime(x.Date.Year, x.Date.Month, 1))
                   .Select(x => new Quote
            {
                Date = x.Key,
                Open = x.First().Open,
                High = x.Max(t => t.High),
                Low = x.Min(t => t.Low),
                Close = x.Last().Close,
                Volume = x.Sum(t => t.Volume)
            }));
        }
    }
        // quantization
        public static IEnumerable <Quote> Aggregate <TQuote>(
            this IEnumerable <TQuote> history,
            PeriodSize newSize)
            where TQuote : IQuote
        {
            TimeSpan newPeriod = newSize.ToTimeSpan();

            return

                // handle no history scenario
                (history == null || !history.Any() ? new List <Quote>()

                 // validate parameters
                : newPeriod == TimeSpan.Zero ?

                 throw new ArgumentOutOfRangeException(nameof(newSize), newSize,
                                                       "History Aggregation must use a New Size value of at least " +
                                                       "one minute and not more than one week.")

                 // return aggregation
                : history
                 .OrderBy(x => x.Date)
                 .GroupBy(x => x.Date.RoundDown(newPeriod))
                 .Select(x => new Quote
            {
                Date = x.Key,
                Open = x.First().Open,
                High = x.Max(t => t.High),
                Low = x.Min(t => t.Low),
                Close = x.Last().Close,
                Volume = x.Sum(t => t.Volume)
            }));
        }
Пример #3
0
    // aggregation (quantization)
    /// <include file='./info.xml' path='info/type[@name="Aggregate"]/*' />
    ///
    public static IEnumerable <Quote> Aggregate <TQuote>(
        this IEnumerable <TQuote> quotes,
        PeriodSize newSize)
        where TQuote : IQuote
    {
        // parameter conversion
        TimeSpan newTimeSpan = newSize.ToTimeSpan();

        // convert
        return(quotes.Aggregate(newTimeSpan));
    }
Пример #4
0
        public static List <Quote> GetChartData(string pair, PeriodSize interval, DateTime from, DateTime to)
        {
            List <Quote> result = new List <Quote>();

            using (var client = new BinanceClient())
            {
                var res1 = client.Spot.Market.GetKlines(pair, (KlineInterval)((int)interval), from, to).Data.ToList();
                result = res1.Select(s => new Quote()
                {
                    Close = s.Close, Date = s.OpenTime, High = s.High, Low = s.Low, Open = s.Open, Volume = s.BaseVolume
                }).ToList();
            }
            return(result);
        }
Пример #5
0
 // PERIOD-SIZE to TIMESPAN CONVERSION
 internal static TimeSpan ToTimeSpan(this PeriodSize periodSize)
 {
     return(periodSize switch
     {
         PeriodSize.OneMinute => TimeSpan.FromMinutes(1),
         PeriodSize.TwoMinutes => TimeSpan.FromMinutes(2),
         PeriodSize.ThreeMinutes => TimeSpan.FromMinutes(3),
         PeriodSize.FiveMinutes => TimeSpan.FromMinutes(5),
         PeriodSize.FifteenMinutes => TimeSpan.FromMinutes(15),
         PeriodSize.ThirtyMinutes => TimeSpan.FromMinutes(30),
         PeriodSize.OneHour => TimeSpan.FromHours(1),
         PeriodSize.TwoHours => TimeSpan.FromHours(2),
         PeriodSize.FourHours => TimeSpan.FromHours(4),
         PeriodSize.Day => TimeSpan.FromDays(1),
         PeriodSize.Week => TimeSpan.FromDays(7),
         _ => TimeSpan.Zero
     });
    public void Removed()
    {
        PeriodSize     periodSize = PeriodSize.Month;
        PivotPointType pointType  = PivotPointType.Standard;

        List <PivotPointsResult> results = quotes.GetPivotPoints(periodSize, pointType)
                                           .RemoveWarmupPeriods()
                                           .ToList();

        // assertions
        Assert.AreEqual(482, results.Count);

        PivotPointsResult last = results.LastOrDefault();

        Assert.AreEqual(266.6767m, Math.Round((decimal)last.PP, 4));
        Assert.AreEqual(258.9633m, Math.Round((decimal)last.S1, 4));
        Assert.AreEqual(248.9667m, Math.Round((decimal)last.S2, 4));
        Assert.AreEqual(241.2533m, Math.Round((decimal)last.S3, 4));
        Assert.AreEqual(null, last.S4);
        Assert.AreEqual(276.6733m, Math.Round((decimal)last.R1, 4));
        Assert.AreEqual(284.3867m, Math.Round((decimal)last.R2, 4));
        Assert.AreEqual(294.3833m, Math.Round((decimal)last.R3, 4));
        Assert.AreEqual(null, last.R4);
    }
Пример #7
0
        public void GetPivotPointsWoodie()
        {
            PeriodSize     periodSize = PeriodSize.Day;
            PivotPointType pointType  = PivotPointType.Woodie;

            IEnumerable <Quote>      h       = History.GetHistoryIntraday();
            List <PivotPointsResult> results = Indicator.GetPivotPoints(h, periodSize, pointType)
                                               .ToList();

            // assertions

            // proper quantities
            // should always be the same number of results as there is history
            Assert.AreEqual(1564, results.Count);
            Assert.AreEqual(1173, results.Where(x => x.PP != null).Count());

            // sample values
            PivotPointsResult r1 = results[1563];

            Assert.AreEqual(371.3625m, Math.Round((decimal)r1.PP, 4));
            Assert.AreEqual(370.2650m, Math.Round((decimal)r1.S1, 4));
            Assert.AreEqual(369.9525m, Math.Round((decimal)r1.S2, 4));
            Assert.AreEqual(368.8550m, Math.Round((decimal)r1.S3, 4));
            Assert.AreEqual(371.6750m, Math.Round((decimal)r1.R1, 4));
            Assert.AreEqual(372.7725m, Math.Round((decimal)r1.R2, 4));
            Assert.AreEqual(373.0850m, Math.Round((decimal)r1.R3, 4));

            PivotPointsResult r2 = results[1173];

            Assert.AreEqual(371.3625m, Math.Round((decimal)r2.PP, 4));
            Assert.AreEqual(370.2650m, Math.Round((decimal)r2.S1, 4));
            Assert.AreEqual(369.9525m, Math.Round((decimal)r2.S2, 4));
            Assert.AreEqual(368.8550m, Math.Round((decimal)r2.S3, 4));
            Assert.AreEqual(371.6750m, Math.Round((decimal)r2.R1, 4));
            Assert.AreEqual(372.7725m, Math.Round((decimal)r2.R2, 4));
            Assert.AreEqual(373.0850m, Math.Round((decimal)r2.R3, 4));

            PivotPointsResult r3 = results[1172];

            Assert.AreEqual(370.9769m, Math.Round((decimal)r3.PP, 4));
            Assert.AreEqual(370.7938m, Math.Round((decimal)r3.S1, 4));
            Assert.AreEqual(368.6845m, Math.Round((decimal)r3.S2, 4));
            Assert.AreEqual(368.5014m, Math.Round((decimal)r3.S3, 4));
            Assert.AreEqual(373.0862m, Math.Round((decimal)r3.R1, 4));
            Assert.AreEqual(373.2693m, Math.Round((decimal)r3.R2, 4));
            Assert.AreEqual(375.3786m, Math.Round((decimal)r3.R3, 4));

            PivotPointsResult r4 = results[391];

            Assert.AreEqual(368.7875m, Math.Round((decimal)r4.PP, 4));
            Assert.AreEqual(367.9850m, Math.Round((decimal)r4.S1, 4));
            Assert.AreEqual(365.1175m, Math.Round((decimal)r4.S2, 4));
            Assert.AreEqual(364.3150m, Math.Round((decimal)r4.S3, 4));
            Assert.AreEqual(371.6550m, Math.Round((decimal)r4.R1, 4));
            Assert.AreEqual(372.4575m, Math.Round((decimal)r4.R2, 4));
            Assert.AreEqual(375.3250m, Math.Round((decimal)r4.R3, 4));

            PivotPointsResult r5 = results[390];

            Assert.AreEqual(null, r5.R4);
            Assert.AreEqual(null, r5.R3);
            Assert.AreEqual(null, r5.PP);
            Assert.AreEqual(null, r5.S1);
            Assert.AreEqual(null, r5.S2);
            Assert.AreEqual(null, r5.R1);
            Assert.AreEqual(null, r5.R2);
            Assert.AreEqual(null, r5.S3);
            Assert.AreEqual(null, r5.S4);
        }
Пример #8
0
        public void GetPivotPointsFibonacci()
        {
            PeriodSize     periodSize = PeriodSize.Hour;
            PivotPointType pointType  = PivotPointType.Fibonacci;

            IEnumerable <Quote>      h       = History.GetHistoryIntraday(300);
            List <PivotPointsResult> results = Indicator.GetPivotPoints(h, periodSize, pointType)
                                               .ToList();

            // assertions

            // proper quantities
            // should always be the same number of results as there is history
            Assert.AreEqual(300, results.Count);
            Assert.AreEqual(241, results.Where(x => x.PP != null).Count());

            // sample values
            PivotPointsResult r1 = results[299];

            Assert.AreEqual(368.8200m, Math.Round((decimal)r1.PP, 4));
            Assert.AreEqual(367.5632m, Math.Round((decimal)r1.S1, 4));
            Assert.AreEqual(366.7868m, Math.Round((decimal)r1.S2, 4));
            Assert.AreEqual(365.5300m, Math.Round((decimal)r1.S3, 4));
            Assert.AreEqual(370.0768m, Math.Round((decimal)r1.R1, 4));
            Assert.AreEqual(370.8532m, Math.Round((decimal)r1.R2, 4));
            Assert.AreEqual(372.1100m, Math.Round((decimal)r1.R3, 4));

            PivotPointsResult r2 = results[149];

            Assert.AreEqual(369.0000m, Math.Round((decimal)r2.PP, 4));
            Assert.AreEqual(368.5760m, Math.Round((decimal)r2.S1, 4));
            Assert.AreEqual(368.3140m, Math.Round((decimal)r2.S2, 4));
            Assert.AreEqual(367.8900m, Math.Round((decimal)r2.S3, 4));
            Assert.AreEqual(369.4240m, Math.Round((decimal)r2.R1, 4));
            Assert.AreEqual(369.6860m, Math.Round((decimal)r2.R2, 4));
            Assert.AreEqual(370.1100m, Math.Round((decimal)r2.R3, 4));

            PivotPointsResult r3 = results[119];

            Assert.AreEqual(369.0000m, Math.Round((decimal)r3.PP, 4));
            Assert.AreEqual(368.5760m, Math.Round((decimal)r3.S1, 4));
            Assert.AreEqual(368.3140m, Math.Round((decimal)r3.S2, 4));
            Assert.AreEqual(367.8900m, Math.Round((decimal)r3.S3, 4));
            Assert.AreEqual(369.4240m, Math.Round((decimal)r3.R1, 4));
            Assert.AreEqual(369.6860m, Math.Round((decimal)r3.R2, 4));
            Assert.AreEqual(370.1100m, Math.Round((decimal)r3.R3, 4));

            PivotPointsResult r4 = results[118];

            Assert.AreEqual(368.4967m, Math.Round((decimal)r4.PP, 4));
            Assert.AreEqual(367.9237m, Math.Round((decimal)r4.S1, 4));
            Assert.AreEqual(367.5697m, Math.Round((decimal)r4.S2, 4));
            Assert.AreEqual(366.9967m, Math.Round((decimal)r4.S3, 4));
            Assert.AreEqual(369.0697m, Math.Round((decimal)r4.R1, 4));
            Assert.AreEqual(369.4237m, Math.Round((decimal)r4.R2, 4));
            Assert.AreEqual(369.9967m, Math.Round((decimal)r4.R3, 4));

            PivotPointsResult r5 = results[59];

            Assert.AreEqual(368.4967m, Math.Round((decimal)r5.PP, 4));
            Assert.AreEqual(367.9237m, Math.Round((decimal)r5.S1, 4));
            Assert.AreEqual(367.5697m, Math.Round((decimal)r5.S2, 4));
            Assert.AreEqual(366.9967m, Math.Round((decimal)r5.S3, 4));
            Assert.AreEqual(369.0697m, Math.Round((decimal)r5.R1, 4));
            Assert.AreEqual(369.4237m, Math.Round((decimal)r5.R2, 4));
            Assert.AreEqual(369.9967m, Math.Round((decimal)r5.R3, 4));

            PivotPointsResult r6 = results[58];

            Assert.AreEqual(null, r6.R4);
            Assert.AreEqual(null, r6.R3);
            Assert.AreEqual(null, r6.PP);
            Assert.AreEqual(null, r6.S1);
            Assert.AreEqual(null, r6.S2);
            Assert.AreEqual(null, r6.R1);
            Assert.AreEqual(null, r6.R2);
            Assert.AreEqual(null, r6.S3);
            Assert.AreEqual(null, r6.S4);
        }
Пример #9
0
        public void GetPivotPointsDemark()
        {
            PeriodSize     periodSize = PeriodSize.Month;
            PivotPointType pointType  = PivotPointType.Demark;

            List <PivotPointsResult> results = Indicator.GetPivotPoints(history, periodSize, pointType)
                                               .ToList();

            // assertions

            // proper quantities
            // should always be the same number of results as there is history
            Assert.AreEqual(502, results.Count);
            Assert.AreEqual(482, results.Where(x => x.PP != null).Count());

            // sample values
            PivotPointsResult r1 = results[501];

            Assert.AreEqual(null, r1.R4);
            Assert.AreEqual(null, r1.R3);
            Assert.AreEqual(268.6050m, Math.Round((decimal)r1.PP, 4));
            Assert.AreEqual(262.8200m, Math.Round((decimal)r1.S1, 4));
            Assert.AreEqual(null, r1.S2);
            Assert.AreEqual(280.5300m, Math.Round((decimal)r1.R1, 4));
            Assert.AreEqual(null, r1.R2);
            Assert.AreEqual(null, r1.S3);
            Assert.AreEqual(null, r1.S4);

            PivotPointsResult r2 = results[251];

            Assert.AreEqual(null, r2.R4);
            Assert.AreEqual(null, r2.R3);
            Assert.AreEqual(256.0725m, Math.Round((decimal)r2.PP, 4));
            Assert.AreEqual(253.4450m, Math.Round((decimal)r2.S1, 4));
            Assert.AreEqual(null, r2.S2);
            Assert.AreEqual(262.2750m, Math.Round((decimal)r2.R1, 4));
            Assert.AreEqual(null, r2.R2);
            Assert.AreEqual(null, r2.S3);
            Assert.AreEqual(null, r2.S4);

            PivotPointsResult r3 = results[250];

            Assert.AreEqual(null, r3.R4);
            Assert.AreEqual(null, r3.R3);
            Assert.AreEqual(252.1925m, Math.Round((decimal)r3.PP, 4));
            Assert.AreEqual(249.4450m, Math.Round((decimal)r3.S1, 4));
            Assert.AreEqual(null, r3.S2);
            Assert.AreEqual(259.4350m, Math.Round((decimal)r3.R1, 4));
            Assert.AreEqual(null, r3.R2);
            Assert.AreEqual(null, r3.S3);
            Assert.AreEqual(null, r3.S4);

            PivotPointsResult r4 = results[149];

            Assert.AreEqual(null, r4.R4);
            Assert.AreEqual(null, r4.R3);
            Assert.AreEqual(234.3475m, Math.Round((decimal)r4.PP, 4));
            Assert.AreEqual(232.2250m, Math.Round((decimal)r4.S1, 4));
            Assert.AreEqual(null, r4.S2);
            Assert.AreEqual(239.5350m, Math.Round((decimal)r4.R1, 4));
            Assert.AreEqual(null, r4.R2);
            Assert.AreEqual(null, r4.S3);
            Assert.AreEqual(null, r4.S4);

            PivotPointsResult r5 = results[20];

            Assert.AreEqual(null, r5.R4);
            Assert.AreEqual(null, r5.R3);
            Assert.AreEqual(215.1300m, Math.Round((decimal)r5.PP, 4));
            Assert.AreEqual(213.2400m, Math.Round((decimal)r5.S1, 4));
            Assert.AreEqual(null, r5.S2);
            Assert.AreEqual(218.7400m, Math.Round((decimal)r5.R1, 4));
            Assert.AreEqual(null, r5.R2);
            Assert.AreEqual(null, r5.S3);
            Assert.AreEqual(null, r5.S4);

            PivotPointsResult r6 = results[19];

            Assert.AreEqual(null, r6.R4);
            Assert.AreEqual(null, r6.R3);
            Assert.AreEqual(null, r6.PP);
            Assert.AreEqual(null, r6.S1);
            Assert.AreEqual(null, r6.S2);
            Assert.AreEqual(null, r6.R1);
            Assert.AreEqual(null, r6.R2);
            Assert.AreEqual(null, r6.S3);
            Assert.AreEqual(null, r6.S4);
        }
Пример #10
0
        public void GetPivotPointsStandard()
        {
            PeriodSize     periodSize = PeriodSize.Month;
            PivotPointType pointType  = PivotPointType.Standard;

            List <PivotPointsResult> results = Indicator.GetPivotPoints(history, periodSize, pointType)
                                               .ToList();

            // assertions

            // proper quantities
            // should always be the same number of results as there is history
            Assert.AreEqual(502, results.Count);
            Assert.AreEqual(482, results.Where(x => x.PP != null).Count());

            // sample values
            PivotPointsResult r1 = results[501];

            Assert.AreEqual(null, r1.R4);
            Assert.AreEqual(null, r1.R3);
            Assert.AreEqual(266.6767m, Math.Round((decimal)r1.PP, 4));
            Assert.AreEqual(258.9633m, Math.Round((decimal)r1.S1, 4));
            Assert.AreEqual(248.9667m, Math.Round((decimal)r1.S2, 4));
            Assert.AreEqual(276.6733m, Math.Round((decimal)r1.R1, 4));
            Assert.AreEqual(284.3867m, Math.Round((decimal)r1.R2, 4));
            Assert.AreEqual(null, r1.S3);
            Assert.AreEqual(null, r1.S4);

            PivotPointsResult r2 = results[251];

            Assert.AreEqual(null, r2.R4);
            Assert.AreEqual(null, r2.R3);
            Assert.AreEqual(255.1967m, Math.Round((decimal)r2.PP, 4));
            Assert.AreEqual(251.6933m, Math.Round((decimal)r2.S1, 4));
            Assert.AreEqual(246.3667m, Math.Round((decimal)r2.S2, 4));
            Assert.AreEqual(260.5233m, Math.Round((decimal)r2.R1, 4));
            Assert.AreEqual(264.0267m, Math.Round((decimal)r2.R2, 4));
            Assert.AreEqual(null, r2.S3);
            Assert.AreEqual(null, r2.S4);

            PivotPointsResult r3 = results[250];

            Assert.AreEqual(null, r3.R4);
            Assert.AreEqual(null, r3.R3);
            Assert.AreEqual(251.2767m, Math.Round((decimal)r3.PP, 4));
            Assert.AreEqual(247.6133m, Math.Round((decimal)r3.S1, 4));
            Assert.AreEqual(241.2867m, Math.Round((decimal)r3.S2, 4));
            Assert.AreEqual(257.6033m, Math.Round((decimal)r3.R1, 4));
            Assert.AreEqual(261.2667m, Math.Round((decimal)r3.R2, 4));
            Assert.AreEqual(null, r3.S3);
            Assert.AreEqual(null, r3.S4);

            PivotPointsResult r4 = results[149];

            Assert.AreEqual(null, r4.R4);
            Assert.AreEqual(null, r4.R3);
            Assert.AreEqual(233.6400m, Math.Round((decimal)r4.PP, 4));
            Assert.AreEqual(230.8100m, Math.Round((decimal)r4.S1, 4));
            Assert.AreEqual(226.3300m, Math.Round((decimal)r4.S2, 4));
            Assert.AreEqual(238.1200m, Math.Round((decimal)r4.R1, 4));
            Assert.AreEqual(240.9500m, Math.Round((decimal)r4.R2, 4));
            Assert.AreEqual(null, r4.S3);
            Assert.AreEqual(null, r4.S4);

            PivotPointsResult r5 = results[20];

            Assert.AreEqual(null, r5.R4);
            Assert.AreEqual(null, r5.R3);
            Assert.AreEqual(214.5000m, Math.Round((decimal)r5.PP, 4));
            Assert.AreEqual(211.9800m, Math.Round((decimal)r5.S1, 4));
            Assert.AreEqual(209.0000m, Math.Round((decimal)r5.S2, 4));
            Assert.AreEqual(217.4800m, Math.Round((decimal)r5.R1, 4));
            Assert.AreEqual(220.0000m, Math.Round((decimal)r5.R2, 4));
            Assert.AreEqual(null, r5.S3);
            Assert.AreEqual(null, r5.S4);

            PivotPointsResult r6 = results[19];

            Assert.AreEqual(null, r6.R4);
            Assert.AreEqual(null, r6.R3);
            Assert.AreEqual(null, r6.PP);
            Assert.AreEqual(null, r6.S1);
            Assert.AreEqual(null, r6.S2);
            Assert.AreEqual(null, r6.R1);
            Assert.AreEqual(null, r6.R2);
            Assert.AreEqual(null, r6.S3);
            Assert.AreEqual(null, r6.S4);
        }
Пример #11
0
        public void GetPivotPointsCamarilla()
        {
            PeriodSize     periodSize = PeriodSize.Week;
            PivotPointType pointType  = PivotPointType.Camarilla;

            IEnumerable <Quote>      h       = History.GetHistory(38);
            List <PivotPointsResult> results = Indicator.GetPivotPoints(h, periodSize, pointType)
                                               .ToList();

            // assertions

            // proper quantities
            // should always be the same number of results as there is history
            Assert.AreEqual(38, results.Count);
            Assert.AreEqual(33, results.Where(x => x.PP != null).Count());

            // sample values
            PivotPointsResult r1 = results[37];

            Assert.AreEqual(239.7667m, Math.Round((decimal)r1.PP, 4));
            Assert.AreEqual(224.3975m, Math.Round((decimal)r1.S1, 4));
            Assert.AreEqual(222.9550m, Math.Round((decimal)r1.S2, 4));
            Assert.AreEqual(221.5125m, Math.Round((decimal)r1.S3, 4));
            Assert.AreEqual(217.1850m, Math.Round((decimal)r1.S4, 4));
            Assert.AreEqual(261.9025m, Math.Round((decimal)r1.R1, 4));
            Assert.AreEqual(263.3450m, Math.Round((decimal)r1.R2, 4));
            Assert.AreEqual(264.7875m, Math.Round((decimal)r1.R3, 4));
            Assert.AreEqual(269.1150m, Math.Round((decimal)r1.R4, 4));

            PivotPointsResult r2 = results[23];

            Assert.AreEqual(262.2767m, Math.Round((decimal)r2.PP, 4));
            Assert.AreEqual(238.1900m, Math.Round((decimal)r2.S1, 4));
            Assert.AreEqual(236.7300m, Math.Round((decimal)r2.S2, 4));
            Assert.AreEqual(235.2700m, Math.Round((decimal)r2.S3, 4));
            Assert.AreEqual(230.8900m, Math.Round((decimal)r2.S4, 4));
            Assert.AreEqual(276.1500m, Math.Round((decimal)r2.R1, 4));
            Assert.AreEqual(277.6100m, Math.Round((decimal)r2.R2, 4));
            Assert.AreEqual(279.0700m, Math.Round((decimal)r2.R3, 4));
            Assert.AreEqual(283.4500m, Math.Round((decimal)r2.R4, 4));

            PivotPointsResult r3 = results[22];

            Assert.AreEqual(265.8100m, Math.Round((decimal)r3.PP, 4));
            Assert.AreEqual(257.4008m, Math.Round((decimal)r3.S1, 4));
            Assert.AreEqual(256.5117m, Math.Round((decimal)r3.S2, 4));
            Assert.AreEqual(255.6225m, Math.Round((decimal)r3.S3, 4));
            Assert.AreEqual(252.9550m, Math.Round((decimal)r3.S4, 4));
            Assert.AreEqual(280.5192m, Math.Round((decimal)r3.R1, 4));
            Assert.AreEqual(281.4083m, Math.Round((decimal)r3.R2, 4));
            Assert.AreEqual(282.2975m, Math.Round((decimal)r3.R3, 4));
            Assert.AreEqual(284.9650m, Math.Round((decimal)r3.R4, 4));

            PivotPointsResult r4 = results[5];

            Assert.AreEqual(270.0567m, Math.Round((decimal)r4.PP, 4));
            Assert.AreEqual(260.5875m, Math.Round((decimal)r4.S1, 4));
            Assert.AreEqual(259.7850m, Math.Round((decimal)r4.S2, 4));
            Assert.AreEqual(258.9825m, Math.Round((decimal)r4.S3, 4));
            Assert.AreEqual(256.5750m, Math.Round((decimal)r4.S4, 4));
            Assert.AreEqual(281.4525m, Math.Round((decimal)r4.R1, 4));
            Assert.AreEqual(282.2550m, Math.Round((decimal)r4.R2, 4));
            Assert.AreEqual(283.0575m, Math.Round((decimal)r4.R3, 4));
            Assert.AreEqual(285.4650m, Math.Round((decimal)r4.R4, 4));

            PivotPointsResult r5 = results[4];

            Assert.AreEqual(null, r5.R4);
            Assert.AreEqual(null, r5.R3);
            Assert.AreEqual(null, r5.PP);
            Assert.AreEqual(null, r5.S1);
            Assert.AreEqual(null, r5.S2);
            Assert.AreEqual(null, r5.R1);
            Assert.AreEqual(null, r5.R2);
            Assert.AreEqual(null, r5.S3);
            Assert.AreEqual(null, r5.S4);
        }
Пример #12
0
        // PIVOT POINTS
        /// <include file='./info.xml' path='indicator/*' />
        ///
        public static IEnumerable <PivotPointsResult> GetPivotPoints <TQuote>(
            IEnumerable <TQuote> history,
            PeriodSize windowSize,
            PivotPointType pointType = PivotPointType.Standard)
            where TQuote : IQuote
        {
            // sort history
            List <TQuote> historyList = history.Sort();

            // check parameter arguments
            ValidatePivotPoints(history, windowSize);

            // initialize
            List <PivotPointsResult> results     = new(historyList.Count);
            PivotPointsResult        windowPoint = new();

            TQuote h0       = historyList[0];
            int    windowId = GetWindowNumber(h0.Date, windowSize);
            int    windowEval;
            bool   firstWindow = true;

            decimal windowHigh  = h0.High;
            decimal windowLow   = h0.Low;
            decimal windowOpen  = h0.Open;
            decimal windowClose = h0.Close;

            // roll through history
            for (int i = 0; i < historyList.Count; i++)
            {
                TQuote h = historyList[i];

                PivotPointsResult r = new()
                {
                    Date = h.Date
                };

                // new window evaluation
                windowEval = GetWindowNumber(h.Date, windowSize);

                if (windowEval != windowId)
                {
                    windowId    = windowEval;
                    firstWindow = false;

                    // set new levels
                    if (pointType == PivotPointType.Woodie)
                    {
                        windowOpen = h.Open;
                    }

                    windowPoint = GetPivotPoint(pointType, windowOpen, windowHigh, windowLow, windowClose);

                    // reset window min/max thresholds
                    windowOpen = h.Open;
                    windowHigh = h.High;
                    windowLow  = h.Low;
                }

                // add levels
                if (!firstWindow)
                {
                    // pivot point
                    r.PP = windowPoint.PP;

                    // support
                    r.S1 = windowPoint.S1;
                    r.S2 = windowPoint.S2;
                    r.S3 = windowPoint.S3;
                    r.S4 = windowPoint.S4;

                    // resistance
                    r.R1 = windowPoint.R1;
                    r.R2 = windowPoint.R2;
                    r.R3 = windowPoint.R3;
                    r.R4 = windowPoint.R4;
                }

                results.Add(r);

                // capture window threholds (for next iteration)
                windowHigh  = (h.High > windowHigh) ? h.High : windowHigh;
                windowLow   = (h.Low < windowLow) ? h.Low : windowLow;
                windowClose = h.Close;
            }

            return(results);
        }
        public void Camarilla()
        {
            PeriodSize     periodSize = PeriodSize.Week;
            PivotPointType pointType  = PivotPointType.Camarilla;

            IEnumerable <Quote>      h       = HistoryTestData.Get(38);
            List <PivotPointsResult> results = Indicator.GetPivotPoints(h, periodSize, pointType)
                                               .ToList();

            // assertions

            // proper quantities
            // should always be the same number of results as there is history
            Assert.AreEqual(38, results.Count);
            Assert.AreEqual(33, results.Where(x => x.PP != null).Count());

            // sample values
            PivotPointsResult r2 = results[4];

            Assert.AreEqual(null, r2.R4);
            Assert.AreEqual(null, r2.R3);
            Assert.AreEqual(null, r2.PP);
            Assert.AreEqual(null, r2.S1);
            Assert.AreEqual(null, r2.S2);
            Assert.AreEqual(null, r2.R1);
            Assert.AreEqual(null, r2.R2);
            Assert.AreEqual(null, r2.S3);
            Assert.AreEqual(null, r2.S4);

            PivotPointsResult r3 = results[5];

            Assert.AreEqual(271.0200m, Math.Round((decimal)r3.PP, 4));
            Assert.AreEqual(270.13725m, Math.Round((decimal)r3.S1, 5));
            Assert.AreEqual(269.2545m, Math.Round((decimal)r3.S2, 4));
            Assert.AreEqual(268.3718m, Math.Round((decimal)r3.S3, 4));
            Assert.AreEqual(265.7235m, Math.Round((decimal)r3.S4, 4));
            Assert.AreEqual(271.9028m, Math.Round((decimal)r3.R1, 4));
            Assert.AreEqual(272.7855m, Math.Round((decimal)r3.R2, 4));
            Assert.AreEqual(273.66825m, Math.Round((decimal)r3.R3, 5));
            Assert.AreEqual(276.3165m, Math.Round((decimal)r3.R4, 4));

            PivotPointsResult r4 = results[22];

            Assert.AreEqual(268.9600m, Math.Round((decimal)r4.PP, 4));
            Assert.AreEqual(267.9819m, Math.Round((decimal)r4.S1, 4));
            Assert.AreEqual(267.0038m, Math.Round((decimal)r4.S2, 4));
            Assert.AreEqual(266.0258m, Math.Round((decimal)r4.S3, 4));
            Assert.AreEqual(263.0915m, Math.Round((decimal)r4.S4, 4));
            Assert.AreEqual(269.9381m, Math.Round((decimal)r4.R1, 4));
            Assert.AreEqual(270.9162m, Math.Round((decimal)r4.R2, 4));
            Assert.AreEqual(271.89425m, Math.Round((decimal)r4.R3, 5));
            Assert.AreEqual(274.8285m, Math.Round((decimal)r4.R4, 4));

            PivotPointsResult r5 = results[23];

            Assert.AreEqual(257.1700m, Math.Round((decimal)r5.PP, 4));
            Assert.AreEqual(255.5640m, Math.Round((decimal)r5.S1, 4));
            Assert.AreEqual(253.9580m, Math.Round((decimal)r5.S2, 4));
            Assert.AreEqual(252.3520m, Math.Round((decimal)r5.S3, 4));
            Assert.AreEqual(247.5340m, Math.Round((decimal)r5.S4, 4));
            Assert.AreEqual(258.7760m, Math.Round((decimal)r5.R1, 4));
            Assert.AreEqual(260.3820m, Math.Round((decimal)r5.R2, 4));
            Assert.AreEqual(261.9880m, Math.Round((decimal)r5.R3, 4));
            Assert.AreEqual(266.8060m, Math.Round((decimal)r5.R4, 4));

            PivotPointsResult r6 = results[37];

            Assert.AreEqual(243.1500m, Math.Round((decimal)r6.PP, 4));
            Assert.AreEqual(241.56325m, Math.Round((decimal)r6.S1, 5));
            Assert.AreEqual(239.9765m, Math.Round((decimal)r6.S2, 4));
            Assert.AreEqual(238.3898m, Math.Round((decimal)r6.S3, 4));
            Assert.AreEqual(233.6295m, Math.Round((decimal)r6.S4, 4));
            Assert.AreEqual(244.7368m, Math.Round((decimal)r6.R1, 4));
            Assert.AreEqual(246.3235m, Math.Round((decimal)r6.R2, 4));
            Assert.AreEqual(247.91025m, Math.Round((decimal)r6.R3, 5));
            Assert.AreEqual(252.6705m, Math.Round((decimal)r6.R4, 4));
        }
Пример #14
0
 public PivotPointsResult[] CalculatePivotPoints(IEnumerable <IQuote> quotes, PeriodSize period)
 {
     return(Indicator.GetPivotPoints(quotes, period).ToArray());
 }
Пример #15
0
        public IEnumerable <object> GetAllStandardSignals(string pair = "BTCUSDT", PeriodSize periodSize = PeriodSize.ThirtyMinutes, long?fromTicks = null, long?toTicks = null)
        {
            DateTime from = DateTime.Now.AddDays(-2);
            DateTime to   = DateTime.Now;

            if (fromTicks.HasValue)
            {
                from = new DateTime(fromTicks.Value);
            }
            if (toTicks.HasValue)
            {
                to = new DateTime(toTicks.Value);
            }

            if (to > DateTime.Now)
            {
                to = DateTime.Now;
            }

            IEnumerable <PatternQuote> history = HistoryService.GetHistory(pair, periodSize, from, to).Select(s => ToDerived <Quote, PatternQuote>(s));

            var result = Indicator.GetBearishEngulfing(history);

            result = result.Union(Indicator.GetDarkCloudCover(history)); // "date": "2021-01-14T15:30:00Z"  not confirmed ony 2 Candles
            result = result.Union(Indicator.GetEveningStar(history));
            result = result.Union(Indicator.GetHangingMan(history));     //   "date": "2021-01-15T22:00:00Z"  ??? highest?
            result = result.Union(Indicator.GetShootingStar(history));   // "date": "2021-01-16T00:30:00Z"
            result = result.Union(Indicator.GetThreeBlackCrows(history));
            result = result.Union(Indicator.GetBullishEngulfing(history));
            result = result.Union(Indicator.GetHammer(history));             // "date": "2021-01-15T16:00:00Z"
            result = result.Union(Indicator.GetInverseHammer(history));      //  "date": "2021-01-15T04:30:00Z"
            result = result.Union(Indicator.GetMorningStar(history));
            result = result.Union(Indicator.GetPiercingLine(history));       // 14.01.2021 10UTC
            result = result.Union(Indicator.GetThreeWhiteSoldiers(history)); //"date": "2021-01-14T14:00:00Z"
            result = result.Union(Indicator.GetDragonflyDoji(history));      //  "date": "2021-01-17T17:30:00Z"
            result = result.Union(Indicator.GetGraveStoneDoji(history));
            result = result.Union(Indicator.GetLongLeggedDoji(history));     //  "date": "2021-01-15T01:00:00Z"
            result = result.Union(Indicator.GetMarubozu(history));           //"source": "Marubozu open bullish", "date": "2021-01-14T17:00:00Z"
                                                                             //  result = result.Union(Indicator.GetSpinningTop(history));   // "date": "2021-01-17T08:00:00Z"


            var groupedPatterns = result.GroupBy(r => r.Source).ToDictionary(x => x.Key, y => y.ToList());

            //bool isFirstElemet = true;


            //List<object[]> returnValue = new List<object[]>();

            //foreach (var v in history)
            //{
            //    if (isFirstElemet)
            //    {
            //        isFirstElemet = false;

            //        List<object> curHeader = new List<object>();
            //        curHeader.Add("Date");
            //        curHeader.Add("Low");
            //        curHeader.Add("Open");
            //        curHeader.Add("Close");
            //        curHeader.Add("High");
            //        foreach (var key in groupedPatterns)
            //        {
            //            curHeader.Add(key.Key);
            //        }
            //        returnValue.Add(curHeader.ToArray());

            //    }
            //    List<object> curEntry = new List<object>();
            //    curEntry.Add(v.Date);
            //    curEntry.Add(v.Low);
            //    curEntry.Add(v.Open);
            //    curEntry.Add(v.Close);
            //    curEntry.Add(v.High);
            //    foreach (var key in groupedPatterns)
            //    {
            //        var pattern = key.FirstOrDefault(p => p.Date == v.Date);
            //        if (pattern == null)
            //            curEntry.Add(null);
            //        else
            //            curEntry.Add(pattern.Candle.High);
            //    }

            //    returnValue.Add(curEntry.ToArray());

            //}

            return(new List <object>()
            {
                history.Select(s => s as IQuote), groupedPatterns
            });
        }
Пример #16
0
    // PIVOT POINTS
    /// <include file='./info.xml' path='indicator/*' />
    ///
    public static IEnumerable <PivotPointsResult> GetPivotPoints <TQuote>(
        this IEnumerable <TQuote> quotes,
        PeriodSize windowSize,
        PivotPointType pointType = PivotPointType.Standard)
        where TQuote : IQuote
    {
        // sort quotes
        List <TQuote> quotesList = quotes.SortToList();

        // initialize
        int length = quotesList.Count;
        List <PivotPointsResult> results     = new(length);
        PivotPointsResult        windowPoint = new();
        TQuote h0;

        if (length == 0)
        {
            return(results);
        }
        else
        {
            h0 = quotesList[0];
        }

        int  windowId = GetWindowNumber(h0.Date, windowSize);
        int  windowEval;
        bool firstWindow = true;

        decimal windowHigh  = h0.High;
        decimal windowLow   = h0.Low;
        decimal windowOpen  = h0.Open;
        decimal windowClose = h0.Close;

        // roll through quotes
        for (int i = 0; i < length; i++)
        {
            TQuote q = quotesList[i];

            PivotPointsResult r = new()
            {
                Date = q.Date
            };

            // new window evaluation
            windowEval = GetWindowNumber(q.Date, windowSize);

            if (windowEval != windowId)
            {
                windowId    = windowEval;
                firstWindow = false;

                // set new levels
                if (pointType == PivotPointType.Woodie)
                {
                    windowOpen = q.Open;
                }

                windowPoint = GetPivotPoint <PivotPointsResult>(
                    pointType, windowOpen, windowHigh, windowLow, windowClose);

                // reset window min/max thresholds
                windowOpen = q.Open;
                windowHigh = q.High;
                windowLow  = q.Low;
            }

            // add levels
            if (!firstWindow)
            {
                // pivot point
                r.PP = windowPoint.PP;

                // support
                r.S1 = windowPoint.S1;
                r.S2 = windowPoint.S2;
                r.S3 = windowPoint.S3;
                r.S4 = windowPoint.S4;

                // resistance
                r.R1 = windowPoint.R1;
                r.R2 = windowPoint.R2;
                r.R3 = windowPoint.R3;
                r.R4 = windowPoint.R4;
            }

            results.Add(r);

            // capture window threholds (for next iteration)
            windowHigh  = (q.High > windowHigh) ? q.High : windowHigh;
            windowLow   = (q.Low < windowLow) ? q.Low : windowLow;
            windowClose = q.Close;
        }

        return(results);
    }