Ejemplo n.º 1
0
        /// <summary>
        /// 得到股票或期货的K线数据
        /// </summary>
        /// <param name="code"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <param name="klinePeriod"></param>
        /// <returns></returns>
        public virtual IKLineData GetKLineData(String code, int startDate, int endDate, KLinePeriod klinePeriod)
        {
            IList <int> tradingDays = GetTickDataDays(code);// GetTradingDays();

            if (tradingDays == null)
            {
                return(null);
            }
            CacheUtils_TradingDay cache     = new CacheUtils_TradingDay(tradingDays);
            IList <int>           openDates = cache.GetTradingDays(startDate, endDate);

            if (openDates == null || openDates.Count == 0)
            {
                return(null);
            }
            float lastEndPrice   = -1;
            int   lastEndHold    = -1;
            int   prevTradingDay = cache.GetPrevTradingDay(openDates[0]);

            //找到之前交易日的收盘价和收盘持仓
            if (prevTradingDay > 0)
            {
                ITickData tickData = GetTickData(code, prevTradingDay);
                lastEndPrice = tickData.Arr_Price[tickData.Length - 1];
                lastEndHold  = tickData.Arr_Hold[tickData.Length - 1];
            }

            //如果存在该周期的源数据直接生成,否则用1分钟K线生成
            if (Exist(code, openDates[0], klinePeriod))
            {
                return(GetKLineData(code, klinePeriod, openDates, lastEndPrice, lastEndHold));
            }

            IKLineData oneMinuteKLine = GetKLineData(code, KLinePeriod.KLinePeriod_1Minute, openDates, lastEndPrice, lastEndHold);

            if (oneMinuteKLine.Length == 0)
            {
                return(null);
            }
            IList <ITradingTime> sessions = GetTradingTime(code);

            if (sessions == null)
            {
                return(null);
            }
            return(DataTransfer_KLine2KLine.Transfer(oneMinuteKLine, klinePeriod, new CacheUtils_TradingTime(code, GetTradingTime(code))));
        }
Ejemplo n.º 2
0
 public IKLineData GetData(String code, int startDate, int endDate, KLinePeriod period)
 {
     if (period.PeriodType == KLineTimeType.MINUTE)
     {
         if (period.Period == 1 || period.Period == 15)
         {
             return(LoadKLineData(code, startDate, endDate, period));
         }
         IKLineData data = LoadKLineData(code, startDate, endDate, new KLinePeriod(KLineTimeType.MINUTE, 1));
         return(DataTransfer_KLine2KLine.Transfer(data, period, null));
     }
     if (period.PeriodType == KLineTimeType.HOUR)
     {
         if (period.Period == 1)
         {
             return(LoadKLineData(code, startDate, endDate, period));
         }
         IKLineData data = LoadKLineData(code, startDate, endDate, new KLinePeriod(KLineTimeType.HOUR, 1));
         return(DataTransfer_KLine2KLine.Transfer(data, period, null));
     }
     if (period.PeriodType == KLineTimeType.DAY)
     {
         if (period.Period == 1)
         {
             return(LoadKLineData(code, startDate, endDate, period));
         }
         IKLineData data = LoadKLineData(code, startDate, endDate, new KLinePeriod(KLineTimeType.DAY, 1));
         return(DataTransfer_KLine2KLine.Transfer(data, period, null));
     }
     if (period.PeriodType == KLineTimeType.SECOND)
     {
         //return LoadKLineData_Second(code, startDate, endDate, period);
         return(dataReaderExtend.GetKLineData_Second(code, startDate, endDate, period));
     }
     //return LoadKLineData(code, startDate, endDate, period);
     throw new ArgumentException("暂未实现");
 }