Administrator
2025-01-24 27d986f5bc1cc976d5998060b5c8b072322301ac
选票策略修改
4个文件已修改
101 ■■■■■ 已修改文件
l2/l2_limitup_sell_data_manager.py 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2_data_parser.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/radical_buy_data_manager.py 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/current_price_process_manager.py 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_limitup_sell_data_manager.py
@@ -5,6 +5,7 @@
from l2 import l2_log
from log_module import async_log_util, log_export
from log_module.log import hx_logger_l2_sell_delegate, hx_logger_l2_sell_deal
from utils import tool
class L2LimitUpSellDataManager:
@@ -49,7 +50,7 @@
                        cls.__order_no_set_dict[code].discard(order_no)
                        cls.__delegating_sell_num_dict[code] -= volume
                        async_log_util.l2_data_log.info(hx_logger_l2_sell_delegate,
                                                        f"{code}-卖撤-{order_no, price, volume}")
                                                        f"{code}-卖撤-{(order_no, price, volume)}-{cls.__delegating_sell_num_dict[code]}")
                else:
                    if d[3] != '1':
                        # 卖
@@ -57,7 +58,7 @@
                        cls.__order_no_set_dict[code].add(order_no)
                        cls.__delegating_sell_num_dict[code] += volume
                        async_log_util.l2_data_log.info(hx_logger_l2_sell_delegate,
                                                        f"{code}-卖-{order_no, price, volume}")
                                                        f"{code}-卖-{(order_no, price, volume)}-{cls.__delegating_sell_num_dict[code]}")
        except:
            pass
@@ -122,14 +123,25 @@
        if code in cls.__delegating_sell_num_dict:
            cls.__delegating_sell_num_dict.pop(code)
            async_log_util.l2_data_log.info(hx_logger_l2_sell_deal,
                                            f"出现主动卖清除数据:{code}")
if __name__ == "__main__":
    code = "300479"
    datas = log_export.load_huaxin_l2_sell_deal(code).get(code)
    print(datas)
    for i in range(len(datas)):
        if tool.trade_time_sub(datas[i][0], "09:44:00") > 0:
            datas = datas[:i]
            break
    total_volume = sum([x[1] for x in datas])
    print("涨停卖成交", total_volume * 20.41)
    print("涨停卖成交", total_volume)
    datas = log_export.load_huaxin_l2_sell_delegate(code).get(code)
    total_delegate = sum([x[2][2] for x in datas])
    print("总委托",total_delegate)
    fdatas = []
    for x in datas:
        if int("093206") < int(x[0].replace(":", "")) < int("094254"):
            fdatas.append(x)
    total_delegate = sum([x[2][2] for x in fdatas])
    print(fdatas)
    print("总委托", total_delegate, total_delegate*20.41)
l2_data_parser.py
@@ -107,7 +107,7 @@
            parse_order_detail(day)
        elif _type == 'Transaction':
            parse_transaction(day)
        elif _type == 'XTSTick':
        elif _type == 'NGTSTick':
            parse_ngtstick(day)
        elif _type == 'MarketData':
            parse_market_data(day)
