Exemple #1
0
        /// <summary>
        /// 下载所有的代码
        /// </summary>
        public static void DownAllCodes()
        {
            // 当然,下载所有的不现实,国内期货也才不到30年时间,按照20年的长度来获取就差不多了,再早的参考价值也不高了
            var now = DateTime.Now;

            for (var i = 2000; i < now.Year; i++)
            {
                var tradeDate = i + now.ToString("-MM-dd");
                var allCodes  = GetAllCodes(tradeDate);

                using (var db = new QuantDBContext())
                {
                    var dbCodes          = db.CodeInfos.Select(o => o.WindCode).ToArray();
                    var existsWindCode   = new HashSet <string>(dbCodes);
                    var notfindWindCodes = allCodes.Where(o => !existsWindCode.Contains(o.WindCode)).Select(o => o.WindCode).ToArray();

                    if (notfindWindCodes.Length > 0)
                    {
                        var ci = Down(notfindWindCodes, tradeDate);
                        Console.WriteLine($"find new windCodes {ci.Length}");
                        db.CodeInfos.AddRange(ci);
                        db.SaveChanges();
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// 下载已经结束交易的品种数据
        /// </summary>
        public static void DownFinishTrade()
        {
            CodeInfo[] codes;
            using (var db = new QuantDBContext())
            {
                codes = db.CodeInfos.Where(o => o.LastTradeDate < DateTime.Now.Date).OrderByDescending(o => o.LastTradeDate).ToArray();
            }

            // Parallel.ForEach(codes, (item, ParallelLoopState) =>
            foreach (var item in codes)
            {
                using (var db = new QuantDBContext())
                {
                    try
                    {
                        // 先下载日K的看看效果
                        var dbItems = db.Bars.Where(o => o.WindCode == item.WindCode && o.BarType == BarType.Day).OrderBy(o => o.TradingDay).ToArray();

                        var startDate = item.IssueDate.ToString("yyyyMMdd");
                        var endDate   = item.LastTradeDate.ToString("yyyyMMdd");

                        var firtItem = dbItems.FirstOrDefault();
                        var endItem  = dbItems.LastOrDefault();
                        if (firtItem != null && firtItem.TradingDay.ToString() == startDate &&
                            endItem != null && endItem.TradingDay.ToString() == endDate)
                        {
                            Console.WriteLine($"Ignore {item.WindCode}");
                        }
                        else
                        {
                            var bars = DumpBarByWind(item.WindCode, startDate, endDate, BarType.Day);
                            Console.WriteLine($"{item.WindCode} {startDate} - {endDate} count:{bars.Length}");

                            var count = 0;
                            foreach (var newItem in bars)
                            {
                                if (!dbItems.Any(o => o.TradingDay == newItem.TradingDay))
                                {
                                    db.Add(newItem);
                                    count++;
                                }
                            }

                            if (count > 0)
                            {
                                Console.WriteLine($"add {item.WindCode} {count}");
                                db.SaveChanges();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(item.WindCode);
                        Console.WriteLine(ex);
                    }
                }
            }
            // });
        }
Exemple #3
0
        static void InitDatabase()
        {
            var db = new QuantDBContext();
            var databaseCreator = db.GetService <IRelationalDatabaseCreator>();

            Console.WriteLine(databaseCreator.GenerateCreateScript());
            databaseCreator.CreateTables();
        }
Exemple #4
0
        /// <summary>
        /// 下载到现在还在交易的数据
        /// </summary>
        public static void DownTradeing()
        {
            using (var db = new QuantDBContext())
            {
                var codes = db.CodeInfos.Where(o => o.LastTradeDate > DateTime.Now).ToArray();
                foreach (var item in codes)
                {
                    try
                    {
                        // 先下载日K的看看效果
                        var dbItems     = db.Bars.Where(o => o.WindCode == item.WindCode && o.BarType == BarType.Day).ToArray();
                        var endDateItem = dbItems.OrderByDescending(o => o.TradingDay).FirstOrDefault();
                        var startDate   = item.IssueDate.ToString("yyyyMMdd");
                        var endDate     = DateTime.Now.ToString("yyyyMMdd");

                        if (endDateItem != null)
                        {
                            startDate = endDateItem.TradingDay.ToString();
                            if (startDate == endDate)
                            {
                                continue;
                            }
                        }

                        var bars = DumpBarByWind(item.WindCode, startDate, endDate, BarType.Day);
                        Console.WriteLine($"{item.WindCode} {startDate} - {endDate} count:{bars.Length}");

                        var count = 0;
                        foreach (var newItem in bars)
                        {
                            if (!dbItems.Any(o => o.TradingDay == newItem.TradingDay))
                            {
                                db.Add(newItem);
                                count++;
                            }
                        }

                        if (count > 0)
                        {
                            Console.WriteLine($"add {item.WindCode} {count}");
                            db.SaveChanges();
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(item.WindCode);
                        Console.WriteLine(ex);
                    }
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// 下载已经结束交易的品种数据
        /// 这里只下载分钟数据
        /// </summary>
        public static void DownFinishMinTrade(BarType barType)
        {
            if (barType == BarType.Day || barType == BarType.Week)
            {
                return;
            }

            CodeInfo[] codes;
            using (var db = new QuantDBContext())
            {
                codes = db.CodeInfos.Where(o => o.LastTradeDate < DateTime.Now.Date).OrderByDescending(o => o.LastTradeDate).ToArray();
            }

            foreach (var item in codes)
            {
                using (var db = new QuantDBContext())
                {
                    try
                    {
                        // 先下载日K的看看效果
                        var dbItems = db.Bars.Where(o => o.WindCode == item.WindCode && o.BarType == barType).OrderBy(o => o.D).ToArray();

                        var startDate = item.IssueDate.ToString("yyyyMMdd");
                        var endDate   = item.LastTradeDate.ToString("yyyyMMdd");

                        var firtItem = dbItems.FirstOrDefault();
                        var endItem  = dbItems.LastOrDefault();
                        if (firtItem != null && firtItem.TradingDay.ToString() == startDate &&
                            endItem != null && endItem.TradingDay.ToString() == endDate)
                        {
                            Console.WriteLine($"Ignore {item.WindCode}");
                        }
                        else
                        {
                            var startDateTime = item.IssueDate;
                            if (endItem != null)
                            {
                                startDateTime = endItem.D.AddMinutes(-1);
                            }

                            var bars = DumpBarByWind(item.WindCode, startDateTime.ToString("yyyy-MM-dd 21:00:00"), item.LastTradeDate.ToString("yyyy-MM-dd 13:00:00"), barType);
                            Console.WriteLine($"{item.WindCode} {startDate} - {endDate} count:{bars.Length}");

                            var count = 0;
                            foreach (var newItem in bars)
                            {
                                if (!dbItems.Any(o => o.D == newItem.D))
                                {
                                    db.Add(newItem);
                                    count++;
                                }
                            }

                            if (count > 0)
                            {
                                Console.WriteLine($"add {item.WindCode} {count}");
                                db.SaveChanges();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(item.WindCode);
                        Console.WriteLine(ex);
                    }
                }
            }
        }