Administrator
2024-02-22 e1788016750ad6ec1dfc28a4e6948ecaf5b326e4
l2/cancel_buy_strategy.py
@@ -39,7 +39,7 @@
                                                       is_default=is_default)
    HourCancelBigNumComputer().set_real_place_order_index(code, index, buy_single_index)
    GCancelBigNumComputer().set_real_place_order_index(code, index, buy_single_index, is_default)
    FCancelBigNumComputer().set_real_order_index(code, index)
    FCancelBigNumComputer().set_real_order_index(code, index, is_default)
class SecondCancelBigNumComputer:
@@ -1629,7 +1629,8 @@
            for k in keys:
                code = k.split("-")[-1]
                val = RedisUtils.get(__redis, k)
                CodeDataCacheUtil.set_cache(cls.__real_order_index_cache, code, int(val))
                val = json.loads(val)
                CodeDataCacheUtil.set_cache(cls.__real_order_index_cache, code, val)
        finally:
            RedisUtils.realse(__redis)
@@ -1637,9 +1638,9 @@
    def __get_redis(cls):
        return cls.__redis_manager.getRedis()
    def __set_real_order_index(self, code, index):
        CodeDataCacheUtil.set_cache(self.__real_order_index_cache, code, index)
        RedisUtils.setex_async(self.__db, f"f_cancel_real_order_index-{code}", tool.get_expire(), f"{index}")
    def __set_real_order_index(self, code, index, is_default):
        CodeDataCacheUtil.set_cache(self.__real_order_index_cache, code, (index, is_default))
        RedisUtils.setex_async(self.__db, f"f_cancel_real_order_index-{code}", tool.get_expire(), json.dumps((index, is_default)))
    def __del_real_order_index(self, code):
        CodeDataCacheUtil.clear_cache(self.__real_order_index_cache, code)
@@ -1648,7 +1649,8 @@
    def __get_real_order_index(self, code):
        val = RedisUtils.get(self.__db, f"f_cancel_real_order_index-{code}")
        if val:
            return int(val)
            val = json.loads(val)
            return val[0]
        return None
    def __get_real_order_index_cache(self, code):
@@ -1702,9 +1704,9 @@
        else:
            return False, "快速成交了50%以下"
    # 设置真实的下单位置,返回是否需要撤单
    def set_real_order_index(self, code, index):
        self.__set_real_order_index(code, index)
    # 设置真实的下单位置
    def set_real_order_index(self, code, index, is_default):
        self.__set_real_order_index(code, index, is_default)
    def place_order_success(self, code):
        self.clear(code)
@@ -1712,6 +1714,50 @@
    def cancel_success(self, code):
        self.clear(code)
    # 是否成交太快需要撤单
    def need_cancel_for_deal_fast(self, code, trade_index):
        # 判断是否具有真实的下单位置
        real_order_index_info = self.__get_real_order_index_cache(code)
        if not real_order_index_info:
            return False, "没找到真实下单位"
        if real_order_index_info[1]:
            return False, "真实下单位为默认"
        if real_order_index_info[0] <= trade_index:
            return False, "真实下单位在成交位之前"
        real_order_index = real_order_index_info[0]
        # 统计未撤订单的数量与金额
        total_datas = local_today_datas.get(code)
        # 是否是下单5分钟内
        if tool.trade_time_sub(tool.get_now_time_str(),total_datas[real_order_index]['val']['time']) > 5*60:
            return False, "下单超过5分钟"
        total_left_count = 0
        total_left_num = 0
        for i in range(trade_index + 1, real_order_index_info[0]):
            data = total_datas[i]
            val = data["val"]
            if not L2DataUtil.is_limit_up_price_buy(val):
                continue
            if val["num"] * float(val["price"]) < 5000:
                continue
            left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code,
                                                                                                     i,
                                                                                                     total_datas,
                                                                                                     local_today_canceled_buyno_map.get(
                                                                                                         code))
            if left_count > 0:
                total_left_count += left_count
                total_left_num += val["num"] * left_count
        if total_left_count < 10:
            return True, f"剩余笔数不足({total_left_count}),成交进度:{trade_index},真实下单位置:{real_order_index}"
        limit_up_price = gpcode_manager.get_limit_up_price(code)
        if limit_up_price and total_left_num * float(limit_up_price) < 1000*100:
            return True, f"剩余金额不足({round(total_left_num * float(limit_up_price)*100)}),成交进度:{trade_index},真实下单位置:{real_order_index}"
        return False, "不满足撤单条件"
# ---------------------------------G撤-------------------------------
class GCancelBigNumComputer: