def start_tk_crawl(): global dm dm = DBManager("history_k_data") # 初始化baostock bs.login() # 获取股票代码列表 code_list = dm.get_code_list() for item in code_list: max_try = 8 # 失败重连次数 ticker = item["ticker"] print("开始加载股票数据:" + str(ticker)) for tries in range(max_try): rs = bs.query_history_k_data_plus( ticker, "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST", start_date='2008-01-01', end_date='2019-05-31', frequency="d", adjustflag="3") if rs.error_code == '0': parse_pager(rs, ticker) # 解析数据 break elif tries < (max_try - 1): sleep(2) continue else: print("加载股票数据失败:" + str(ticker)) print("加载股票数据完成") bs.logout()
def start_tk_crawl(): global dm, log log = Logger() dm = DBManager("em_tk_database") log.logger.info("开始更新股票数据") bs.login() code_list = dm.get_code_list() for item in code_list: ticker = item["ticker"] max_try = 8 for tries in range(max_try): rs = bs.query_history_k_data( ticker, "date,code,open,high,low,close,volume,amount,adjustflag,turn," "pctChg", frequency="w", adjustflag="3") if rs.error_code == '0': parse_pager(rs, ticker) break elif tries < (max_try - 1): sleep(2) continue else: log.logger.error("更新股票数据失败:" + str(ticker)) log.logger.info("结束更新股票数据") bs.logout()
def start_pe_crawl(): global dm, log log = Logger() dm = DBManager("em_pe_database") log.logger.info("开始更新指数数据") bs.login() code_list = dm.get_code_list() for item in code_list: ticker = item["ticker"] max_try = 8 for tries in range(max_try): rs = bs.query_history_k_data( ticker, "date,code,close,peTTM,pbMRQ,psTTM,pcfNcfTTM", frequency="d", adjustflag="2") if rs.error_code == "0": parse_pager(rs, ticker) break elif tries < (max_try - 1): sleep(2) continue else: log.logger.error("更新股票指数数据:" + str(ticker)) log.logger.info("结束更新指数数据") bs.logout()
def fun_analysis(cur_time=datetime.datetime.now()): log = Logger() log.logger.info("开始分析数据") # 数据获取 dm_tk = DBManager("em_tk_database") dm_pe = DBManager("em_pe_database") code_list = [x for x in dm_tk.get_code_list()] result_list = list() # 数据遍历 for item in code_list: tk_item = dm_tk.find_one_by_key({"ticker": item["ticker"]}) pe_item = dm_pe.find_one_by_key({"ticker": item["ticker"]}) tk_data_list = tk_item["data_list"] pe_data_list = pe_item["data_list"] # 数据计算 close_list = [ float(x["close"]) for x in tk_data_list if x["close"] != "" ] volume_list = [ float(x["volume"]) for x in tk_data_list if x["close"] != "" ] wmacd_list, diff_list, dea_list = get_w_macd(close_list) # 处理核心逻辑 if wmacd_list[-1] > 0 >= wmacd_list[-2]: if np.mean(volume_list[-5:-1] ) < volume_list[-1] and diff_list[-1] >= 0: result_list.append({ "ticker": item["ticker"], "diff": round(diff_list[-1], 4), "pe": float(pe_data_list[-1]["peTTM"]) }) print(result_list) log.logger.info("结束分析数据:" + json.dumps(result_list)) # 生成分析报告 creat_report(result_list)
history_capital = list() # 时间列表 def date_range(start, end, step=1, format="%Y-%m-%d"): strptime, strftime = datetime.datetime.strptime, datetime.datetime.strftime days = (strptime(end, format) - strptime(start, format)).days + 1 return [ strftime(strptime(start, format) + datetime.timedelta(i), format) for i in range(0, days, step) ] if __name__ == "__main__": log = Logger() dm_tk = DBManager("em_tk_database") dm_pe = DBManager("em_pe_database") date_list_table = [ date_range("2016-01-01", "2016-12-31"), date_range("2017-01-01", "2017-12-31"), date_range("2018-01-01", "2018-12-31") ] code_list = [x for x in dm_tk.get_code_list()] for date_list in date_list_table: capital_base = 1000000 history_capital = list() for index in range(len(date_list)): cur_date = date_list[index] if datetime.datetime.strptime(cur_date, "%Y-%m-%d").weekday() == 4: