admin
2025-03-31 8d4be7d30a05b97590d29dfd3c83eebce4c4fb14
bug修改
6个文件已修改
40 ■■■■■ 已修改文件
strategy/data_cache.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/kpl_api.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/kpl_data_manager.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/market_sentiment_analysis.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/order_methods.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/hx_qc_value_util.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/data_cache.py
@@ -101,7 +101,7 @@
        # 使用 get 方法安全地获取 symbol 字段的值
        self.min_stocks = [stock.get('symbol') for stock in min_instruments if stock.get('symbol') is not None]
        print(f"min_stocks 数量 ==={len(self.min_stocks)}")
        logger.info(f"min_stocks==={self.min_stocks}")
        # logger.info(f"min_stocks==={self.min_stocks}")
        logging.info(f"全局初始化数据  完成《《《 - {os.getpid()}")
        # 获取当前进程的PID
@@ -121,6 +121,8 @@
AFTER_OPEN_BIDDING_TIME = datetime.time(9, 25, 12).strftime("%H:%M:%S")  # 定义 集合竞价 开始后 时间
OPENING_TIME = datetime.time(9, 30, 00).strftime("%H:%M:%S")  # 定义开盘时间
MORN_MARKET_TIME = datetime.time(9, 35, 00).strftime("%H:%M:%S")  # 定义早盘时间
MORN_MARKET_CLOSING_TIME = datetime.time(11, 30, 00).strftime("%H:%M:%S")  # 定义上午收盘时间
NOON_MARKET_OPENING_TIME = datetime.time(13, 0, 00).strftime("%H:%M:%S")  # 定义下午开盘时间
NOON_MARKET_TIME = datetime.time(13, 5, 00).strftime("%H:%M:%S")  # 定义午盘时间
CLOSE_POSITION_TIME = datetime.time(14, 55, 00).strftime("%H:%M:%S")  # 定义平仓时间
WATCH_DISK_END_TIME = datetime.time(14, 56, 00).strftime("%H:%M:%S")  # 定义 板上盯结束时间
strategy/kpl_api.py
@@ -229,6 +229,9 @@
    def request_plate_codes(i):
        plate_name = i[1]
        log_data = None
        its_stock = json.loads(getCodesByPlate(i[0]))
        if data_cache.OPENING_TIME < now_time < data_cache.NOON_MARKET_TIME:
            log_data = {plate_name: its_stock['list']}
        # 尝试过滤掉无意义的概念板块(plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革','超跌', '壳资源', '股权转让', '送转填权']) and '增长' in plate_name
        if (plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革', '超跌',
                               '壳资源', '股权转让', '送转填权']) or ('增长' in plate_name):
@@ -236,8 +239,6 @@
            # print(f"{i[1]} 强度:{i[2]}")
            # 通过板块ID获取其下面的个股强度列表
            # print(f"======={i[0]}=======")
            its_stock = json.loads(getCodesByPlate(i[0]))
            log_data = {plate_name: its_stock['list']}
            # its_stock_list_info = its_stock['list']
            # logger.info(f"its_stock_list_info==={its_stock_list_info}")
@@ -261,8 +262,7 @@
            stock_power_list = []
            for s in its_stock['list']:
                # 过滤掉涨幅大于  and s[6] < 6.5 且小于0%的 和 名称中包含ST的 和 涨速小于等于0%的 和 只要昨日未涨停 和 上证或深证的正股    and s[9] > 0.0025
                if s[6] > 0 and s[1].find("ST") < 0 and s[1].find("XD") < 0 and s[23].find("板") < 0 and s[24].find(
                        "板") < 0 and (s[0].startswith('60') or s[0].startswith('00')) and s[9] > 1:
                if s[6] > 0 and s[1].find("ST") < 0 and s[1].find("XD") < 0 and s[23].find("板") < 0 and s[24].find("板") < 0 and (s[0].startswith('60') or s[0].startswith('00')) and s[9] > 1:
                    # print(f"{s[1]},个股代码:{s[0]},   涨幅:{s[6]}%   涨速:{s[9]}%   概念:{s[4]}   主力资金推测:{s[2]}   领涨次数:{s[40]}  今日第几板:{s[23]} 是否破版{s[24]}")
                    # 对个股强度 主要 属性列表进行装填
                    its_stock_power = [s[1], s[0], s[6], s[9], s[4], s[2], s[40]]