trade/buy_radical/radical_buy_data_manager.py
@@ -293,7 +293,7 @@
            return
        money_list = [x[0] for x in fmoney_list]
        # 计算大单: 前2个大单的均值
        self.__temp_big_order_threshold[code] = (int(sum(money_list[:2]) // 2), time.time()+10)
        self.__temp_big_order_threshold[code] = (int(sum(money_list[:2]) // 2), time.time() + 10)
        async_log_util.info(logger_l2_radical_buy_data,
                            f"首次上板临时买大单:{code}-{self.__temp_big_order_threshold[code]}-{fmoney_list[:2]}")
        trade_record_log_util.add_common_msg(code, "首封大单设置", f"{self.__temp_big_order_threshold[code][0]}")
@@ -414,8 +414,8 @@
        if len(buy1_list) < 2:
            return False
        latest_buy1 = buy1_list[-1][1]
        if latest_buy1[0] * latest_buy1[1] > 500e4:
            # 最近的买1要小于500万
        if not gpcode_manager.WantBuyCodesManager().is_in_cache(code) and latest_buy1[0] * latest_buy1[1] > 500e4:
            # 不是想买单:最近的买1要小于500万
            return False
        latest_volume = latest_buy1[1]
        max_volume = max([x[1][1] for x in buy1_list])
@@ -494,10 +494,19 @@
            jx_out_blocks = RealTimeKplMarketData.get_top_market_jingxuan_out_blocks()
            if jx_out_blocks:
                blocks = RadicalBuyBlockManager.get_code_blocks(code)[0]
                same_blocks = blocks & set(jx_out_blocks)
                if blocks:
                    fblocks = set(blocks)
                else:
                    fblocks = set()
                for b in blocks:
                    # 辨识度的票不看净流出
                    block_codes = BlockSpecialCodesManager().get_block_codes(b)
                    if block_codes and code in block_codes:
                        # 辨识度
                        fblocks.discard(b)
                same_blocks = fblocks & set(jx_out_blocks)
                if same_blocks:
                    return False, f"【{same_blocks}】板块精选流出", False
        return True, "", False
    @classmethod
@@ -880,8 +889,6 @@
            #         return True, f"开1数量:{count},前排代码尚未成交:{history_before_codes_info[0]}"
            # return True, f"开1数量:{count},前排代码不可买:{history_before_codes_info[0]},历史前排-{history_before_codes_info},开1代码-{open_limit_up_block_codes}"
        # 曾涨停有后排才能买
        if not cls.__is_have_back_codes(code, block):
            return False, f"【{block}】无后排"
        return True, f"开1数量:{count},历史-{history_index + 1} 实时-{current_index + 1}, 前排代码-{current_before_codes_info},开1代码-{open_limit_up_block_codes}"
    @classmethod
@@ -1056,8 +1063,6 @@
                deal_codes = RadicalBuyDealCodesManager().get_deal_codes()
                if pre_code in deal_codes:
                    return False, f"前排代码已成交:{pre_code}"
                if not cls.__is_have_back_codes(code, block):
                    return False, f"【{block}】无后排"
                return True, f"被顺位代码({pre_code}) 尚未成交"
                # pre_code不能买,才能买
@@ -1089,8 +1094,6 @@
        else:
            # 代码为目标代码
            pass
        if not cls.__is_have_back_codes(code, block):
            return False, f"【{block}】无后排"
        return True, f"满足买入需求: 实时前排代码-{current_before_codes_info} 历史前排代码-{history_before_codes_info}"
    @classmethod
@@ -1156,8 +1159,11 @@
        history_index, history_before_codes_info, limit_up_space_ge_60s_codes = cls.__get_history_index(code, block,
                                                                                                        yesterday_limit_up_codes,
                                                                                                        ignore_open_limit_up=False)
        if history_index > 5:
            return False, f"处于首板老{history_index + 1}"
        if history_before_codes_info:
            before_codes = set([x[0] for x in history_before_codes_info])
            before_special_codes = before_codes & set(block_codes)
            if len(before_special_codes) >= 3:
                return False, f"前排辨识度>=3个({before_special_codes})"
        # 判断是净流入前排
        in_blocks = RealTimeKplMarketData.get_top_market_jingxuan_blocks()
@@ -1356,7 +1362,7 @@
        if can_buy_blocks:
            msges.clear()
            for b in can_buy_blocks:
                if KPLPlateForbiddenManager().is_in_cache(b):
                if not is_can_buy_for_forbidden_plate(code, b, yesterday_limit_up_codes):
                    msges.append(b)
            if msges:
                fmsges.append("禁止买入的板块##" + ",".join(msges))
@@ -1850,5 +1856,33 @@
    return False
def is_can_buy_for_forbidden_plate(code, block, yesterday_limit_up_codes):
    """
    被禁止的板块是否可买
    @param code:
    @param block:
    @return:
    """
    if not KPLPlateForbiddenManager().is_in_cache(block):
        # 板块没有被禁止
        return True
    special_codes = BlockSpecialCodesManager().get_block_codes(block)
    if not special_codes:
        # 无辨识度
        return False
    if code not in special_codes:
        # 当前票无辨识度
        return False
    # 是不是首板第一个辨识度的票
    data = RadicalBuyBlockManager().get_history_index(code, block, yesterday_limit_up_codes)
    if data[1]:
        before_codes = set([x[0] for x in data[1]])
        before_codes &= set(special_codes)
        if before_codes:
            # 不是辨识度老大
            return False
    return True
if __name__ == '__main__':
    pass
trade/current_price_process_manager.py
@@ -87,7 +87,7 @@
            index = None
            # 如果当前板块不能买则不订阅
            if KPLPlateForbiddenManager().is_in_cache(b):
            if not radical_buy_data_manager.is_can_buy_for_forbidden_plate(code, b, yesterday_limit_up_codes):
                continue
            if b in top_in_blocks:
                index = top_in_blocks.index(b)
@@ -105,7 +105,7 @@
                                                                    yesterday_limit_up_codes)
            if info[0] < 3:
                return index + 1
            elif info[0] < 6:
            else:
                # 判断是否具有辨识度
                special_codes = BlockSpecialCodesManager().get_block_codes(b)
                if special_codes and code in special_codes:
@@ -114,7 +114,7 @@
        # 尚未涨停过的代码,订阅板块有辨识度的前6
        for b in blocks:
            # 如果当前板块不能买则不订阅
            if KPLPlateForbiddenManager().is_in_cache(b):
            if not radical_buy_data_manager.is_can_buy_for_forbidden_plate(code, b, yesterday_limit_up_codes):
                continue
            if b not in top_in_blocks:
                continue
@@ -122,14 +122,7 @@
            special_codes = BlockSpecialCodesManager().get_block_codes(b)
            if not special_codes or code not in special_codes:
                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] >= 6:
                continue
            # 净流入 + 辨识度 + 整体身位老6之前
            # 净流入 + 辨识度
            return index + 1
    return 10000