Administrator
2024-10-15 e23a2fc711caf409359648572828111981ec3681
更改买入票的单价上限/板块更新
3个文件已修改
112 ■■■■■ 已修改文件
constant.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_data_manager_new.py 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/code_plate_key_manager.py 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
constant.py
@@ -188,9 +188,9 @@
    TRADE_ENABLE = True
# 最大的代码价格
MAX_CODE_PRICE = 50
MAX_CODE_PRICE = 100
MIN_CODE_PRICE = 2
MAX_SUBSCRIPT_CODE_PRICE = 50
MAX_SUBSCRIPT_CODE_PRICE = 100
# L2数据是否载入完成
L2_DATA_IS_LOADED = False
l2/l2_data_manager_new.py
@@ -340,11 +340,12 @@
        if order_begin_pos.mode != OrderBeginPosInfo.MODE_RADICAL:
            # 非扫入下单要判断执行位置与真实下单位的间隔时间
            total_datas = local_today_datas.get(code)
            if tool.trade_time_sub_with_ms(L2DataUtil.get_time_with_ms(total_datas[index]["val"]), L2DataUtil.get_time_with_ms(total_datas[order_begin_pos.buy_exec_index]["val"])) > 2000:
            if tool.trade_time_sub_with_ms(L2DataUtil.get_time_with_ms(total_datas[index]["val"]),
                                           L2DataUtil.get_time_with_ms(
                                               total_datas[order_begin_pos.buy_exec_index]["val"])) > 2000:
                L2TradeDataProcessor.cancel_buy(code, f"真实下单位({index})与执行位({order_begin_pos.buy_exec_index})相差2s以上",
                                                cancel_type=trade_constant.CANCEL_TYPE_F)
                return
    # 处理华鑫L2数据
    @classmethod
@@ -724,9 +725,7 @@
    @classmethod
    def start_buy(cls, code, last_data, last_data_index, is_first_code):
        pre_result =  cls.__is_pre_can_buy(code)
        if pre_result[0]:
            cls.__buy(code, 0, last_data, last_data_index, is_first_code)
        cls.__buy(code, 0, last_data, last_data_index, is_first_code)
    @classmethod
    def get_active_buy_blocks(cls, code):
@@ -760,6 +759,9 @@
    @classmethod
    def __buy(cls, code, capture_timestamp, last_data, last_data_index, is_first_code):
        pre_result = cls.__is_pre_can_buy(code)
        if not pre_result[0]:
            return False
        # 添加买入锁
        if code not in cls.__buy_lock_dict:
            cls.__buy_lock_dict[code] = threading.Lock()
@@ -940,7 +942,7 @@
        pre_result = cls.__is_pre_can_buy(code)
        if not pre_result[0]:
            return pre_result[0],pre_result[1], pre_result[2], pre_result[3]
            return pre_result[0], pre_result[1], pre_result[2], pre_result[3]
        now_time_int = int(tool.get_now_time_str().replace(":", ""))
        if 130100 >= now_time_int >= 112900 or now_time_int < 93100:
@@ -1008,7 +1010,8 @@
        # ------------挂单时间约束----------
        order_begin_pos = cls.__get_order_begin_pos(
            code)
        if not trade_result_manager.can_place_order_for_cancel_time(code, total_data[order_begin_pos.buy_exec_index]) and not gpcode_manager.GreenListCodeManager().is_in_cache(code):
        if not trade_result_manager.can_place_order_for_cancel_time(code, total_data[
            order_begin_pos.buy_exec_index]) and not gpcode_manager.GreenListCodeManager().is_in_cache(code):
            return False, True, f"距离上次挂单小于时间限制", True
        # ------------板块约束-------------
