Administrator
2024-08-04 fe1b515c6286f80a244e044236fb140ab7090495
板上放量下单规则修改
3个文件已修改
78 ■■■■ 已修改文件
l2/l2_data_manager_new.py 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/test.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/kpl_limit_up_data_manager.py 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_data_manager_new.py
@@ -908,7 +908,7 @@
            # 判断是否为板上放量:
            # 1.当前成交价为涨停价
            # 2.总卖额为0
            if abs(float(limit_up_price) - float(trade_price)) < 0.001:
            if abs(limit_up_price - float(trade_price)) < 0.001:
                # 获取最近的非涨停价成交时间
                not_limit_up_info = current_price_process_manager.get_trade_not_limit_up_info(code)
                if not not_limit_up_info or tool.trade_time_sub(total_data[-1]['val']['time'],
@@ -919,8 +919,18 @@
                    if deal_list:
                        total_deal_volume = sum([x[1] for x in deal_list])
                    total_deal_money = int(total_deal_volume * float(limit_up_price))
                    if total_deal_money < 200000:
                        return False, True, f"板上放量成交金额不足,近2s总成交金额:{total_deal_money}小于20w"
                    # 获取买1的封单额
                    buy1_money = code_price_manager.Buy1PriceManager().get_latest_buy1_money(code)
                    buy1_price = code_price_manager.Buy1PriceManager().get_buy1_price(code)
                    if buy1_price and abs(limit_up_price - buy1_price) > 0.0001:
                        # 买1未涨停
                        buy1_money = 0
                    if not buy1_money:
                        buy1_money = 1
                    deal_rate = round(total_deal_money / buy1_money, 2)
                    if deal_rate < 0.05:
                        return False, True, f"板上放量成交金额不足,近2s总成交比例({deal_rate}):{total_deal_money}/{buy1_money}小于0.05"
            # 判断成交进度是否距离我们的位置很近
            trade_index, is_default = cls.__TradeBuyQueue.get_traded_index(code)
            if False and not is_default and trade_index:
@@ -2249,6 +2259,11 @@
            # 9:31之前下单,安全笔数最小为5笔
            if int(tool.get_now_time_str().replace(":", "")) < int("093100"):
                safe_count = max(safe_count, 5)
            # 深证的票,第一次下单必须要有3笔安全笔数
            if tool.is_sz_code(code):
                place_order_count = trade_data_manager.PlaceOrderCountManager().get_place_order_count(code)
                if place_order_count == 0:
                    safe_count = max(safe_count, 3)
            if buy_count < safe_count:
                not_buy_msg = f"【{i}】安全笔数不足,{buy_count}/{safe_count}"
test/test.py
@@ -20,6 +20,4 @@
if __name__ == "__main__":
    __days = HistoryKDatasUtils.get_latest_trading_date_cache(6)
    __days.insert(0, tool.get_now_date_str())
    print(__days)
    pass
third_data/kpl_limit_up_data_manager.py
@@ -35,6 +35,55 @@
    return kpl_data_manager.KPLLimitUpDataRecordManager.total_datas
class CodeLimitUpSequenceManager:
    """
    代码身位管理
    """
    # 首板身位
    __first_block_sequence_dict = {}
    def set_current_limit_up_datas(self, current_limit_up_datas):
        """
        设置目前的涨停代码
        @param current_limit_up_datas:
        @return:
        """
        records = get_today_history_limit_up_datas_cache()
        # 按代码排序
        # {"代码":(代码,涨停原因, 涨停时间, 几版)}
        current_code_block_dict = {x[0]: (x[0], x[2], x[5], x[4]) for x in current_limit_up_datas}
        record_code_block_dict = {x[3]: (x[3], x[2], x[5], x[12]) for x in records}
        # 根据涨停原因统计
        # {"板块":{代码}}
        block_codes = {}
        limit_up_codes = set()
        for code in current_code_block_dict:
            b = current_code_block_dict[code][1]
            if b not in block_codes:
                block_codes[b] = set()
            block_codes[b].add(code)
            limit_up_codes.add(code)
        for code in record_code_block_dict:
            b = record_code_block_dict[code][1]
            if b not in block_codes:
                block_codes[b] = set()
            block_codes[b].add(code)
        for code in limit_up_codes:
            # 计算身位
            b = current_code_block_dict[code][1]
            codes = block_codes[b]
            total_count = len(codes)
            # 统计真正涨停数
            limit_up_count = 0
            for c in codes:
                if c in limit_up_codes:
                    limit_up_count += 1
            # TODO 获取首板代码的排位
class LatestLimitUpBlockManager:
    """
    最近涨停的板块管理
@@ -184,7 +233,7 @@
            max_rate_info = None
            for code in block_codes_dict[d[0]]:
                if max_rate_info is None:
                    max_rate_info = (code, self.__k_max_rate.get(code),  self.__code_name_dict.get(code))
                    max_rate_info = (code, self.__k_max_rate.get(code), self.__code_name_dict.get(code))
                if max_rate_info[1] < self.__k_max_rate.get(code):
                    max_rate_info = (code, self.__k_max_rate.get(code), self.__code_name_dict.get(code))
            fdata.append(max_rate_info)
@@ -234,5 +283,3 @@
        rate = int((volumes_data[0]["close"] - min_price) * 100 / min_price)
        cls.__k_max_rate[code] = rate
        return cls.__k_datas.get(code)