Skip to content

MessiDaGod/YahooQuotesApi

 
 

Repository files navigation

YahooQuotesApi   Build status NuGet NuGet License: MIT

Retrieves snapshot quotes and historical quotes, dividends and splits from Yahoo Finance

  • supports .NET 5
  • supports HTTP/1.1 and HTTP/2
  • properties intellisense support
  • dependencies: Polly, NodaTime
  • simple and intuitive API
  • fault-tolerant
  • tested

Installation

PM> Install-Package YahooQuotesApi

Examples

using NodaTime;
using YahooQuotesApi;

snapshot

YahooQuotes yahooQuotes = new YahooQuotesBuilder().Build();

Security? security = await yahooQuotes.GetAsync("AAPL");

if (security == null)
    throw new ArgumentException("Unknown symbol: AAPL.");

Assert.Equal("Apple Inc.", security.LongName);
Assert.True(security.RegularMarketPrice > 0);

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

snapshots with history

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.");

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

CandleTick[] priceHistory = security.PriceHistory.Value;
CandleTick tick = priceHistory[0];

Assert.Equal(new LocalDate(2020, 1, 2), tick.Date);
Assert.Equal(160.62, tick.Close);

snapshots with history in base currency

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.");

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

CandleTick tick = security.PriceHistory.Value[0];
Assert.Equal(new LocalDate(2020, 7, 15), tick.Date);
Assert.Equal(309.202, tick.Close); // in USD

Instant 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

About

Yahoo Finance Quotes API

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%