/// <summary> /// SINA融资融券 /// </summary> public void SyncRZRQ() { var startTime = DateTime.Now;///开始运行时间 Console.Title = "SINA融资融券 更新进程 启动时间:" + startTime; var exe = StockTaskExecutor.CreateInstance(); var mongo = DataStorage.GetInstance(DBType.MongoDB); var dbName = CONST.DB.DBName_StockService; var collectionNameRZRQ = CONST.DB.CollectionName_RZRQ; var methodName = "SyncRZRQ"; while (true) { var q = this.PrepareData(methodName); while (0 < q.Count) { var stockCode = q.Dequeue(); var stockName = this.stockCodeDict[stockCode]; var array = WebDataSource.GetInstance().GetRZRQ(stockCode); foreach (Dictionary <string, object> arrayItem in array) { var svItem = new { StockCode = stockCode, StockName = stockName, TradingDate = DateTime.Parse(arrayItem["日期"].ToString()), RZYE = arrayItem["融资余额"], RZMRE = arrayItem["融资买入额"], RZCHE = arrayItem["融资偿还额"], RQYLJE = arrayItem["融券余量金额"], RQYL = arrayItem["融券余量"], RQMCL = arrayItem["融券卖出量"], RQCHL = arrayItem["融券偿还量"], RQYE = arrayItem["融券余额"], CreateTime = DateTime.Now }; LOGGER.Log(string.Format("SINA融资融券 {0} {1} {2} 保存完毕", stockCode, stockName, svItem.TradingDate)); var query = "{\"StockCode\":\"" + stockCode + "\",\"TradingDate\":new Date('" + string.Format("{0:yyyy/MM/dd}", svItem.TradingDate) + "')}"; mongo.Save3(dbName, collectionNameRZRQ, svItem, query); } ThreadManager.Pause(seconds: 2); TaskStatusManager.Set(methodName, new { ID = methodName, StockCode = stockCode, StockName = stockName, Status = "已下载", CreateTime = DateTime.Now }); LOGGER.Log(string.Format("SINA融资融券 {0} {1} 保存完毕", stockCode, stockName)); } LOGGER.Log(string.Format("本次SINA融资融券更新完毕,下一次一天以后更新 {0}", DateTime.Now)); TaskStatusManager.Set(methodName, new { ID = methodName, Status = "队列处理完毕", CreateTime = DateTime.Now }); ThreadManager.Pause(days: 1); } }
/// <summary> /// SINA 公司简介 /// </summary> public void SyncGSJJ() { var startTime = DateTime.Now;///开始运行时间 Console.Title = "SINA公司简介 更新进程 启动时间:" + startTime; var exe = StockTaskExecutor.CreateInstance(); var mongo = DataStorage.GetInstance(DBType.MongoDB); var dbName = CONST.DB.DBName_StockService; var collectionName = CONST.DB.CollectionName_GSJJ; var methodName = "SyncGSJJ"; while (true) { ///获取所有股票代码,遍历更新数据 var q = this.PrepareData(methodName); while (0 < q.Count) { var stockCode = q.Dequeue(); var resObj = WebDataSource.GetInstance().GetGSJJ(stockCode); var resDict = (resObj is Dictionary <string, object>) ? (resObj as Dictionary <string, object>)["PageData"] : new Dictionary <string, object>(); ///保存到数据库中 二维化 var svItem = new { StockCode = stockCode, StockName = this.stockCodeDict[stockCode], Url = string.Format("http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpInfo/stockid/{0}.phtml", stockCode), CreateTime = DateTime.Now, PageData = resDict }; ///删除旧数据 ///添加新数据 LOGGER.Log(string.Format("更新{0} {1}的公司简介 ", stockCode, svItem.StockName)); var filter = "{\"ContentType\":\"SINA公司简介\",\"StockCode\":\"" + stockCode + "\"}"; mongo.Save3(dbName, collectionName, svItem, filter); TaskStatusManager.Set(methodName, new { ID = methodName, StockCode = stockCode, StockName = svItem.StockName, Status = "已下载", CreateTime = DateTime.Now }); ThreadManager.Pause(seconds: 5); } TaskStatusManager.Set(methodName, new { ID = methodName, Status = "队列处理完毕", CreateTime = DateTime.Now }); LOGGER.Log(string.Format("本次板块概念更新完毕,下一次一天以后更新 {0}", DateTime.Now)); ThreadManager.Pause(days: 2); q = this.PrepareData(methodName); } }
public void SyncStockRardar() { var startTime = DateTime.Now;///开始运行时间 Console.Title = "SINA 股市雷达异动 更新进程 启动时间:" + startTime; var exe = StockTaskExecutor.CreateInstance(); var mongo = DataStorage.GetInstance(DBType.MongoDB); var dbName = CONST.DB.DBName_StockService; var collectionName = CONST.DB.CollectionName_Radar; var methodName = "SyncStockRardar"; while (true) { var filterCheck = "{\"TradingDate\":new Date('" + string.Format("{0:yyyy/MM/dd}", DateTime.Now) + "')}"; var checkRes = mongo.Count(dbName, collectionName, filterCheck); if (0 == checkRes && CONST.IsSafeUpdateTime(1)) { var listData = WebDataSource.GetInstance().GetStockRadar(); foreach (var item in listData) { var tradingTime = item["异动时间"].ToString().Replace("-", "/"); var filter = "{\"ContentType\":\"SINA 股市雷达\",\"TradingTime\":new Date('" + tradingTime + "')}"; var svItem = new { StockCode = item["股票代码"], StockName = item["股票简称"], AnomalyInfo = item["异动信息"], TradingTime = item["异动时间"], TradingDate = Convert.ToDateTime(tradingTime).Date }; mongo.Save3(dbName, collectionName, svItem, filter); } TaskStatusManager.Set(methodName, new { ID = methodName, Status = "队列处理完毕", CreateTime = DateTime.Now }); LOGGER.Log(string.Format("本次股市雷达异动更新完毕,下一次一天以后更新 {0}", DateTime.Now)); } else { LOGGER.Log(string.Format("今日股市雷达异动已经更新,下一次一天以后更新")); } ThreadManager.Pause(hours: 2); } }
/// <summary> /// 更新股票代码信息 /// </summary> public void UpdateAllStockCode() { var mongo = DataStorage.GetInstance(DBType.MongoDB); var dataSource = new Dictionary <string, string>(); Console.WriteLine("准备从网络获取股票代码"); dataSource = WebDataSource.GetInstance().GetAllStockCode(); var dbName = CONST.DB.DBName_StockService; var collectionName = CONST.DB.CollectionName_BaseInfo; foreach (var srcItem in dataSource) { var svItem = new { ContentType = "股票代码", StockCode = srcItem.Key, SortCode = Convert.ToInt32(srcItem.Key), StockName = srcItem.Value, CreateTime = DateTime.Now }; var filter = "{\"ContentType\":\"" + svItem.ContentType + "\",\"StockCode\":\"" + svItem.StockCode + "\"}"; mongo.Save3(dbName, collectionName, svItem, filter); } Console.WriteLine("已成功更新今日股票代码"); }
/// <summary> /// SINA融资融券 /// </summary> public void SyncTouTiao() { var startTime = DateTime.Now;///开始运行时间 Console.Title = "股票全网新闻 更新进程 启动时间:" + startTime; var exe = StockTaskExecutor.CreateInstance(); var mongo = DataStorage.GetInstance(DBType.MongoDB); var dbName = CONST.DB.DBName_StockService; var collectionNameRZRQ = CONST.DB.CollectionName_RZRQ; var methodName = "SyncTouTiao"; while (true) { var q = this.PrepareData(methodName); while (0 < q.Count) { var stockCode = q.Dequeue(); var stockName = this.stockCodeDict[stockCode]; var array = WebDataSource.GetInstance().GetTouTiaoSearch(stockName); foreach (Dictionary <string, object> arrayItem in array) { var doc = DocItem.Create(arrayItem); doc.Save(); LOGGER.Log(string.Format("股票全网新闻 {0} {1} 保存完毕", stockCode, stockName)); } ThreadManager.Pause(seconds: 1); TaskStatusManager.Set(methodName, new { ID = methodName, StockCode = stockCode, StockName = stockName, Status = "已下载", CreateTime = DateTime.Now }); LOGGER.Log(string.Format("股票全网新闻 {0} {1} 保存完毕", stockCode, stockName)); } LOGGER.Log(string.Format("股票全网新闻更新完毕,下一次一天以后更新 {0}", DateTime.Now)); TaskStatusManager.Set(methodName, new { ID = methodName, Status = "队列处理完毕", CreateTime = DateTime.Now }); ThreadManager.Pause(days: 1); } }
/// <summary> /// THS龙虎榜 /// </summary> public void SyncLHB() { var startTime = DateTime.Now;///开始运行时间 Console.Title = "THS龙虎榜 更新进程 启动时间:" + startTime; var exe = StockTaskExecutor.CreateInstance(); var mongo = DataStorage.GetInstance(DBType.MongoDB); var dbName = CONST.DB.DBName_StockService; var collectionNameLHB = CONST.DB.CollectionName_LHB; var collectionNameLHBMX = CONST.DB.CollectionName_LHBMX; var methodName = "SyncLHB"; while (true) { var q = this.PrepareData(methodName); while (0 < q.Count) { var stockCode = q.Dequeue(); var stockName = this.stockCodeDict[stockCode]; var listData = WebDataSource.GetInstance().GetLHB(stockCode); var lhb = listData.First() as Dictionary <string, object>; var lhbColumn = lhb["Column"] as Dictionary <string, object>; var lhbData = lhb["Data"] as ArrayList; var tradingDate = DateTime.MinValue; foreach (Dictionary <string, object> itemLHB in lhbData) { tradingDate = DateTime.Parse(itemLHB["C1"].ToString()); var queryLHB = "{ \"StockCode\":\"" + stockCode + "\", \"TradingDate\":new Date('" + string.Format("{0:yyyy/MM/dd}", tradingDate) + "')}"; var svItem = new { StockCode = stockCode, StockName = stockName, TradingDate = tradingDate, Data = itemLHB }; mongo.Save3(dbName, collectionNameLHB, svItem, queryLHB); } listData.RemoveAt(0); foreach (Dictionary <string, object> lhbmx in listData) ///第一个是龙虎榜,后面的是龙虎榜明细 { var queryLHBMX = "{ \"StockCode\":\"" + stockCode + "\", \"TradingDate\":new Date('" + string.Format("{0:yyyy/MM/dd}", tradingDate) + "')}"; var svItem = new { StockCode = stockCode, StockName = stockName, TradingDate = tradingDate, Data = lhbmx }; mongo.Save3(dbName, collectionNameLHBMX, svItem, queryLHBMX); } TaskStatusManager.Set(methodName, new { ID = methodName, StockCode = stockCode, StockName = stockName, Status = "已下载", CreateTime = DateTime.Now }); LOGGER.Log(string.Format("本次THS龙虎榜更新完毕,下一次一天以后更新 {0}", DateTime.Now)); ThreadManager.Pause(days: 1); } TaskStatusManager.Set(methodName, new { ID = methodName, Status = "队列处理完毕", CreateTime = DateTime.Now }); } }
/// <summary> /// THS资金流向 /// </summary> public void SyncZJLX() { var startTime = DateTime.Now;///开始运行时间 Console.Title = "THS资金流向 更新进程 启动时间:" + startTime; var exe = StockTaskExecutor.CreateInstance(); var mongo = DataStorage.GetInstance(DBType.MongoDB); var dbName = CONST.DB.DBName_StockService; var collectionName = CONST.DB.CollectionName_ZJLX; var methodName = "SyncZJLX"; while (true) { ///获取所有股票代码,遍历更新数据 var q = this.PrepareData(methodName); while (0 < q.Count) { var stockCode = q.Dequeue(); var resObj = WebDataSource.GetInstance().GetZJLX(stockCode); var resList = (resObj is Dictionary <string, object>) ? (resObj as Dictionary <string, object>)["PageData"] : new ArrayList(); var stockName = this.stockCodeDict[stockCode]; ///二维化 if (resList is ArrayList) { var rows = (resList as ArrayList); foreach (Dictionary <string, object> row in rows) { var svItem2D = new { StockCode = stockCode, StockName = stockName, Url = string.Format("http://stockpage.10jqka.com.cn/{0}/funds/", stockCode), CreateTime = DateTime.Now, TradingDate = DateTime.Parse(row["日期"].ToString()), Close = row["收盘价"], Increase = row["涨跌幅"], NetInflow = row["资金净流入"], NetLarge5Day = row["5日主力净额"], NetLarge = row["大单(主力)净额"], NetLargeProportion = row["大单(主力)净占比"], NetMedium = row["中单净额"], NetMediumProportion = row["中单净占比"], NetSmall = row["小单净额"], NetSmallProportion = row["小单净占比"], }; var filter = "{\"ContentType\":\"THS资金流向\",\"StockCode\":\"" + stockCode + "\",\"TradingDate\":new Date('" + string.Format("{0:yyyy/MM/dd}", svItem2D.TradingDate) + "')}"; mongo.Save3(dbName, collectionName, svItem2D, filter); LOGGER.Log(string.Format("THS资金流向 正在更新 {0} {1} {2}", svItem2D.StockCode, svItem2D.StockName, svItem2D.TradingDate)); } } ThreadManager.Pause(seconds: 5); TaskStatusManager.Set(methodName, new { ID = methodName, StockCode = stockCode, StockName = stockName, Status = "已下载", CreateTime = DateTime.Now }); ///同步到SQL数据库中 } TaskStatusManager.Set(methodName, new { ID = methodName, Status = "队列处理完毕", CreateTime = DateTime.Now }); ThreadManager.Pause(days: 1); q = this.PrepareData(); } }
/// <summary> /// 同步日线数据 /// </summary> public void SyncKLineDay() { var mongo = DataStorage.GetInstance(DBType.MongoDB); var exe = WebDataSource.GetInstance();// var dbName = CONST.DB.DBName_StockService; var collectionName = CONST.DB.CollectionName_KLine; var methodName = "SyncKLineDay"; while (true) { var q = this.PrepareData(methodName); var year = DateTime.Now.Year; var jidu = Convertor.GetJidu(DateTime.Now); ///获取当前季度数据 while (0 < q.Count) { var stockCode = q.Dequeue(); var stockName = this.stockCodeDict[stockCode]; var resDict = exe.GetSINAKLineDay(stockCode, year, jidu); if (null != resDict && resDict.ContainsKey("Rows") && (resDict["Rows"] is ArrayList)) { var rows = resDict["Rows"] as ArrayList; if (rows is ArrayList) { for (var k = 0; k < rows.Count; k++) { var row = rows[k] as Dictionary <string, object>; var prevClose = 0.0f; if (1 <= k) { prevClose = Convert.ToSingle((rows[k - 1] as Dictionary <string, object>)["收盘价"]); } var svItem2D = new { StockCode = stockCode, StockName = this.stockCodeDict[stockCode], ContentType = "SINA历史交易", Year = year, CreateTime = DateTime.Now, UpdateTime = DateTime.Now, TradingDate = Convert.ToDateTime(row["日期"]), Open = row["开盘价"], High = row["最高价"], Close = row["收盘价"], Low = row["最低价"], Volume = row["交易量(股)"], Turnover = row["交易金额(元)"], Amplitude = (k == 0) ? -1 : (Convert.ToSingle(row["最高价"]) - Convert.ToSingle(row["最低价"])) / prevClose, ///振幅 Increase = (k == 0) ? -1 : ((Convert.ToSingle(row["收盘价"]) - prevClose) / prevClose), ///涨幅 AveragePrice = Convert.ToSingle(row["交易金额(元)"]) / Convert.ToSingle(row["交易量(股)"]), ///成交均价 RowIndex = k, RowCount = rows.Count }; ///状态保存 var filter = "{\"StockCode\":\"" + stockCode + "\",\"TradingDate\":new Date('" + string.Format("{0:yyyy/MM/dd}", svItem2D.TradingDate) + "')}"; mongo.Save3(dbName, collectionName, svItem2D, filter); TaskStatusManager.Set(methodName, new { ID = methodName, StockCode = stockCode, StockName = svItem2D.StockName, Status = "已下载", CreateTime = DateTime.Now }); LOGGER.Log(string.Format("保存 {0} {1} SINA历史交易2D", stockCode, stockName)); } } } ThreadManager.Pause(seconds: 5); TaskStatusManager.Set(methodName, new { ID = methodName, Status = "队列处理完毕", CreateTime = DateTime.Now }); ///本季度下载完毕之后再下上一季度数据。 if (0 == q.Count && jidu == Convertor.GetJidu(DateTime.Now) && 1 < jidu)//当年2,3,4季度 当季度 { jidu = jidu - 1; q = this.PrepareData(methodName); } else if (0 == q.Count && jidu == Convertor.GetJidu(DateTime.Now) && 1 == jidu) { jidu = 4; ///上一年第四季度 year = year - 1; ///上一年 q = this.PrepareData(methodName); } #region 补充计算缺失 #endregion } LOGGER.Log("历史交易获取完毕 ,下一次将在24小时后开始"); ThreadManager.Pause(days: 1); } }