如果某板块涨停个数≥5个(所有涨停股),则目标票回封可以买
| | |
| | | if cls.__market_strong is not None: |
| | | score = int(cls.__market_strong) |
| | | for info in constant.RADICAL_BUY_TOP_IN_COUNT_BY_MARKET_STRONG: |
| | | if info[0]<=score<info[1]: |
| | | if info[0] <= score < info[1]: |
| | | return info[2] |
| | | return 10 |
| | | |
| | |
| | | if cls.top_in_list_cache[i][1] == b: |
| | | return b, i, cls.top_in_list_cache[i][3] |
| | | return b, -1, 0 |
| | | |
| | | |
| | | |
| | | @classmethod |
| | | def set_top_5_industry(cls, datas): |
| | |
| | | __history_code_data_dict = {} |
| | | history_limit_up_datas = [] |
| | | current_limit_up_datas = [] |
| | | __current_limit_up_block_codes = {} |
| | | |
| | | @classmethod |
| | | def set_current_limit_up_datas(cls, current_limit_up_datas): |
| | | cls.current_limit_up_datas = current_limit_up_datas |
| | | # 统计板块当前涨停数量 |
| | | block_codes = {} |
| | | for d in current_limit_up_datas: |
| | | code = d[0] |
| | | blocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(code) |
| | | if blocks: |
| | | for b in blocks: |
| | | if b not in block_codes: |
| | | block_codes[b] = set() |
| | | block_codes[b].add(code) |
| | | cls.__current_limit_up_block_codes = block_codes |
| | | |
| | | |
| | | |
| | | |
| | | @classmethod |
| | | def set_history_limit_up_datas(cls, history_limit_up_datas_): |
| | |
| | | return int(cls.__history_code_data_dict[code][5]) |
| | | return None |
| | | |
| | | @classmethod |
| | | def get_current_limit_up_block_codes(cls, block): |
| | | return cls.__current_limit_up_block_codes.get(block) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | ContainsLimitupCodesBlocksManager() |
| | |
| | | if limit_up_timestamp < kpl_block_util.open_limit_up_time_range[1]: |
| | | return False, f"当前代码开1" |
| | | |
| | | THRESHOLD_MINUTES = 30 |
| | | # 扩大到5小时 |
| | | THRESHOLD_MINUTES = 60 * 5 |
| | | if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'), |
| | | tool.timestamp_format(current_before_codes_info[-1][1], |
| | | '%H:%M:%S')) >= THRESHOLD_MINUTES * 60: |
| | |
| | | return fblocks, before_fblocks |
| | | |
| | | @classmethod |
| | | def is_block_can_buy_with_block_in(cls, code, block): |
| | | """ |
| | | 根据板块流入判断板块是否可买 |
| | | @param code: |
| | | @param block: |
| | | @return: |
| | | """ |
| | | jx_in_blocks = RealTimeKplMarketData.get_top_market_jingxuan_blocks() |
| | | if jx_in_blocks and block in jx_in_blocks: |
| | | return True |
| | | # 获取当前板块涨停数量 |
| | | codes = LimitUpDataConstant.get_current_limit_up_block_codes(block) |
| | | if codes and len(codes) >= 5: |
| | | return True |
| | | return False |
| | | |
| | | @classmethod |
| | | def is_radical_buy(cls, code, yesterday_limit_up_codes): |
| | | """ |
| | | 是否是激进买 |
| | |
| | | return set(keys_), "已加想" |
| | | |
| | | # 获取精选净流入 |
| | | jx_in_blocks = RealTimeKplMarketData.get_top_market_jingxuan_blocks() |
| | | keys_in_jx = keys_ & set(jx_in_blocks) |
| | | keys_in_jx = set() |
| | | for k in keys_: |
| | | if cls.is_block_can_buy_with_block_in(code, k): |
| | | keys_in_jx.add(k) |
| | | if not keys_in_jx: |
| | | # 板块尚未精选流入,且板块涨停代码个数是否<5个 |
| | | return set(), f"【{keys_}】板块未在精选流入中" |
| | | keys_ = keys_in_jx |
| | | match_blocks = open_limit_up_blocks & keys_ |
| | |
| | | if code in today_history_limit_up_codes: |
| | | # 涨停过的代码才会计算板块身位 |
| | | for b in blocks: |
| | | index = None |
| | | if b in top_in_blocks: |
| | | index = top_in_blocks.index(b) |
| | | # 查询在板块中的排序 |
| | | info = RadicalBuyBlockManager().get_history_index(code, b, yesterday_limit_up_codes) |
| | | if info[0] > 0: |
| | | info = RadicalBuyBlockManager().filter_before_codes(code, b, info[0], info[1], |
| | | yesterday_limit_up_codes) |
| | | if info[0] < 3: |
| | | else: |
| | | if RadicalBuyBlockManager.is_block_can_buy_with_block_in(code, b): |
| | | index = 100 |
| | | if index is None: |
| | | continue |
| | | # 查询在板块中的排序 |
| | | info = RadicalBuyBlockManager().get_history_index(code, b, yesterday_limit_up_codes) |
| | | if info[0] > 0: |
| | | info = RadicalBuyBlockManager().filter_before_codes(code, b, info[0], info[1], |
| | | yesterday_limit_up_codes) |
| | | if info[0] < 3: |
| | | return index + 1 |
| | | elif info[0] < 6: |
| | | # 判断是否具有辨识度 |
| | | special_codes = BlockSpecialCodesManager().get_block_codes(b) |
| | | if special_codes and code in special_codes: |
| | | return index + 1 |
| | | elif info[0] < 6: |
| | | # 判断是否具有辨识度 |
| | | special_codes = BlockSpecialCodesManager().get_block_codes(b) |
| | | if special_codes and code in special_codes: |
| | | return index + 1 |
| | | |
| | | |
| | | return 10000 |
| | | |
| | | |