Пример #1
0
        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);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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");
        }