public List <StockInfo> LoadData(string symbol) { string uri = string.Format(URI, symbol, startOfYear); var stocks = new List <StockInfo>(); try { using (var web = new WebClient()) { string data = web.DownloadString(uri); string[] rows = data.Trim().Split('\n'); for (int i = 1; i < rows.Length; i++) { var cols = rows[i].Split(','); var stock = StockInfo.Create(symbol, rows[i]); if (stock != null) { stocks.Add(stock); } } // save to csv file using (var writer = new StreamWriter(string.Format("data/{0}.csv", symbol), false)) { writer.Write(data); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } return(stocks); }
private async Task Update() { var t = RefreshTimeSpan; try { while (true) { var addlist = new List <StockInfo>(); var deletelist = new List <StockInfo>(); var s = _stockAgent.GetAllStocks(); lock (this) { s.ForEach(x => { var ss = StockInfoList.FirstOrDefault(y => y.StockId == x.StockId); if (ss != null) { ss.Update(x); } else { var si = new StockInfo(); si.Create(_stockAgent.GetStock(x.StockId, DateTime.Now)); si.Update(x); addlist.Add(si); } }); StockInfoList.ForEach(x => { var ss = s.FirstOrDefault(y => y.StockId == x.StockId); if (ss == null) { deletelist.Add(x); } }); addlist.ForEach(x => StockInfoList.Add(x)); deletelist.ForEach(x => StockInfoList.Remove(x)); SortStockInfoList(); } await Task.Delay(t); } } catch (Exception e) { await _dialogService.ShowError(e, "错误", "确定", null); } }
public List <StockInfo> LoadData(string symbol) { string path = string.Format("data/{0}.csv", symbol); var stocks = new List <StockInfo>(); using (var reader = new StreamReader(path)) { string data = reader.ReadToEnd(); string[] rows = data.Trim().Split('\n'); for (int i = 1; i < rows.Length; i++) { var stock = StockInfo.Create(symbol, rows[i]); if (stock != null) { stocks.Add(stock); } } } return(stocks); }
static async Task Main(string[] args) { var tickersLimit = -1; var showHelp = false; var p = new OptionSet() { { "h|?|help", v => { showHelp = v != null; } }, { "l|limit=", v => { int.TryParse(v, out tickersLimit); } }, }; List <string> extra; try { extra = p.Parse(args); } catch (OptionException e) { Console.Write("greet: "); Console.WriteLine(e.Message); Console.WriteLine("Try `greet --help' for more information."); return; } if (showHelp) { ShowHelp(p); return; } var output = GetOutput(); var config = await GetTokensAsync(); if (config == null) { throw new ArgumentNullException(); } var tinkoffToken = config.Tinkoff.Tokens?.FirstOrDefault(); if (tinkoffToken == null) { throw new ArgumentNullException(); } var stockMarket = GetStockMarket(tinkoffToken, output); var fileStorage = GetFileStorage(); var dbStorage = GetDbStorage(config); var financeDataProviders = GetFinanceDataProviders(output, config); var financeDataManager = GetFinanceDataManager(output, financeDataProviders, dbStorage); var stockInfoCache = GetStockInfoCache(); var tickers = await stockMarket.GetTickersAsync(); var n = tickers.Length; var stockInfos = new List <StockInfo>(); var stockInfosFromCache = await stockInfoCache.GetAllAsync(); if (tickersLimit > 0) { output.Publish($"tickers limit = {tickersLimit}"); } var tryCount = 0; if (tickersLimit < 0) { output.Publish($"Fill data"); await financeDataManager.FillData(tickers); } for (int i = 0; i < n; i++) { if (i == tickersLimit) { break; } var ticker = tickers[i]; output.Publish($"{ticker} {i}/{n}"); try { var stockInfo = stockInfosFromCache.FirstOrDefault(x => x.Ticker == ticker); if (stockInfo == null) { var companyInfo = await financeDataManager.GetCompanyInfoAsync(ticker); stockInfo = StockInfo.Create( ticker, companyInfo.Industry, companyInfo.CompanyName, companyInfo.Logo, companyInfo.CurrentPrice, companyInfo.PriceTarget, companyInfo.Recommendations); await stockInfoCache.SaveAsync(stockInfo); } stockInfos.Add(stockInfo); } catch (System.Net.Http.HttpRequestException ex) { if (tryCount > 3) { return; } output.Publish($"{ticker} {i}/{n} else one try"); await Task.Delay(2000); i--; tryCount++; } tryCount = 0; } await fileStorage.CreateReportAsync(stockInfos.ToArray()); await stockInfoCache.ClearAsync(); output.Publish($"report saved"); }