admin
2025-03-21 5964226bc37de47919515fec5763ffb625015de6
交易设置及接口
4个文件已修改
150 ■■■■ 已修改文件
log_module/log.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/account_management.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/buying_strategy.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/kpl_api.py 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
log_module/log.py
@@ -315,6 +315,10 @@
                   filter=lambda record: record["extra"].get("name") == "Overall_market_strength_score",
                   rotation="00:00", compression="zip", enqueue=True)
        logger.add(self.get_path("kpl", "stock_of_markets_plate"),
                   filter=lambda record: record["extra"].get("name") == "stock_of_markets_plate",
                   rotation="00:00", compression="zip", enqueue=True)
    def get_path(self, dir_name, log_name):
        path_str = "{}/{}/gp/{}/{}".format(constant.get_path_prefix(), constant.LOG_DIR, dir_name,
                                           log_name) + ".{time:YYYY-MM-DD}.log"
@@ -441,6 +445,7 @@
# -------------------------------开盘啦日志---------------------------------
logger_kpl_jingxuan_in = __mylogger.get_logger("kpl_jingxuan_in")
logger_Overall_market_strength_score = __mylogger.get_logger("Overall_market_strength_score")
logger_stock_of_markets_plate = __mylogger.get_logger("stock_of_markets_plate")
logger_common = __mylogger.get_logger("common")
strategy/account_management.py
@@ -84,10 +84,13 @@
            if currentPosition != 0:
                # 当前持仓
                # print(f"当前持仓=={securityName}")
                if availablePosition != 0:  # 如果可用资金不等于0  昨日收盘价获取到非0值时(不知名原因导致有些票会获取到0值导致后续公式报错,阻止intraday_growth函数正常运行)
                    # print(f"持仓可用股{symbol}")
                    logger.info(f"今日持仓可用==={securityName}")
                if availablePosition != 0 and historyPosFrozen != 0:  # 如果 可用资金 和 昨仓冻结 都不等于0  昨日收盘价获取到非0值时(不知名原因导致有些票会获取到0值导致后续公式报错,阻止intraday_growth函数正常运行)
                    data_cache.available_symbols_set.add(securityID)
                    if historyPosFrozen != 0:
                        logger.info(f"昨日持仓==={securityName}==挂单中》》挂单数量:{historyPosFrozen}")
                    else:
                        logger.info(f"昨日持仓==={securityName}===持仓可用:{availablePosition}")
                else:
                    # 新增持仓
                    logger.info(f"今日新增持仓==={securityName}")
strategy/buying_strategy.py
@@ -522,8 +522,8 @@
                                            f"【{k_line_data[0]['sec_name']}】--------------------------------------------------------------------------------------------------------[小量大涨幅视界]")
                                        logger.info(
                                            f"【无概念 无强度】未出现在板块强度大于2的列表中!瞬时量幅比:{round(last_volume_to_growth_ratio, 2)}%,最新价: {current_price},瞬时涨幅:{round(tick_growth, 2)}%,当日当时涨幅:{today_growth}%。")
                                        logger.info(
                                            f"【强度数据】  ==  {data_cache.market_sift_plate_stock_dict}")
                                        # logger.info(
                                        #     f"【强度数据】  ==  {data_cache.market_sift_plate_stock_dict}")
                                        if last_volume_to_growth_ratio < 0.8:
                                            logger.info(
                                                f"【无概念 无强度 有小量换大涨幅】瞬时量幅比< 0.8 !瞬时量幅比:{round(last_volume_to_growth_ratio, 2)}%。")
@@ -537,8 +537,8 @@
                                                    'volume'] * ratios and now_time > data_cache.MORN_MARKET_TIME:
                                                    logger.info(
                                                        f"【不利】买一量小于卖一量 且 挂买总量小于挂卖总量 且 当日量不足 (9:35后实施)!不买!!公司名称:{k_line_data[0]['sec_name']},自由市值:{free_market_value} 亿,最新价: {current_price}")
                                                    logger.info(
                                                        f"目前获取的精选板块股票强度数据  ==  {data_cache.market_sift_plate_stock_dict}")
                                                    # logger.info(
                                                    #     f"目前获取的精选板块股票强度数据  ==  {data_cache.market_sift_plate_stock_dict}")
                                                elif current_high - current_price > 0.05:
                                                    logger.info(
                                                        f"【不利】当前最新价小于今日最高价!不买!!公司名称:{k_line_data[0]['sec_name']},,最新价: {current_price},,当日最高价:{current_high}")
strategy/kpl_api.py
@@ -11,7 +11,8 @@
import constant
from log_module import async_log_util
from log_module.log import logger_common, logger_kpl_jingxuan_in, logger_Overall_market_strength_score
from log_module.log import logger_common, logger_kpl_jingxuan_in, logger_Overall_market_strength_score, \
    logger_stock_of_markets_plate