@@ -746,16 +746,20 @@
        try:
            if data_cache.position_automatic_management_switch is True:
                now_time = tool.get_now_time_str()
                if data_cache.L1_DATA_START_TIME < now_time < data_cache.UPDATE_DATA_TIME:
                if data_cache.L1_DATA_START_TIME < now_time < data_cache.CLOSING_TIME:
                    # 获取大盘综合强度分数
                    data_cache.real_time_market_strong = get_market_strong()
                    # data_cache.time_sharing_market_strong_dirt = time_sharing_market_strong_dirt.update({now: data_cache.real_time_market_strong})
                    # 该logger.info的的日志不再需要打印,后续将转入到GUI客户端上直接显示,该数据的打印交由下方的打印机制异步执行单独存储,以便后续可视化呈现后进行更高效的数据分析
                    # logger.info(f"大盘行情情绪综合强度 [分数]==={data_cache.real_time_market_strong}分")
                    # 大盘综合强度分数 的 异步日志
                    # logger_Overall_market_strength_score.info(data_cache.real_time_market_strong)
                    async_log_util.info(logger_Overall_market_strength_score, f"{data_cache.real_time_market_strong}")
                    if data_cache.MORN_MARKET_CLOSING_TIME < now_time < data_cache.NOON_MARKET_OPENING_TIME:
                        pass
                        logger.info(f"午间休市时间内 不打印大盘综合强度分数")
                    else:
                        # 大盘综合强度分数 的 异步日志
                        # logger_Overall_market_strength_score.info(data_cache.real_time_market_strong)
                        async_log_util.info(logger_Overall_market_strength_score,
                                            f"{data_cache.real_time_market_strong}")
                    usefulMoney = data_cache.account_finance_dict[0].get('usefulMoney', 0)
                    logger.info(f"账户可用资金==={usefulMoney}元")
                    # 低迷情绪比例
@@ -763,7 +767,8 @@
                    # 33分是个两级分化阶梯不好,目前不好拿捏,暂时不用
                    # if data_cache.real_time_market_strong <= 33:
                    if data_cache.real_time_market_strong < 30:
                        low_emotion_mood_ratio = 0.1
                        # 如果大盘综合强度分数小于30,将低迷情绪分数比例设置为0.01,可用资金缩小一百倍
                        low_emotion_mood_ratio = 0.01
                        if data_cache.real_time_market_strong <= 10:
                            low_emotion_mood_ratio = 0
                    logger.info(f"极端低迷情绪比例===={low_emotion_mood_ratio * 100}%")
strategy/kpl_data_manager.py
@@ -14,7 +14,7 @@
        self.__filter_log_datas = []
    def __load_data(self):
        if tool.get_now_time_str() > '15:00:00':
        if tool.get_now_time_str() > '13:10:00':
            logger_debug.info("KPLStockOfMarketsPlateLogManager 开始加载数据")
            datas = log_export.load_stock_of_markets_plate()
            for data in datas:
strategy/market_sentiment_analysis.py
@@ -300,10 +300,6 @@
    else:
        index_composite_tick_increase = '三大指数:涨跌不一'
    logger.info(f"开盘指数开盘瞬时走势播报:{index_composite_tick_increase}")
    # print(f"指数K线{data_cache.all_index_k_line_property_dict}")
    if len(data_cache.all_index_k_line_property_dict) > 0 or data_cache.all_index_k_line_property_dict is not None:
        logger.info(f"指数带属性K线数据的昨日是否为空:{data_cache.all_index_k_line_property_dict['SHSE.000001'][0]}")
        # print(f"指数带属性K线数据的昨日是否为空:{data_cache.all_index_k_line_property_dict['SHSE.000001'][0]['open']}")
    if index_trend_expectation_score > 100:
        index_trend_expectation_score = 100
    return index_trend_expectation_score
strategy/order_methods.py
@@ -34,7 +34,7 @@
    if volume < 100:
        volume = 100
    # 调用笼子价计算工具计算下单价格
    order_price = tool.get_buy_max_price(current_price)
    order_price = round(tool.get_buy_max_price(current_price), 2)
    buy_order = huaxin_trade_api.order(1, symbol[-6:], volume, order_price, blocking=True)
    logger.info(f"current_price===={current_price}    order_price===={order_price}")
    logger.info(f"buy_order===={buy_order}")
utils/hx_qc_value_util.py
@@ -71,6 +71,8 @@
    @param end_date:
    @return:
    """
    if not end_date:
        end_date = tool.get_now_date_str()
    load_latest_trade_calendar()
    _count = -1
    start_date = None
@@ -110,6 +112,7 @@
    end_date = tool.get_now_date_str()
    end_date = tool.date_sub(end_date, -30)
    days = get_trade_calendar(tool.date_sub(end_date, 365), end_date)
    logger_debug.info(f"华鑫API获取交易日历结果:{days}")
    for i in range(0, len(days)):
        if 0 < i < len(days) - 1:
            __trade_calendar_dict[days[i]] = (days[i - 1], days[i + 1])