| | |
| | | # 判断板块 |
| | | plate_can_buy, msg = CodePlateKeyBuyManager.can_buy(code, |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas, |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.total_datas,block_info.get_before_blocks_dict()) |
| | | kpl_data_manager.get_current_limit_up_data_records(1), |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.total_datas, |
| | | block_info.get_before_blocks_dict()) |
| | | if not plate_can_buy: |
| | | return False, True, msg |
| | | return True, False, msg |
| | |
| | | # current_limit_up_datas: 今日实时涨停 |
| | | # latest_2_day_limit_up_datas:最近2天的实时涨停(不含今日) |
| | | # limit_up_record_datas:今日历史涨停 |
| | | # yesterday_current_limit_up_codes : 昨日涨停代码 |
| | | # before_blocks_dict:历史涨停原因 |
| | | @classmethod |
| | | def get_can_buy_block(cls, code, current_limit_up_datas, limit_up_record_datas, |
| | | def get_can_buy_block(cls, code, current_limit_up_datas, limit_up_record_datas,yesterday_current_limit_up_codes, |
| | | before_blocks_dict): |
| | | # 加载涨停代码的目标板块 |
| | | def load_code_block(): |
| | |
| | | load_code_block() |
| | | msg_list = [] |
| | | for block in keys: |
| | | is_top_8_record, top_8_record = kpl_block_util.is_record_top_block(code, block, limit_up_record_datas, 8) |
| | | is_top_8_record, top_8_record = kpl_block_util.is_record_top_block(code, block, limit_up_record_datas, yesterday_current_limit_up_codes,8) |
| | | is_top_4_current, top_4_current = kpl_block_util.is_current_top_block(code, block, current_limit_up_datas, |
| | | 4) |
| | | yesterday_current_limit_up_codes, 4) |
| | | is_top_4 = is_top_8_record and is_top_4_current |
| | | msg_list.append(f"\n实时top4: {top_4_current}(涨停数量:{len(current_limit_up_datas)})") |
| | | msg_list.append(f"历史top8: {top_8_record}") |
| | |
| | | # 是否可以下单 |
| | | # 返回:是否可以下单,消息,板块类型 |
| | | @classmethod |
| | | def can_buy(cls, code, current_limit_up_datas, limit_up_record_datas, before_blocks_dict): |
| | | def can_buy(cls, code, current_limit_up_datas, limit_up_record_datas, yesterday_current_limit_up_codes,before_blocks_dict): |
| | | if constant.TEST: |
| | | return True, "", cls.BLOCK_TYPE_NONE |
| | | |
| | | block, block_msg = cls.get_can_buy_block(code, current_limit_up_datas, |
| | | limit_up_record_datas, before_blocks_dict) |
| | | limit_up_record_datas,yesterday_current_limit_up_codes, before_blocks_dict) |
| | | if block is None: |
| | | return False, block_msg |
| | | |
| | |
| | | return False, block_codes_infos[:topn] |
| | | |
| | | |
| | | def is_record_top_block(code, block, limit_up_record_datas, topn): |
| | | def is_record_top_block(code, block, limit_up_record_datas,yesterday_current_limit_up_codes, topn): |
| | | block_codes_infos = [] |
| | | limit_up_time = time.time() |
| | | for k in limit_up_record_datas: |
| | | # 剔除高位代码 |
| | | if k[12] != '首板': |
| | | # 判断是否是首板 |
| | | if k[0] in yesterday_current_limit_up_codes: |
| | | continue |
| | | |
| | | if k[3] != code: |
| | |
| | | return __is_top_block(block, block_codes_infos, topn) |
| | | |
| | | |
| | | def is_current_top_block(code, block, current_limit_up_datas, topn): |
| | | def is_current_top_block(code, block, current_limit_up_datas, yesterday_current_limit_up_codes, topn): |
| | | block_codes_infos = [] |
| | | limit_up_time = time.time() |
| | | for k in current_limit_up_datas: |
| | | if k[4] != '首板': |
| | | # 判断是否是首板 |
| | | if k[0] in yesterday_current_limit_up_codes: |
| | | continue |
| | | if k[0] != code: |
| | | block_codes_infos.append((k[0], k[5], int(k[2]))) |