Ejemplo n.º 1
0
        public async Task SnapshotWithPriceHistoryInBaseCurrency()
        {
            YahooQuotes yahooQuotes = new YahooQuotesBuilder()
                                      .HistoryStarting(Instant.FromUtc(2020, 7, 15, 0, 0))
                                      .WithCaching(snapshotDuration: Duration.FromMinutes(30), historyDuration: Duration.FromHours(6))
                                      .Build();

            Security security = await yahooQuotes
                                .GetAsync("TSLA", HistoryFlags.PriceHistory, historyBase : "JPY=X")
                                ?? throw new ArgumentException("Unknown symbol: TSLA.");

            Assert.Equal("Tesla, Inc.", security.ShortName);
            Assert.Equal("USD", security.Currency);
            Assert.Equal("America/New_York", security.ExchangeTimezone?.Id);

            PriceTick tick = security.PriceHistory.Value[0];

            Assert.Equal(new LocalDate(2020, 7, 15), tick.Date);
            Assert.Equal(309.202, tick.Close); // in USD

            var instant = new LocalDateTime(2020, 7, 15, 16, 0, 0)
                          .InZoneLeniently(security.ExchangeTimezone !).ToInstant();

            ValueTick tickBase = security.PriceHistoryBase.Value[0];

            Assert.Equal(instant, tickBase.Date);
            Assert.Equal(33139, tickBase.Value, 0);             // in JPY
        }
Ejemplo n.º 2
0
        public async Task SingleSecurityTest()
        {
            var yahooQuotes = new YahooQuotesBuilder(Logger)
                              .HistoryStarting(Instant.FromUtc(2020, 1, 1, 0, 0))
                              .Build();
            var security = await yahooQuotes.GetAsync("IBM", HistoryFlags.PriceHistory) ?? throw new ArgumentNullException();

            Assert.NotEmpty(security.PriceHistory.Value);
        }
Ejemplo n.º 3
0
        public async Task Snapshots()
        {
            YahooQuotes yahooQuotes = new YahooQuotesBuilder().Build();

            Dictionary <string, Security?> securities = await yahooQuotes.GetAsync(new[] { "AAPL", "BP.L", "USDJPY=X" });

            Security security = securities["BP.L"] ?? throw new ArgumentException("Unknown symbol");

            Assert.Equal("BP p.l.c.", security.LongName);
            Assert.Equal("GBP", security.Currency, true);
            Assert.Equal("LSE", security.Exchange);
            Assert.True(security.RegularMarketPrice > 0);
        }
Ejemplo n.º 4
0
        public async Task TestSplit()
        {
            var date     = new LocalDate(2014, 6, 9);
            var timeZone = DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York");
            var instant  = date.AtStartOfDayInZone(timeZone !).ToInstant();

            var yahooQuotes = new YahooQuotesBuilder(Logger)
                              .HistoryStarting(instant)
                              .Build();

            var security = await yahooQuotes.GetAsync("AAPL", HistoryFlags.SplitHistory) ?? throw new ArgumentException();

            SplitTick split = security.SplitHistory.Value[0];

            Assert.Equal(1, split.BeforeSplit);
            Assert.Equal(7, split.AfterSplit);
        }
Ejemplo n.º 5
0
        public async Task TestFrequencyWeekly()
        {
            var timeZone  = DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York");
            var startDate = new LocalDate(2019, 1, 7);
            var zdt       = startDate.At(new LocalTime(16, 0, 0)).InZoneStrictly(timeZone !);

            var yahooQuotes = new YahooQuotesBuilder(Logger)
                              .SetPriceHistoryFrequency(Frequency.Weekly)
                              .HistoryStarting(zdt.ToInstant())
                              .Build();

            var security = await yahooQuotes.GetAsync("AAPL", HistoryFlags.PriceHistory);

            var ticks = security !.PriceHistory.Value;

            Assert.Equal(startDate, ticks[0].Date); // previous Monday
            Assert.Equal(39.20, ticks[1].Close, 2);
        }
