/// <summary> /// 获取周线的历史数据 /// </summary> /// <param name="weekDatas">周线历史数据</param> /// <param name="dayDatas">日线历史数据</param> /// <returns>状态</returns> public static int getHistoryWeekDatas(List <SecurityData> weekDatas, List <SecurityData> dayDatas) { int weekDatasSize = dayDatas.Count; if (weekDatasSize > 0) { SecurityData weekData = new SecurityData(); weekData.copy(dayDatas[0]); int lDayOfWeek = 0, lDays = 0; for (int i = 0; i < weekDatasSize; i++) { SecurityData dayData = new SecurityData(); dayData.copy(dayDatas[i]); int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0, ms = 0, days = (int)dayData.m_date / (3600 * 24); FCStr.getDateByNum(dayData.m_date, ref year, ref month, ref day, ref hour, ref minute, ref second, ref ms); int dow = dayOfWeek(year, month, day); bool isNextWeek = true; bool add = false; if (days - lDays <= 5) { if (days != lDays) { isNextWeek = dow <= lDayOfWeek; } } if (isNextWeek || i == weekDatasSize - 1) { add = true; } if (!isNextWeek) { weekData.m_close = dayData.m_close; weekData.m_amount += dayData.m_amount; weekData.m_volume += dayData.m_volume; if (weekData.m_high < dayData.m_high) { weekData.m_high = dayData.m_high; } if (weekData.m_low > dayData.m_low) { weekData.m_low = dayData.m_low; } } if (add) { weekDatas.Add(weekData); weekData = dayData; } if (isNextWeek && i == weekDatasSize - 1) { weekData = dayData; weekDatas.Add(weekData); } lDayOfWeek = dow; lDays = days; } } return(1); }
/// <summary> /// 获取月线的历史数据 /// </summary> /// <param name="weekDatas">月线历史数据</param> /// <param name="dayDatas">日线历史数据</param> /// <returns>状态</returns> public static int getHistoryMonthDatas(List <SecurityData> monthDatas, List <SecurityData> dayDatas) { int monthDatasSize = dayDatas.Count; if (monthDatasSize > 0) { SecurityData monthData = new SecurityData(); monthData.copy(dayDatas[0]); int lYear = 0, lMonth = 0, lDay = 0; for (int i = 0; i < monthDatasSize; i++) { SecurityData dayData = new SecurityData(); dayData.copy(dayDatas[i]); int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0, ms = 0; FCStr.getDateByNum(dayData.m_date, ref year, ref month, ref day, ref hour, ref minute, ref second, ref ms); bool isNextMonth = year * 12 + month > lYear * 12 + lMonth; bool add = false; if (i == monthDatasSize - 1 || (i > 0 && isNextMonth)) { add = true; } if (!isNextMonth) { monthData.m_close = dayData.m_close; monthData.m_amount += dayData.m_amount; monthData.m_volume += dayData.m_volume; if (monthData.m_high < dayData.m_high) { monthData.m_high = dayData.m_high; } if (monthData.m_low > dayData.m_low) { monthData.m_low = dayData.m_low; } } if (add) { monthDatas.Add(monthData); monthData = dayData; } if (isNextMonth && i == monthDatasSize - 1) { monthData = dayData; monthDatas.Add(monthData); } lYear = year; lMonth = month; lDay = day; } } return(1); }