Esempio n. 1
0
        public static async Task <List <IndexQuotation> > GetIndexQuotations(DateTime begin, DateTime end, params string[] codes)
        {
            using (var client = new HttpClient())
            {
                var indexCode = string.Join("','", codes);
                var url       = $"http://www.swsindex.com/handler.aspx?tablename=swindexhistory&key=id&p={{0}}&where=swindexcode in ('{indexCode}') and  " +
                                $"BargainDate>='{begin.ToString("yyyy-MM-dd")}' and  BargainDate<='{end.ToString("yyyy-MM-dd")}'&orderby=swindexcode asc,BargainDate_1&" +
                                $"fieldlist=SwIndexCode,SwIndexName,BargainDate,CloseIndex,BargainAmount,Markup,OpenIndex,MaxIndex,MinIndex,BargainSum&pagecount=13664";
                var page   = 1;
                var result = new List <IndexQuotation>();
                while (true)
                {
                    Log.Information($"获取申万指数行情数据('{indexCode}') {begin}~{end} 第{page}页数据...");
                    var json = await client.GetStringAsync(string.Format(url, page));

                    var data = json?.Replace('\'', '"').ToObj <JObject>()?["root"];
                    if (data == null || !data.Any())
                    {
                        return(result);
                    }

                    foreach (var item in data)
                    {
                        var quotation = new IndexQuotation
                        {
                            IndexCode = item["SwIndexCode"].ToString(),
                            IndexName = item["SwIndexName"].ToString()
                        };
                        DateTime.TryParse(item["BargainDate"].ToString(), out DateTime date);
                        decimal.TryParse(item["CloseIndex"].ToString(), out decimal close);
                        decimal.TryParse(item["BargainAmount"].ToString(), out decimal vol);
                        decimal.TryParse(item["Markup"].ToString(), out decimal markup);
                        decimal.TryParse(item["OpenIndex"].ToString(), out decimal open);
                        decimal.TryParse(item["MaxIndex"].ToString(), out decimal max);
                        decimal.TryParse(item["MinIndex"].ToString(), out decimal min);
                        decimal.TryParse(item["BargainSum"].ToString(), out decimal amount);
                        quotation.Date   = date;
                        quotation.Close  = close;
                        quotation.Volume = vol * 10000;
                        quotation.Markup = markup / 100;
                        quotation.Open   = open;
                        quotation.Max    = max;
                        quotation.Min    = min;
                        quotation.Amount = amount;
                        result.Add(quotation);
                    }

                    page++;
                }
            }
        }
Esempio n. 2
0
        private static void LoadFiles()
        {
            var files = Directory.GetFiles("data");

            if (!files.Any())
            {
                return;
            }

            foreach (var f in files)
            {
                if (!f.EndsWith(".xls") && !f.EndsWith(".xlsx") && !f.EndsWith(".xlsb"))
                {
                    continue;
                }

                var file    = new FileInfo(f);
                var version = DataDao.GetFileVersion(file.FullName);
                if (version != null && file.LastWriteTime <= version.LastWriteTime)
                {
                    continue;
                }

                using (var stream = File.OpenRead(f))
                    using (var reader = ExcelReaderFactory.CreateReader(stream))
                    {
                        var result = reader.AsDataSet();
                        var rows   = result?.Tables?[0]?.Rows;
                        if (rows == null || rows.Count <= 0)
                        {
                            continue;
                        }
                        if (!IsQuotation(rows[0]))
                        {
                            continue;
                        }

                        var quotations = new List <IndexQuotation>();
                        for (int i = 1; i < rows.Count; i++)
                        {
                            if (string.IsNullOrWhiteSpace(rows[i][0]?.ToString()))
                            {
                                break;
                            }

                            var quotation = new IndexQuotation
                            {
                                IndexCode = rows[i][0].ToString(),
                                IndexName = rows[i][1].ToString()
                            };
                            DateTime.TryParse(rows[i][2].ToString(), out DateTime date);
                            decimal.TryParse(rows[i][3].ToString().Replace(",", ""), out decimal open);
                            decimal.TryParse(rows[i][4].ToString().Replace(",", ""), out decimal max);
                            decimal.TryParse(rows[i][5].ToString().Replace(",", ""), out decimal min);
                            decimal.TryParse(rows[i][6].ToString().Replace(",", ""), out decimal close);
                            decimal.TryParse(rows[i][7].ToString().Replace(",", ""), out decimal markupAmount);
                            decimal.TryParse(rows[i][8].ToString().Replace(",", ""), out decimal markup);
                            decimal.TryParse(rows[i][9].ToString().Replace(",", ""), out decimal vol);
                            decimal.TryParse(rows[i][10].ToString().Replace(",", ""), out decimal amount);
                            quotation.Date         = date;
                            quotation.Open         = open;
                            quotation.Max          = max;
                            quotation.Min          = min;
                            quotation.Close        = close;
                            quotation.MarkupAmount = markupAmount;
                            quotation.Markup       = markup;
                            quotation.Volume       = vol;
                            quotation.Amount       = amount;
                            quotations.Add(quotation);
                        }
                        DataDao.UpdateIndexQuotations(quotations);
                    }

                if (version == null)
                {
                    DataDao.AddFileVersion(new FileVersion
                    {
                        LastAccessTime = file.LastAccessTime,
                        CreationTime   = file.CreationTime,
                        FullName       = file.FullName,
                        LastWriteTime  = file.LastWriteTime
                    });
                }
                else
                {
                    version.LastWriteTime  = file.LastWriteTime;
                    version.LastAccessTime = file.LastAccessTime;
                    DataDao.UpdateFileVersion(version);
                }
            }
        }