private List <StockBasicInfo> loadInfoDailyFromSql(string code, DateTime start, DateTime end)
        {
            List <StockBasicInfo> infoList = new List <StockBasicInfo>();
            var timeList = SplitTimeYearly(start, end);

            foreach (var day in timeList)
            {
                DateTime dayStart = day;
                DateTime dayEnd   = DateTimeExtension.DateUtils.PreviousOrCurrentTradeDay(new DateTime(day.Year, 12, 31));
                if (dayEnd > end)
                {
                    dayEnd = end;
                }
                var sqlStr = string.Format(@"select  [Code],[DateTime] from [StockInfo].[dbo].[BasicInfoDaily{0}] 
where Code='{1}' and DateTime>='{2}' and DateTime<='{3}'",
                                           dayStart.Year, code, dayStart, dayEnd);
                var dt        = sqlReader.GetDataTable(sqlStr);
                var tradedays = dateRepo.GetStockTransactionDate(dayStart, dayEnd);
                if (dt.Rows.Count < tradedays.Count()) //数据不足,去万德拉取
                {
                    var dtAll  = windReader.GetDailyDataTable(code, "", dayStart, dayEnd);
                    var dtLack = getLackData(dt, dtAll);
                    if (dtLack.Rows.Count > 0)
                    {
                        WriteToSql(dtLack);
                    }
                    infoList.AddRange(dataTableToList(dtAll));
                }
                else
                {
                    infoList.AddRange(dataTableToList(dt));
                }
            }
            return(infoList);
        }
        public List <StockTransaction> GetStockTransactionFromLocalSqlByCodeWithRedis(string code, DateTime start, DateTime end)
        {
            var stocks = new List <StockTransaction>();

            if (redis == false)
            {
                return(stocks);
            }
            DateTime startTime = start.Date;
            DateTime endTime   = end.AddHours(15);

            code = code.ToUpper();
            if (end.Date >= DateTime.Now.Date)
            {
                throw new ArgumentException("结束时间只能小于当天时间");
            }
            var tradingDates = dateTimeRepo.GetStockTransactionDate(start.Date, end.Date == DateTime.Now.Date ? end.Date.AddDays(-1) : end.Date);

            foreach (var date in tradingDates)
            {
                LoadDataToRedisFromSqlServerIfNecessary(code, date);
            }
            stocks = FetchDataFromRedis(code, tradingDates).Where(c => c.DateTime >= startTime && c.DateTime <= endTime).OrderBy(c => c.DateTime).ToList();
            return(stocks);
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        public List <StockTransaction> GetStockTransaction(string code, DateTime begin, DateTime end)
        {
            //logger.Info(string.Format("begin to fetch stock{0} daily data from {1} to {2}...", code, begin, end));
            var stocks       = new List <StockTransaction>();
            var tradingDates = dateRepo.GetStockTransactionDate(begin, end);

            if (tradingDates != null && tradingDates.Count > 0)
            {
                LoadStockTransactionToSqlFromSource(code, tradingDates);
                var dt = GetStockDailyTransactionFromSqlServer(code, begin, end);
                stocks = datatableToList(dt);
            }
            //logger.Info(string.Format("completed fetching stock{0} daily data from {1} to {2}...", code, begin, end));
            return(stocks);
        }
Ejemplo n.º 5
0
        public List <StockTickTransaction> GetStockTransaction(string code, DateTime start, DateTime end, bool record = true)
        {
            //logger.Info(string.Format("begin to fetch stock{0} tick data from {1} to {2}...", code, start, end));
            List <StockTickTransaction> ticks = new List <StockTickTransaction>();

            code = code.ToUpper();
            if (end.Date >= DateTime.Now.Date)
            {
                throw new ArgumentException("结束时间只能小于当天时间");
            }
            //处理开始时间和结束时间在交易时间段外取一些时间
            start = new DateTime(start.Year, start.Month, start.Day, 9, 15, 00);
            end   = new DateTime(end.Year, end.Month, end.Day, 15, 01, 00);
            var transDates = transDateRepo.GetStockTransactionDate(start, end);

            foreach (var date in transDates)
            {
                LoadDataToSqlServerFromSourceIfNecessary(code, date, record);
                if (redis == true)
                {
                    LoadDataToRedisFromSqlServerIfNecessary(code, date);
                }
                else
                {
                    var ticksNow = FetchDataFromSource(code, date);
                    ticks.AddRange(ticksNow);
                }
            }
            // logger.Info(string.Format("completed fetching stock{0} tick data from {1} to {2}...", code, start, end));
            if (redis == true)
            {
                ticks = FetchDataFromRedis(code, transDates).Where(c => c.TransactionDateTime >= start && c.TransactionDateTime <= end).OrderBy(c => c.TransactionDateTime).ToList();
            }
            return(ticks);
        }
        public List <StockTransaction> 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 <StockTransaction>();
            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)
                {
                    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);
        }
        public List <StockTransaction> GetStockTransaction(string code, DateTime begin, DateTime end)
        {
            logger.Info(string.Format("begin to fetch stock{0} daily data from {1} to {2}...", code, begin, end));
            var stocks       = new List <StockTransaction>();
            var tradingDates = dateRepo.GetStockTransactionDate(begin, end);

            if (tradingDates != null && tradingDates.Count > 0)
            {
                foreach (var date in tradingDates)
                {
                    StockTransaction trans = FetchStockFromRedis(code, date);
                    if (trans == null)//just run once
                    {
                        LoadStockTransactionToSqlFromSource(code, tradingDates);
                        LoadStockTransactionToRedisFromSql(code, tradingDates);
                        trans = FetchStockFromRedis(code, date);
                    }
                    stocks.Add(trans);
                }
            }
            logger.Info(string.Format("completed fetching stock{0} daily data from {1} to {2}...", code, begin, end));
            return(stocks);
        }