/// <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> /// 不断更新最新的新闻 /// </summary> public void SyncStockNews() { var startTime = DateTime.Now;///开始运行时间 Console.Title = "同花顺财经要闻 更新进程 启动时间:" + startTime; var exe = StockTaskExecutor.CreateInstance(); while (true) { try { if (CONST.IsSafeUpdateTime(1)) { exe.GetNewsListCJYW(DateTime.Now.ToShortDateString()); ///非交易时间 if (DateTime.Now.Hour < 6 || DateTime.Now.Hour > 23) ///6点前,23点后 { exe.GetNewsListCJYW(DateTime.Now.AddDays(-1).ToShortDateString()); exe.GetNewsListCJYW(DateTime.Now.AddDays(-2).ToShortDateString()); exe.GetNewsListCJYW(DateTime.Now.AddDays(-3).ToShortDateString()); exe.GetNewsListCJYW(DateTime.Now.AddDays(-4).ToShortDateString()); exe.GetNewsListCJYW(DateTime.Now.AddDays(-5).ToShortDateString()); exe.GetNewsListCJYW(DateTime.Now.AddDays(-6).ToShortDateString()); exe.GetNewsListCJYW(DateTime.Now.AddDays(-7).ToShortDateString()); ThreadManager.Pause(hours: 1); ///凌晨一小时更新一次 } else { ThreadManager.Pause(minutes: 10); ///10分钟更新一次新闻 } } else { exe.GetNewsListCJYW(DateTime.Now.ToShortDateString()); ///交易时间 ThreadManager.Pause(minutes: 3); ///3分钟更新一次新闻 } LOGGER.Log(string.Format("自动新闻更新 已运行时间 {0}", DateTime.Now - startTime)); } catch (Exception e) { LOGGER.Log(string.Format("异常:{0}", e.Message)); LOGGER.Log(string.Format("位置:{0}", e.StackTrace)); LOGGER.Beep(); ThreadManager.Pause(minutes: 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> protected void PrepareData() { if (0 == this.dict.Count) { var db = DataStorage.GetInstance("170"); var jsonFilter = string.Format("{{\"ContentType\":\"股票代码\"}}"); var res = db.Find("StockTask", "BaseInfo", jsonFilter); if (0 == res.Count) ///先查找数据库中的数据 { StockTaskExecutor.CreateInstance().UpdateAllStockCode(); res = db.Find("StockTask", "BaseInfo", jsonFilter); } else if (0 < res.Count) { foreach (var item in res) { this.dict.Add(item["StockCode"].ToString(), item["StockName"].ToString()); } } } }
/// <summary> /// SINA大单数据更新 /// </summary> public void SyncSINADaDan() { var startTime = DateTime.Now;///开始运行时间 Console.Title = "SINA大单数据更新 更新进程 启动时间:" + startTime; var exe = StockTaskExecutor.CreateInstance(); while (true) { if (CONST.IsSafeUpdateTime(1)) { exe.GetDaDanData(); LOGGER.Log(string.Format("大单数据已更新,下一次更新在一天后 {0}", DateTime.Now)); ThreadManager.Pause(days: 1); } else { LOGGER.Log(string.Format("未在安全更新时间内 {0}", DateTime.Now)); ThreadManager.Pause(minutes: 5); } } }
/// <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> /// 更新股票代码 /// </summary> public void SyncStockCode() { var startTime = DateTime.Now;///开始运行时间 Console.Title = "股票代码更新进程 启动时间:" + startTime; var inst = StockTaskExecutor.CreateInstance(); while (true) { if (CONST.IsSafeUpdateTime(1)) ///非交易时间,且交易前1小时 { LOGGER.Log(string.Format("准备更新股票代码 {0}", DateTime.Now)); inst.UpdateAllStockCode(); LOGGER.Log(string.Format("股票代码更新完毕 {0} {1} 下一次更新在一天后后 已运行 ", DateTime.Now, DateTime.Now - startTime)); ThreadManager.Pause(days: 1); ///每日更新一次 } else { Console.WriteLine("交易时间或非安全可更新时间 {0}", DateTime.Now); ThreadManager.Pause(hours: 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(); } }
public static StockTaskExecutor CreateInstance() { var inst = new StockTaskExecutor(); return(inst); }