/// <summary>获取个股的所有收盘价 /// </summary> /// <param name="stkCode">股票代码</param> /// <param name="isComposite">是否指数</param> /// <param name="startDay">开始日期</param> /// <param name="endDay">结束日期</param> /// <returns></returns> public Dictionary <DateTime, decimal> GetDayCloseValue(string stkCode, bool isComposite, DateTime startDay = default(DateTime), DateTime endDay = default(DateTime)) { DataTable closePrice = _dbo.GetStockAllPrice(BLL.GetKLineDBTableName(KLineType.Day, isComposite), stkCode, new List <ValueType> { ValueType.Close }, startDay, endDay); Dictionary <DateTime, decimal> ret = SysFunction.GetColDictionary <DateTime, decimal>(closePrice, 0, 1); return(ret); }
/// <summary> 所有股票(不包括指数)的第一个交易日。如果数据不全,则不代表上市日 /// </summary> /// <returns></returns> public Dictionary <string, DateTime> GetAllStockFirstDay() { if (_stockFirstDay.Count > 0) { const string strSql = "SELECT StkCode, FirstDay = MIN(TradeDay) FROM KLineDay GROUP BY StkCode"; DataTable dt = SQLHelper.ExecuteDataTable(strSql, CommandType.Text, _cnn); _stockFirstDay = SysFunction.GetColDictionary <string, DateTime>(dt, 0, 1); } return(_stockFirstDay); }
/// <summary> 获取个股总交易日数 /// </summary> /// <param name="stkCode">股票代码</param> /// <returns></returns> public int GetStockTradeDayCount(string stkCode) { if (_allStockTradeDayCount.Count > 0 && !_allStockTradeDayCount.ContainsKey(stkCode)) { return(0); } if (_allStockTradeDayCount.Count == 0) { const string strSql = "SELECT StkCode, DayCount = COUNT(TradeDay) FROM KLineDay GROUP BY StkCode"; DataTable dtCount = SQLHelper.ExecuteDataTable(strSql, CommandType.Text, _cnn); _allStockTradeDayCount = SysFunction.GetColDictionary <string, int>(dtCount, 0, 1); } return(_allStockTradeDayCount.ContainsKey(stkCode) ? _allStockTradeDayCount[stkCode] : 0); }
/// <summary> 计算个股所有日涨幅 /// </summary> /// <param name="dayTableName"></param> /// <param name="stkCode">股票代码</param> /// <returns></returns> public Dictionary <DateTime, decimal> CalcStockRatio_OneStock(string dayTableName, string stkCode) { #region SQL #region 原始SQL语句 /* * SELECT curP.TradeDay, Increase = (curP.[Close] - prepP.[Close]) / prepP.[Close] * 100 FROM * ( * SELECT RowNum = ROW_NUMBER() OVER ( ORDER BY TradeDay), TradeDay, [Close] FROM KLineDay * WHERE StkCode = '600620' * ) curP * JOIN * ( * SELECT RowNum = ROW_NUMBER() OVER ( ORDER BY TradeDay) + 1, TradeDay, [Close] FROM KLineDay * WHERE StkCode = '600620' * ) prepP * ON curP.RowNum = prepP.RowNum */ #endregion 原始SQL语句 const string sqlMod = "SELECT curP.TradeDay, Increase = (curP.[Close] - prepP.[Close]) / prepP.[Close] * 100 FROM " + "\r\n" + "(" + "\r\n" + " SELECT RowNum = ROW_NUMBER() OVER ( ORDER BY TradeDay), TradeDay, [Close] FROM {0}" + "\r\n" + " WHERE StkCode = '{1}'" + "\r\n" + ") curP" + "\r\n" + "JOIN " + "\r\n" + "(" + "\r\n" + " SELECT RowNum = ROW_NUMBER() OVER ( ORDER BY TradeDay) + 1, TradeDay, [Close] FROM {0}" + "\r\n" + " WHERE StkCode = '{1}'" + "\r\n" + ") prepP" + "\r\n" + "ON curP.RowNum = prepP.RowNum"; #endregion SQL DataTable dt = SQLHelper.ExecuteDataTable(string.Format(sqlMod, dayTableName, stkCode), CommandType.Text, _cnn); Dictionary <DateTime, decimal> ret = SysFunction.GetColDictionary <DateTime, decimal>(dt, 0, 1); return(ret); }
/// <summary> 计算单日所有个股涨幅 /// </summary> /// <param name="dayTableName"></param> /// <param name="day"></param> /// <returns></returns> public Dictionary <string, decimal> CalcStockRatio_OneDay(string dayTableName, DateTime day) { #region SQL #region 原始SQL语句 /* * SELECT curP.StkCode, Increase = (curP.[Close] - prepP.[Close]) / prepP.[Close] * 100 * FROM KLineDay curP * JOIN * ( * SELECT a.* FROM KLineDay a * JOIN (SELECT RecId = MAX(RecId) FROM KLineDay WHERE TradeDay < '2017/09/21' GROUP BY MarkType, StkCode) b * ON a.RecId = b.RecId * ) prepP * ON curP.StkCode = prepP.StkCode * WHERE curP.TradeDay = '2017/09/21' */ #endregion 原始SQL语句 const string sqlMod = "SELECT curP.StkCode, Increase = (curP.[Close] - prepP.[Close]) / prepP.[Close] * 100" + "\r\n" + "FROM {0} curP" + "\r\n" + "JOIN" + "\r\n" + "(" + "\r\n" + " SELECT a.* FROM {0} a" + "\r\n" + " JOIN (SELECT RecId = MAX(RecId) FROM {0} WHERE TradeDay < '{1}' GROUP BY MarkType, StkCode) b" + "\r\n" + " ON a.RecId = b.RecId" + "\r\n" + ") prepP" + "\r\n" + "ON curP.StkCode = prepP.StkCode" + "\r\n" + "WHERE curP.TradeDay = '{1}'"; #endregion SQL DataTable dt = SQLHelper.ExecuteDataTable(string.Format(sqlMod, day.ToShortDateString()), CommandType.Text, _cnn); Dictionary <string, decimal> ret = SysFunction.GetColDictionary <string, decimal>(dt, 0, 1); return(ret); }