Administrator
2024-12-03 bd3b7881d06dbae315f6c39a4aaa95968af4eefa
L2订阅的目标代码修改
4个文件已修改
118 ■■■■ 已修改文件
l2/huaxin/huaxin_target_codes_manager.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/code_plate_key_manager.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/radical_buy_data_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/current_price_process_manager.py 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/huaxin/huaxin_target_codes_manager.py
@@ -12,6 +12,7 @@
from log_module import async_log_util
from log_module.log import logger_l2_codes_subscript, logger_debug
from third_data import kpl_data_manager, kpl_api, history_k_data_manager
from third_data.code_plate_key_manager import RealTimeKplMarketData
from trade import current_price_process_manager
from utils import tool, global_util, init_data_util
@@ -144,7 +145,12 @@
        async_log_util.info(logger_l2_codes_subscript, f"{request_id}接受到L1的数据,预处理完成")
        try:
            tick_datas = first_target_code_data_processor.process_first_codes_datas(flist, request_id)
            current_price_process_manager.accept_prices(tick_datas, request_id)
            block_top_in_list = RealTimeKplMarketData.top_in_list_cache
            in_blocks = [x[1] for  x in block_top_in_list]
            yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes()
            if yesterday_codes is None:
                yesterday_codes = set()
            current_price_process_manager.accept_prices(tick_datas, request_id, in_blocks[:20], yesterday_codes)
        except Exception as e:
            logger_debug.exception(e)
        finally:
third_data/code_plate_key_manager.py
@@ -357,7 +357,7 @@
    def set_market_jingxuan_blocks(cls, datas):
        """
        设置精选流入数据
        @param datas:
        @param datas:[(板块编号,板块名称,涨幅, 板块流入金额)]
        @return:
        """
        # 流入阈值
@@ -380,7 +380,6 @@
            fb = BlockMapManager().filter_blocks({data[1]})
            if blocks & fb:
                continue
            for b in fb:
                fblock_money[b] = data[3]
@@ -1008,7 +1007,8 @@
    @classmethod
    def __compute_can_buy_blocks(cls, code, current_limit_up_datas, limit_up_record_datas,
                                 yesterday_current_limit_up_codes, before_blocks_dict,
                                 current_limit_up_block_codes_dict, high_level_general_code_blocks, codes_delegate, codes_success):
                                 current_limit_up_block_codes_dict, high_level_general_code_blocks, codes_delegate,
                                 codes_success):
        # 根据代码泛化板块获取泛化板块的代码集合
        high_level_general_block_codes = {}
        for c in high_level_general_code_blocks:
@@ -1137,7 +1137,9 @@
                                                                                                                   yesterday_current_limit_up_codes,
                                                                                                                   before_blocks_dict,
                                                                                                                   current_limit_up_block_codes_dict,
                                                                                                                   high_level_general_code_blocks, delegate_codes, deal_codes)
                                                                                                                   high_level_general_code_blocks,
                                                                                                                   delegate_codes,
                                                                                                                   deal_codes)
        # 保存板块计算结果
        cls.__can_buy_compute_result_dict[code] = (
            can_buy_blocks, unique, msg, can_buy_strong_blocks, keys, active_buy_blocks)