@@ -1356,41 +1359,49 @@
    @classmethod
    def cancel_buy(cls, code, msg=None, source="l2", cancel_index=None, cancel_type=None):
        # 是否是交易队列触发
        finally_can_cancel = True
        total_datas = local_today_datas.get(code)
        order_begin_pos = cls.__get_order_begin_pos(
            code)
        # 扫入下单只有L撤能撤单
        if order_begin_pos and order_begin_pos.mode == OrderBeginPosInfo.MODE_RADICAL and cancel_type not in {
            trade_constant.CANCEL_TYPE_L, trade_constant.CANCEL_TYPE_L_UP, trade_constant.CANCEL_TYPE_L_DOWN}:
            l2_log.cancel_debug(code, "撤单中断,原因:{}", "扫入下单不是L撤")
            return False
        # 加绿只有L撤生效
        if gpcode_manager.GreenListCodeManager().is_in_cache(code):
            if cancel_type not in { trade_constant.CANCEL_TYPE_L, trade_constant.CANCEL_TYPE_L_UP, trade_constant.CANCEL_TYPE_L_DOWN}:
                l2_log.cancel_debug(code, "撤单中断,原因:{}", "加绿不是L撤")
        if cancel_type != trade_constant.CANCEL_TYPE_HUMAN:
            # 是否是交易队列触发
            # 扫入下单只有L撤能撤单
            if order_begin_pos and order_begin_pos.mode == OrderBeginPosInfo.MODE_RADICAL and cancel_type not in {
                trade_constant.CANCEL_TYPE_L, trade_constant.CANCEL_TYPE_L_UP, trade_constant.CANCEL_TYPE_L_DOWN}:
                l2_log.cancel_debug(code, "撤单中断,原因:{}", "扫入下单不是L撤")
                return False
        total_datas = local_today_datas.get(code)
        if not total_datas:
            return False
        if source == "trade_queue":
            # 交易队列触发的需要下单后5s
            if order_begin_pos.buy_exec_index is not None and order_begin_pos.buy_exec_index > 0:
                now_time_str = tool.get_now_time_str()
                if tool.trade_time_sub(now_time_str, total_datas[order_begin_pos.buy_exec_index]["val"]["time"]) < 5:
            # 加绿只有L撤/人撤生效
            if gpcode_manager.GreenListCodeManager().is_in_cache(code):
                if cancel_type not in {trade_constant.CANCEL_TYPE_L, trade_constant.CANCEL_TYPE_L_UP,
                                       trade_constant.CANCEL_TYPE_L_DOWN}:
                    l2_log.cancel_debug(code, "撤单中断,原因:{}", "加绿不是L撤")
                    return False
        if code in cls.unreal_buy_dict:
            cls.unreal_buy_dict.pop(code)
            # 取消买入标识
            trade_result_manager.virtual_cancel_success(code, order_begin_pos.buy_single_index,
                                                        order_begin_pos.buy_exec_index, total_datas)
        else:
            can_cancel, reason = cls.__can_cancel(code)
            if not can_cancel and cancel_type != trade_constant.CANCEL_TYPE_HUMAN:
                # 不能取消且不是人工撤单
                l2_log.cancel_debug(code, "撤单中断,原因:{}", reason)
                l2_log.debug(code, "撤单中断,原因:{}", reason)
            if not total_datas:
                return False
            if source == "trade_queue":
                # 交易队列触发的需要下单后5s
                if order_begin_pos.buy_exec_index is not None and order_begin_pos.buy_exec_index > 0:
                    now_time_str = tool.get_now_time_str()
                    if tool.trade_time_sub(now_time_str,
                                           total_datas[order_begin_pos.buy_exec_index]["val"]["time"]) < 5:
                        return False
            if code in cls.unreal_buy_dict:
                cls.unreal_buy_dict.pop(code)
                # 取消买入标识
                trade_result_manager.virtual_cancel_success(code, order_begin_pos.buy_single_index,
                                                            order_begin_pos.buy_exec_index, total_datas)
            else:
                can_cancel, reason = cls.__can_cancel(code)
                if not can_cancel:
                    # 不能取消且不是人工撤单
                    l2_log.cancel_debug(code, "撤单中断,原因:{}", reason)
                    l2_log.debug(code, "撤单中断,原因:{}", reason)
                    return False
        if finally_can_cancel:
            if cancel_index is None:
                cancel_index = total_datas[-1]["index"]
            cls.__LatestCancelIndexManager.set_latest_cancel_index(code, cancel_index)
@@ -1404,7 +1415,7 @@
                trade_result_manager.real_cancel_success(code, order_begin_pos.buy_single_index,
                                                         order_begin_pos.buy_exec_index, total_datas,
                                                         from_real_cancel=True)
        l2_log.debug(code, "执行撤单结束,原因:{}", msg)
            l2_log.debug(code, "执行撤单结束,原因:{}", msg)
        return True
    # 虚拟下单
@@ -1502,7 +1513,7 @@
                                                     max_num_set=set(),
                                                     buy_volume_rate=buy_volume_rate,
                                                     mode=OrderBeginPosInfo.MODE_RADICAL,
                                                     mode_desc="激进买入",
                                                     mode_desc="总抛压小扫入",
                                                     sell_info=sell_info,
                                                     threshold_money=threshold_money)
            order_begin_pos_info.at_limit_up = cls.__is_at_limit_up_buy(code)
third_data/code_plate_key_manager.py
@@ -417,6 +417,14 @@
    # 板块
    __blocks_dict = {}
    __instance = None
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(CodesHisReasonAndBlocksManager, cls).__new__(cls, *args, **kwargs)
        return cls.__instance
    def __get_redis(self):
        return self.__redisManager.getRedis()
@@ -499,6 +507,14 @@
        except:
            pass
        return set()
    def get_history_blocks_cache(self, code):
        """
        获取180天的历史涨停原因缓存
        @param code:
        @return:
        """
        return self.__history_blocks_dict_cache.get(code)
# 目标代码板块关键词管理
@@ -1487,7 +1503,10 @@
        if match_blocks_3:
            match_blocks_3 -= constant.KPL_INVALID_BLOCKS
            fblocks |= match_blocks_3
        # 获取开盘啦历史涨停原因
        kpl_history_blocks = CodesHisReasonAndBlocksManager().get_history_blocks_cache(code)
        if kpl_history_blocks:
            fblocks |= BlockMapManager().filter_blocks(kpl_history_blocks)
        return fblocks, match_blocks
    @classmethod