# import requests
from strategy import data_cache
from strategy import basic_methods
@@ -225,64 +226,59 @@
    @dask.delayed
    def request_plate_codes(i):
        plate_name = i[1]
        # 尝试过滤掉无意义的概念板块(plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革','超跌', '壳资源', '股权转让', '送转填权']) and '增长' in plate_name
        if (plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革', '超跌',
                               '壳资源', '股权转让', '送转填权']) or ('增长' in plate_name):
            # print(f"{i[1]} 强度:{i[2]}")
            # 通过板块ID获取其下面的个股强度列表
            # print(f"======={i[0]}=======")
            its_stock = json.loads(getCodesByPlate(i[0]))
        # 只在盘中时间获取
        now_time = tool.get_now_time_str()
        if data_cache.L1_DATA_START_TIME < now_time < data_cache.CLOSING_TIME:
            plate_name = i[1]
            # 尝试过滤掉无意义的概念板块(plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革','超跌', '壳资源', '股权转让', '送转填权']) and '增长' in plate_name
            if (plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革', '超跌',
                                   '壳资源', '股权转让', '送转填权']) or ('增长' in plate_name):
                # print(f"{i[1]} 强度:{i[2]}")
                # 通过板块ID获取其下面的个股强度列表
                # print(f"======={i[0]}=======")
            # print(f"its_stock['list']  ===  {its_stock['list']}")
            # print(f"its_stock['list'][0]  ===  {its_stock['list'][0]}")
            logger.info(f"its_stock['list']  ===》》  {its_stock['list']}")
            # logger.info(f"its_stock['list'][0]  ===  {its_stock['list'][0]}")
            its_stock_list_info = its_stock['list']
            logger.info(f"its_stock_list_info==={its_stock_list_info}")
            # 将板块强度下面对应的个股列表打印到日志中
            # for i in its_stock_list_info:
            #     if i[0] != 1:
            #         logger.info(
            #             f"l === 个股代码:{i[0]},公司名称:{i[1]},主力资金推测:{i[2]},未知0值:{i[3]},概念:{i[4]},最新价:{i[5]},当日当时涨幅:{i[6]}%,"
            #             f"成交额:{round(i[7] / 100000000, 2)} 亿,实际换手率:{i[8]}%,未知0值:{i[9]},实际流通:{round(i[10] / 100000000, 2)}亿,"
            #             f"主力买:{round(i[11] / 100000000, 2)}亿,"
            #             f"主力卖:{round(i[12] / 100000000, 2)}亿,"
            #             f"主力净额:{round(i[13] / 10000, 2)}万,买成占比:{i[14]}%,卖成占比:{i[15]}%,净成占比:{i[16]}%,买流占比:{i[17]}%,卖流占比:{i[18]}%,净流占比:{i[19]}%,"
            #             f"区间涨幅:{i[20]}%,量比:{i[21]},未知0:{i[22]},上板情况:{i[23]},上板排名:{i[24]},换手率:{i[25]}%,"
            #             f"未知空值:{i[26]},未知零值:{i[27]},收盘封单:{i[28]},最大封单:{i[29]},未知空值?:{i[30]},"
            #             f"?:{i[30]}%,?:{i[31]},??:{i[32]},振幅:{i[33]}%,未知0????:{i[34]},未知0?????:{i[35]},"
            #             f"?=:{i[36]},?总市值:{i[37]},?流通市值:{i[38]},最终归属概念(收盘后出数据?):{i[39]},领涨次数:{i[40]},"
            #             f"41未知1值:{i[41]},第三季度机构持仓【str数据勿用运算符】:{i[42]}万,?年预测净利润:{i[43]},上年预测净利润:{i[44]},年内预测净利润:{i[45]}"
            #         )
                its_stock = json.loads(getCodesByPlate(i[0]))
            # 获取该概念板块的的子版块
            # its_son_plate = json.loads(getSonPlate(i[0]))
            # logger.info(f"its_son_plate=={its_son_plate['List']}")
            # if its_son_plate['List'][0][2] > 0:
            #     print(f"its_son_plate=={its_son_plate['List'][0]}")
            # for son in its_son_plate['List']:
            #     if son[2] > 0:
            #         print(f"son===={son}")
            # 初始化股票强度列表
            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:
                    # 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]]
                    # 逐个选择性添加its_stock中的元素到个股强度列表中
                    # print(f"its_stock_power===={its_stock_power}")
                    # 整体将添加完善的个股强度列表添加到股票列表中
                    stock_power_list.append(its_stock_power)
            # print(f"stock_power_list===={stock_power_list}")
            # 过滤掉没有瞬时高强度个股的空概念
            if len(stock_power_list) != 0:
                # 将对应板块的股票强度列表新建一个字典
                stock_power_item = {i[1]: stock_power_list}
                # 并更新到精选板块个股字典中
                market_sift_plate_stock_dict.update(stock_power_item)
                logger.info(f"its_stock['list']  ===》》  {its_stock['list']}")
                # logger.info(f"its_stock['list'][0]  ===  {its_stock['list'][0]}")
                async_log_util.info(logger_stock_of_markets_plate, f"{its_stock['list']}")
                its_stock_list_info = its_stock['list']
                logger.info(f"its_stock_list_info==={its_stock_list_info}")
                # 将板块强度下面对应的个股列表打印到日志中
                # for i in its_stock_list_info:
                #     if i[0] != 1:
                #         logger.info(
                #             f"l === 个股代码:{i[0]},公司名称:{i[1]},主力资金推测:{i[2]},未知0值:{i[3]},概念:{i[4]},最新价:{i[5]},当日当时涨幅:{i[6]}%,"
                #             f"成交额:{round(i[7] / 100000000, 2)} 亿,实际换手率:{i[8]}%,未知0值:{i[9]},实际流通:{round(i[10] / 100000000, 2)}亿,"
                #             f"主力买:{round(i[11] / 100000000, 2)}亿,"
                #             f"主力卖:{round(i[12] / 100000000, 2)}亿,"
                #             f"主力净额:{round(i[13] / 10000, 2)}万,买成占比:{i[14]}%,卖成占比:{i[15]}%,净成占比:{i[16]}%,买流占比:{i[17]}%,卖流占比:{i[18]}%,净流占比:{i[19]}%,"
                #             f"区间涨幅:{i[20]}%,量比:{i[21]},未知0:{i[22]},上板情况:{i[23]},上板排名:{i[24]},换手率:{i[25]}%,"
                #             f"未知空值:{i[26]},未知零值:{i[27]},收盘封单:{i[28]},最大封单:{i[29]},未知空值?:{i[30]},"
                #             f"?:{i[30]}%,?:{i[31]},??:{i[32]},振幅:{i[33]}%,未知0????:{i[34]},未知0?????:{i[35]},"
                #             f"?=:{i[36]},?总市值:{i[37]},?流通市值:{i[38]},最终归属概念(收盘后出数据?):{i[39]},领涨次数:{i[40]},"
                #             f"41未知1值:{i[41]},第三季度机构持仓【str数据勿用运算符】:{i[42]}万,?年预测净利润:{i[43]},上年预测净利润:{i[44]},年内预测净利润:{i[45]}"
                #         )
                # 初始化股票强度列表
                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:
                        # 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]]
                        # 逐个选择性添加its_stock中的元素到个股强度列表中
                        # print(f"its_stock_power===={its_stock_power}")
                        # 整体将添加完善的个股强度列表添加到股票列表中
                        stock_power_list.append(its_stock_power)
                # print(f"stock_power_list===={stock_power_list}")
                # 过滤掉没有瞬时高强度个股的空概念
                if len(stock_power_list) != 0:
                    # 将对应板块的股票强度列表新建一个字典
                    stock_power_item = {i[1]: stock_power_list}
                    # 并更新到精选板块个股字典中
                    market_sift_plate_stock_dict.update(stock_power_item)
    data = (getMarketJingXuanRealRankingInfo())
    market_sift_plate = json.loads(data)
@@ -293,15 +289,15 @@
    # logger.info(f"market_sift_plate['list'][0]  ======{market_sift_plate['list'][0]}")
    # 初始化精选板块对应个股字典
    market_sift_plate_stock_dict = {}
    if 'list' in market_sift_plate:
        ds = []
        for d in market_sift_plate['list']:
            ds.append(request_plate_codes(d))
        dask_result = batch_get_plate_codes(ds)
        dask_result.compute()
        now_time = tool.get_now_time_str()
        if data_cache.L1_DATA_START_TIME < now_time < data_cache.CLOSING_TIME:
            logger.info(f"精选板块股票强度数据更新 == {market_sift_plate_stock_dict}")
    # if 'list' in market_sift_plate:
    #     ds = []
    #     for d in market_sift_plate['list']:
    #         ds.append(request_plate_codes(d))
    #     dask_result = batch_get_plate_codes(ds)
    #     dask_result.compute()
    #     now_time = tool.get_now_time_str()
    #     if data_cache.L1_DATA_START_TIME < now_time < data_cache.CLOSING_TIME:
    #         logger.info(f"精选板块股票强度数据更新 == {market_sift_plate_stock_dict}")
    return market_sift_plate_stock_dict