| | |
| | | """ |
| | | 新题材处理器 |
| | | """ |
| | | import constant |
| | | from code_attribute import code_nature_analyse |
| | | from code_attribute.gpcode_manager import HumanRemoveForbiddenManager |
| | | from third_data import kpl_util |
| | | from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager |
| | | from trade import l2_trade_util, trade_record_log_util |
| | | from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager |
| | | from utils import tool |
| | | from utils.kpl_data_db_util import KPLLimitUpDataUtil |
| | | |
| | | |
| | | @tool.singleton |
| | | class BeforeBlocksComputer: |
| | | """ |
| | | 往日题材计算器 |
| | | """ |
| | | def __init__(self): |
| | | self.__before_blocks = set() |
| | | self.__load_data() |
| | | |
| | | def __load_data(self): |
| | | # kpl_results: [( r.`_code`, r.`_day`, r.`_hot_block_name`, r.`_blocks`, r.`_open`)] |
| | | kpl_results = KPLLimitUpDataUtil.get_latest_block_infos() |
| | | days = set() |
| | | for r in kpl_results: |
| | | # 取60个交易日之内的题材 |
| | | days.add(r[1]) |
| | | days = list(days) |
| | | days.sort(key=lambda x: int(x.replace("-", "")), reverse=True) |
| | | days = days[:60] |
| | | # {"日期":{ "题材":{代码} }} |
| | | day_block_codes_dict = {} |
| | | for r in kpl_results: |
| | | if r[1] not in days: |
| | | continue |
| | | if r[4]: |
| | | # 不算炸板 |
| | | continue |
| | | # 统计每一天的题材 |
| | | day = r[1] |
| | | block = kpl_util.filter_block(r[2]) |
| | | if block in constant.KPL_INVALID_BLOCKS: |
| | | continue |
| | | if day not in day_block_codes_dict: |
| | | day_block_codes_dict[day] = {} |
| | | if block not in day_block_codes_dict[day]: |
| | | day_block_codes_dict[day][block] = set() |
| | | day_block_codes_dict[day][block].add(r[0]) |
| | | |
| | | # 每一天走的板块 |
| | | day_block_dict = {} |
| | | for day in day_block_codes_dict: |
| | | for b in day_block_codes_dict[day]: |
| | | if len(day_block_codes_dict[day][b]) >= 3: |
| | | if day not in day_block_dict: |
| | | day_block_dict[day] = set() |
| | | day_block_dict[day].add(b) |
| | | day_block_list = [(d, day_block_dict[d]) for d in day_block_dict] |
| | | day_block_list.sort(key=lambda x: x[0]) |
| | | # 过去59天出现的题材 |
| | | old_blocks = set() |
| | | for d in day_block_list: |
| | | if d[0] == days[0]: |
| | | continue |
| | | old_blocks |= d[1] |
| | | self.__before_blocks |= old_blocks |
| | | |
| | | # 昨天出现的题材 |
| | | # if days[0] == day_block_list[-1][0]: |
| | | # # 昨天出现的题材 |
| | | # yesterday_blocks = day_block_list[-1][1] |
| | | |
| | | def is_new_block(self, block): |
| | | return block not in self.__before_blocks |
| | | |
| | | def get_old_blocks(self): |
| | | return self.__before_blocks |
| | | |
| | | |
| | | def process_new_block(code, block): |