public static async Task <DataTable> RunYahooSource(string stockId, DateTime start, DateTime end, DataTable DtStocks) { _country = Country.USA; _config = GetConfiguration(); _provider = new StockQuoteSourceProvider(_config, _country); IStockQuoteDataSource yahooDataSource = GetYahooDataSource(_provider); if (yahooDataSource == null) { Console.WriteLine("Error : Yahoo data source object is null"); return(new DataTable()); } IReadOnlyList <IStockQuoteFromDataSource> results = await yahooDataSource.GetHistoricalQuotesAsync(_country, stockId, start, end, WriteToError); Object[] stockPrice = new Object[results.Count + 1]; stockPrice[0] = stockId.ToUpper(); int i = 1; foreach (IStockQuoteFromDataSource quote in results) { if (DtStocks.Rows.Count == 0) { DtStocks.Columns.Add(quote.TradeDateTime.ToShortDateString(), typeof(Double)); } stockPrice[i] = quote.ClosePrice; i++; } DtStocks.Rows.Add(stockPrice); PrintToCsv(DtStocks); return(DtStocks); }
public void GetMostRecentQuoteTest(Country country, string stockId) { IConfiguration config = TestServiceProvider.GetTestConfiguration(); IStockQuoteProvider provider = new StockQuoteSourceProvider(config, country); IStockQuoteDataSource yahooSource = provider.GetStockDataSources().FirstOrDefault(a => a.Source == Contracts.StockQuoteSource.Yahoo); Assert.NotNull(yahooSource); IStockQuoteFromDataSource result = yahooSource.GetMostRecentQuoteAsync(country, stockId, WriteToErrorLogAction).Result; Assert.NotNull(result); Assert.True(result.IsValid); }
static async Task RunAlphaVantageSource(string stockId) { IStockQuoteDataSource alphaVantageDataSource = GetAlphaVantageDataSource(_provider); if (alphaVantageDataSource == null) { Console.WriteLine("Error : Yahoo data source object is null"); return; } IStockQuoteFromDataSource quote = await alphaVantageDataSource.GetMostRecentQuoteAsync(_country, stockId, WriteToError).ConfigureAwait(false); if (quote != null) { PrintQuote(quote); } }
/// <summary> /// Get a list of stock data source /// </summary> /// <returns></returns> public IReadOnlyList <IStockQuoteDataSource> GetStockDataSources() { if (_dataSourceList == null) { _dataSourceList = new List <IStockQuoteDataSource>(); // Yahoo is common for now IStockQuoteDataSource yahooDataSource = CreateStockSource(Contracts.StockQuoteSource.Yahoo); if (yahooDataSource != null) { _dataSourceList.Add(yahooDataSource); } switch (_country) { case Country.Taiwan: // TODO : add later break; case Country.USA: IStockQuoteDataSource alphaVantageSource = CreateStockSource(Contracts.StockQuoteSource.AlphaVantage); if (alphaVantageSource != null) { _dataSourceList.Add(CreateStockSource(Contracts.StockQuoteSource.AlphaVantage)); } break; case Country.HK: // TODO: add later if there exists a better source for HK break; case Country.Test: // There is no data source for Test break; default: break; } } return(_dataSourceList); }
//just for tests public static async Task <IReadOnlyList <IStockQuoteFromDataSource> > GetFromYahooSourceAsList(string stockId, DateTime start, DateTime end) { _country = Country.USA; _config = GetConfiguration(); _provider = new StockQuoteSourceProvider(_config, _country); IStockQuoteDataSource yahooDataSource = GetYahooDataSource(_provider); if (yahooDataSource == null) { Console.WriteLine("Error : Yahoo data source object is null"); return(new List <IStockQuoteFromDataSource>()); } var results = await yahooDataSource .GetHistoricalQuotesAsync(_country, stockId, start, end, WriteToError); return(results); }
public void GetHistoricalQuotesTest(Country country, string stockId) { IConfiguration config = TestServiceProvider.GetTestConfiguration(); IStockQuoteProvider provider = new StockQuoteSourceProvider(config, country); IStockQuoteDataSource yahooSource = provider.GetStockDataSources().FirstOrDefault(a => a.Source == Contracts.StockQuoteSource.Yahoo); Assert.NotNull(yahooSource); DateTime start = new DateTime(2018, 3, 12); DateTime end = new DateTime(2018, 3, 16); IReadOnlyList <IStockQuoteFromDataSource> results = yahooSource.GetHistoricalQuotesAsync(country, stockId, start, end, WriteToErrorLogAction).Result; Assert.NotNull(results); Assert.Equal(5, results.Count); foreach (IStockQuoteFromDataSource data in results) { Assert.True(data.IsValid); } }