trade/buy_radical/radical_buy_data_manager.py
@@ -359,6 +359,10 @@
        return current_index, before_codes_info
    @classmethod
    def get_history_index(cls, code, block, yesterday_limit_up_codes, exclude_codes=None, ignore_open_limit_up=True):
        return cls.__get_history_index(code, block, yesterday_limit_up_codes, exclude_codes, ignore_open_limit_up)
    @classmethod
    def __get_history_index(cls, code, block, yesterday_limit_up_codes, exclude_codes=None, ignore_open_limit_up=True):
        """
        获取历史涨停身位
trade/current_price_process_manager.py
@@ -7,9 +7,12 @@
from l2.huaxin import huaxin_target_codes_manager
from log_module import async_log_util
from log_module.log import logger_l2_codes_subscript
from log_module.log import logger_l2_codes_subscript, logger_debug
import constant
from code_attribute import gpcode_manager
from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager
from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
from trade.buy_radical.radical_buy_data_manager import RadicalBuyBlockManager
from utils import tool, import_util
from trade import trade_manager, l2_trade_util, trade_constant
from trade.trade_data_manager import CodeActualPriceProcessor
@@ -21,11 +24,65 @@
latest_add_codes = set()
def accept_prices(prices, request_id=None):
    print("总价格代码数量:", len(prices))
    now_str = tool.get_now_time_str()
    # 获取想买单
    want_codes = gpcode_manager.WantBuyCodesManager().list_code_cache()
def __compute_code_order(code, top_in_blocks=None, yesterday_limit_up_codes=None):
    """
    计算代码的排序
    @param code:
    @param top_in_blocks: 净流入前几
    @return: 排序值,若为负值不订阅
    """
    # 想买单/隔夜单排序位
    if yesterday_limit_up_codes is None:
        yesterday_limit_up_codes = set()
    if top_in_blocks is None:
        top_in_blocks = []
    # 想买单
    if gpcode_manager.WantBuyCodesManager().is_in_cache(code):
        return 0
    # 隔夜单拍一
    if gpcode_manager.BuyOpenLimitUpCodeManager().is_in_cache(code):
        return 0
    trade_state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code)
    # 如果当前清单处于委托状态就不能移除
    if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED:
        return 0
    # 高位板
    if code in yesterday_limit_up_codes:
        return -1
    # 黑名单
    if l2_trade_util.is_in_forbidden_trade_codes(code):
        return -1
    # 板块
    blocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(code)
    if not blocks:
        return -1
    for b in blocks:
        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] < 4:
                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
def accept_prices(prices, request_id=None, top_in_blocks=None, yesterday_limit_up_codes=None):
    """
    接收价格,处理订阅
    @param yesterday_limit_up_codes: 昨日涨停数据
    @param history_limit_up_datas: 历史涨停数据
    @param prices:
    @param request_id:
    @param top_in_blocks: 净流入前几的代码
    @return:
    """
    logger_debug.debug(f"接收L1数据测试:流入前20-{top_in_blocks}")
    if True:
        _code_list = []
        _delete_list = []
@@ -37,24 +94,14 @@
            pricePre = gpcode_manager.CodePrePriceManager.get_price_pre_cache(code)
            if pricePre is not None:
                # 是否是想买单
                is_want_buy = code in want_codes
                trade_state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code)
                # 如果当前清单处于委托状态就不能移除
                if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED:
                    is_want_buy = True
                if gpcode_manager.BuyOpenLimitUpCodeManager().is_in_cache(code):
                    is_want_buy = True
                order_index = __compute_code_order(code, top_in_blocks, yesterday_limit_up_codes)
                rate = round((price - pricePre) * 100 / pricePre, 2)
                if tool.is_ge_code(code):
                    # 创业板的涨幅需要打折
                    rate = rate / 2
                if rate >= 0:
                    # 暂存涨幅为正的代码
                    _code_list.append((rate, code, 1 if is_want_buy else 0))
                elif is_want_buy:
                    _code_list.append((rate, code, 1 if is_want_buy else 0))
                if order_index >= 0:
                    _code_list.append((rate, code, order_index))
                else:
                    # 暂存涨幅为负的代码
                    _delete_list.append((rate, code, 0))
@@ -69,7 +116,8 @@
        gpcode_manager.set_prices(temp_prices)
        # -------------------------------处理交易位置分配---------------------------------
        # 排序
        new_code_list = sorted(_code_list, key=lambda e: (e.__getitem__(2), e.__getitem__(0)), reverse=True)
        new_code_list = sorted(_code_list, key=lambda e: (e[2], -e[0]))
        logger_debug.debug(f"接收L1数据测试:排序过后的代码-{new_code_list[:75]}")
        # -------------------------------处理L2监听---------------------------------
        max_count = constant.HUAXIN_L2_MAX_CODES_COUNT
@@ -78,10 +126,10 @@
            if l2_trade_util.is_in_forbidden_trade_codes(
                    item[1]) or item[0] < 0:
                # 在(黑名单)/(涨幅小于)的数据
                if trade_manager.CodesTradeStateManager().get_trade_state_cache(
                        item[1]) != trade_constant.TRADE_STATE_BUY_SUCCESS:
                    # 没成交才会加入删除
                    _delete_list.append(item)
                # if trade_manager.CodesTradeStateManager().get_trade_state_cache(
                #         item[1]) != trade_constant.TRADE_STATE_BUY_SUCCESS:
                # 没成交才会加入删除
                _delete_list.append(item)
        for item in _delete_list:
            new_code_list.remove(item)