public List <StockTransaction> GetStockTransactionWithRedis(string code, DateTime start, DateTime end)
        {
            //logger.Info(string.Format("begin to fetch stock{0} minute data from {1} to {2}...", code, start, end));
            var stocks = new List <StockTransaction>();

            if (redis == false)
            {
                return(stocks);
            }
            var tradingDates = dateTimeRepo.GetStockTransactionDate(start.Date, end.Date == DateTime.Now.Date?end.Date.AddDays(-1):end.Date);
            var timeInterval = new StockMinuteInterval(start, end, tradingDates);

            while (timeInterval.MoveNext())
            {
                var currentTime        = timeInterval.Current;
                StockTransaction stock = FetchStockMinuteTransFromRedis(code, currentTime);
                if (stock == null)
                {
                    //从万德客户端API获取分钟数据
                    BulkLoadStockMinuteToSqlFromSource(code, currentTime);
                    BulkLoadStockMinuteToRedisFromSql(code, currentTime);
                    stock = FetchStockMinuteTransFromRedis(code, currentTime);
                }

                stocks.Add(stock);
            }
            //logger.Info(string.Format("completed fetching stock{0} minute data from {1} to {2}...", code, start, end));
            return(stocks);
        }
Exemple #2
0
        //获取分钟线数据,先从sql数据库拉取数据,如果没有数据,就从tick数据库拉取数据,并转换成分钟数据并存入sql数据库
        public List <StockMinuteTransaction> GetStockTransaction(string code, DateTime start, DateTime end)
        {
            //logger.Info(string.Format("begin to fetch stock{0} minute data from {1} to {2}...", code, start, end));
            var stocks       = new List <StockMinuteTransaction>();
            var stockLack    = new List <StockMinuteTransaction>();
            var tradingDates = dateTimeRepo.GetStockTransactionDate(start.Date, end.Date == DateTime.Now.Date ? end.Date.AddDays(-1) : end.Date);
            var timeInterval = new StockMinuteInterval(start, end, tradingDates);

            foreach (var currentDay in tradingDates)
            {
                var currentTime = currentDay.Date;
                //Console.WriteLine(currentTime);
                var stock = LoadStockMinuteFromSql(code, currentTime);
                if (stock.Count() == 0)
                {
                    //BulkLoadStockMinuteToSqlFromSource(code, currentTime);
                    try
                    {
                        stock = LoadStockMinuteToSqlFromSouceDaily(code, currentTime, false);
                        stockLack.AddRange(stock);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("exception!!!  {0}", e.Message);
                    }
                }
                stocks.AddRange(stock);
            }
            //logger.Info(string.Format("completed fetching stock{0} minute data from {1} to {2}...", code, start, end));
            var dt = transactionListToDataTable(stockLack);

            WriteToSql(dt);
            return(stocks);
        }