From 8ddc7f5ecc67c0bb424954a86b75ec7444080ba2 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期三, 29 三月 2023 18:02:50 +0800 Subject: [PATCH] 首板买入策略分值优化 --- third_data/hot_block_data_process.py | 71 +++++++++++++++++++++++++++++++---- 1 files changed, 62 insertions(+), 9 deletions(-) diff --git a/third_data/hot_block_data_process.py b/third_data/hot_block_data_process.py index 08a4579..f83f800 100644 --- a/third_data/hot_block_data_process.py +++ b/third_data/hot_block_data_process.py @@ -1,8 +1,10 @@ """ 鐑棬鏉垮潡鏁版嵁澶勭悊 """ +import datetime import json +import juejin import tool from db import redis_manager from db import mysql_data @@ -29,14 +31,14 @@ code_block_dict = {} for data in datas: for code_info in data[2]: - code = code_info[0].split(".")[0] + code = code_info[0][1].split(".")[0] if not code_block_dict.get(code): code_block_dict[code] = set() code_block_dict[code].add(data[0]) for data in datas: for code_info in data[2]: - code = code_info[0].split(".")[0] + code = code_info[0][1].split(".")[0] _id = f"{day}_{data[0]}_{code}" result = mysqldb.select_one("select * from xgb_hot_block where _id='{}'".format(_id)) @@ -45,12 +47,12 @@ limit_up_time = '' if not result: mysqldb.execute( - f"insert into xgb_hot_block(_id,_day,_block_name,_code,_limit_up_time,_price,_rate,_update_time,_first_limit_up_time) values('{_id}','{day}','{data[0]}','{code}','{code_info[4]}','{code_info[2]}','{code_info[3]}',now(),'{limit_up_time}')") + f"insert into xgb_hot_block(_id,_day,_block_name,_code,_limit_up_time,_price,_rate,_update_time,_first_limit_up_time,_code_name) values('{_id}','{day}','{data[0]}','{code}','{code_info[4]}','{code_info[2]}','{code_info[3]}',now(),'{limit_up_time}','{code_info[0][0]}')") else: # 濡傛灉涓婃鐨勬暟鎹拰杩欐涓�鏍峰氨涓嶆洿鏂帮紝鍚﹀垯闇�瑕佹洿鏂版暟鎹� if cls.__last_datas.get(_id) != code_info: mysqldb.execute( - f"update xgb_hot_block set _limit_up_time='{code_info[4]}',_price='{code_info[2]}',_rate='{code_info[3]}',_update_time=now() where _id='{_id}'") + f"update xgb_hot_block set _limit_up_time='{code_info[4]}',_price='{code_info[2]}',_rate='{code_info[3]}',_update_time=now(),_code_name='{code_info[0][0]}' where _id='{_id}'") if (not result[8] or len(result[8]) <= 6) and len(limit_up_time) >= 6: mysqldb.execute( f"update xgb_hot_block set _first_limit_up_time='{limit_up_time}',_update_time=now() where _id='{_id}'") @@ -80,10 +82,61 @@ mysqldb = mysql_data.Mysqldb() return mysqldb.select_all(f"select * from xgb_hot_block where _block_name='{block_name}' and _day='{day}'") + @staticmethod + def list_blocks(days): + mysqldb = mysql_data.Mysqldb() + sql = "select distinct(_block_name) from xgb_hot_block where " + wheres = [] + for day in days: + wheres.append(f"_day = '{day}'") + sql += " or ".join(wheres) + results = mysqldb.select_all(sql) + fresult = set() + for result in results: + fresult.add(result[0]) + return fresult + + +__blocks_dict = {} + + +def get_latest_block(day_count=15): + now_day = tool.get_now_date_str() + if now_day in __blocks_dict: + return __blocks_dict[now_day] + now_date = datetime.datetime.now() + end_date = juejin.JueJinManager.get_previous_trading_date(tool.get_now_date_str()) + start_date = now_date - datetime.timedelta(days=(day_count * 2 + 10)) + start_date = start_date.strftime("%Y-%m-%d") + days = juejin.JueJinManager.get_trading_dates(start_date, end_date) + days = days[0 - day_count:] + results = XGBHotBlockDataManager.list_blocks(days) + __blocks_dict[now_day] = results + return results + # 鑾峰彇浠g爜鎵�鍦ㄦ澘鍧椾俊鎭� def get_info(code): blocks = get_code_blocks(code) + # 鍒ゆ柇鏄惁鏈夋柊姒傚康 + # 鏂版蹇� + new_block = None + latest_blocks = get_latest_block(15) + for block in blocks: + if block not in latest_blocks: + new_block = block + # 濡傛灉鏉垮潡涓殑娑ㄥ仠绁ㄦ暟銆�=2鎵嶇畻鏂伴鏉� + count = 0 + if XGBHotBlockDataManager.latest_datas: + for b in XGBHotBlockDataManager.latest_datas: + if b[0] == new_block: + for code_data in b[2]: + if len(code_data[4]) > 6: + count += 0 + if count < 2: + new_block = None + if not new_block: + break target_block = None if blocks: @@ -101,7 +154,7 @@ if block[0] == target_block: for code_data in block[2]: if len(code_data[4]) > 6: - limit_up_codes_set.add(code_data[0].split('.')[0]) + limit_up_codes_set.add(code_data[0][1].split('.')[0]) limit_up_codes_set.discard(code) limit_up_count = len(limit_up_codes_set) @@ -122,7 +175,7 @@ break_codes = break_codes.difference(limit_up_codes_set) # 鐐告澘涓暟 break_size = len(break_codes) - return target_block, limit_up_count, break_size + return target_block, limit_up_count, break_size, new_block # 淇濆瓨鏁版嵁 @@ -133,7 +186,7 @@ for block in datas: codes = [] for code_data in block[2]: - code = code_data[0].split(".")[0] + code = code_data[0][1].split(".")[0] if gpcode_manager.FirstCodeManager.is_in_first_record(code): limit_up_time = code_data[4] if limit_up_time and len(limit_up_time) > 6: @@ -185,5 +238,5 @@ if __name__ == "__main__": # XGBHotBlockDataManager.total_datas=XGBHotBlockDataManager.list_all("2023-03-23") # get_info('002230') - codes = set([1, 2, 3, 4]) - print(codes.difference(set([1, 2]))) + print(get_latest_block()) + print(get_latest_block()) -- Gitblit v1.8.0