Ejemplo n.º 6
0
        public async Task TestFrequencyDaily()
        {
            var startDate = new LocalDate(2019, 1, 10);
            var timeZone  = DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York");
            var zdt       = startDate.AtStartOfDayInZone(timeZone !);

            var yahooQuotes = new YahooQuotesBuilder(Logger)
                              .SetPriceHistoryFrequency(Frequency.Daily)
                              .HistoryStarting(zdt.ToInstant())
                              .Build();

            var security = await yahooQuotes.GetAsync("AAPL", HistoryFlags.PriceHistory);

            var ticks = security !.PriceHistory.Value;

            Assert.Equal(zdt.LocalDateTime.Date, ticks[0].Date);
            Assert.Equal(38.13, ticks[0].Open, 1);
        }
Ejemplo n.º 7
0
        public async Task SnapshotWithPriceHistory()
        {
            YahooQuotes yahooQuotes = new YahooQuotesBuilder()
                                      .HistoryStarting(Instant.FromUtc(2020, 1, 1, 0, 0))
                                      .Build();

            Security security = await yahooQuotes.GetAsync("MSFT", HistoryFlags.PriceHistory) ??
                                throw new ArgumentException("Unknown symbol: MSFT.");

            Assert.Equal("NasdaqGS", security.FullExchangeName);

            PriceTick[] priceHistory = security.PriceHistory.Value;

            PriceTick tick = priceHistory[0];

            Assert.Equal(new LocalDate(2020, 1, 2), tick.Date);
            Assert.Equal(160.62, tick.Close);
        }
Ejemplo n.º 8
0
        public async Task TestDividend()
        {
            var date = new LocalDate(2021, 2, 5);
            var tz   = DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York");

            var zdt = date.AtStartOfDayInZone(tz !);

            var yahooQuotes = new YahooQuotesBuilder(Logger)
                              .HistoryStarting(zdt.ToInstant())
                              .Build();

            var security = await yahooQuotes.GetAsync("AAPL", HistoryFlags.DividendHistory) ?? throw new ArgumentException();

            var dividends = security.DividendHistory.Value.ToList();
            var dividend  = dividends.First();

            Assert.Equal(0.205, dividend.Dividend);
            Assert.Equal(zdt.LocalDateTime.Date, dividend.Date);
        }
Ejemplo n.º 9
0
        public async Task TestDates()
        {
            var symbol   = "BA.L";
            var timeZone = DateTimeZoneProviders.Tzdb.GetZoneOrNull("Europe/London")
                           ?? throw new TimeZoneNotFoundException();
            var date = new LocalDateTime(2021, 3, 17, 16, 30).InZoneStrictly(timeZone).ToInstant();

            var yahooQuotes = new YahooQuotesBuilder(Logger)
                              .HistoryStarting(date)
                              .UseNonAdjustedClose()
                              .Build();

            var security = await yahooQuotes.GetAsync(symbol, HistoryFlags.PriceHistory)
                           ?? throw new ArgumentException();

            Assert.Equal(timeZone, security.ExchangeTimezone);

            var ticks = security.PriceHistoryBase.Value;

            Assert.Equal(date, ticks[0].Date);
            Assert.Equal(501, ticks[0].Value);
        }
Ejemplo n.º 10
0
        public async Task TestFrequencyMonthly()
        {
            var timeZone  = DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York");
            var startDate = new LocalDate(2019, 2, 1);
            var zdt       = startDate.At(new LocalTime(16, 0, 0)).InZoneStrictly(timeZone !);

            var yahooQuotes = new YahooQuotesBuilder(Logger)
                              .SetPriceHistoryFrequency(Frequency.Monthly)
                              .HistoryStarting(zdt.ToInstant())
                              .Build();

            var security = await yahooQuotes.GetAsync("AAPL", HistoryFlags.PriceHistory);

            var ticks = security !.PriceHistory.Value;

            foreach (var tick in ticks)
            {
                Write($"{tick.Date} {tick.Close}");
            }

            Assert.Equal(startDate, ticks[0].Date); // next start of month!
            Assert.Equal(47.49, ticks[1].Close, 2);
        }