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 }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }