Administrator
2024-11-15 d670ee4074c8eddd7a1471fb7e49f5c204b139c2
代码辨识度确认
2个文件已修改
1个文件已添加
112 ■■■■■ 已修改文件
servers/data_server.py 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/code_plate_key_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/block_special_codes_manager.py 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
servers/data_server.py
@@ -12,6 +12,7 @@
from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager, LimitUpDataConstant
from third_data.kpl_limit_up_data_manager import LatestLimitUpBlockManager, CodeLimitUpSequenceManager
from third_data.third_blocks_manager import BlockMapManager
from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
from trade.buy_strategy import OpenLimitUpGoodBlocksBuyStrategy
from trade.buy_radical.radical_buy_data_manager import RadicalBuyBlockManager
from utils import global_util, tool, data_export_util
@@ -98,7 +99,7 @@
        # (板块名称,涨停代码数量,炸板数量,涨停时间)
        limit_up_reason_statistic_info = [(k, len(record_reason_dict[k]), len(record_reason_dict[k]) - len(
            current_reason_dict.get(k) if k in current_reason_dict else []),
                                           int(records_map.get([record_reason_dict[k][0]])[5])) for k in record_reason_dict]
                                           0) for k in record_reason_dict]
        limit_up_reason_statistic_info.sort(key=lambda x: x[1] - x[2])
        limit_up_reason_statistic_info.reverse()
@@ -447,6 +448,9 @@
            # 获取涨停原因下面的代码
            ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
            plate = kpl_util.filter_block(ps_dict["plate"])
            special_codes = BlockSpecialCodesManager().get_block_codes(plate)
            if special_codes is None:
                special_codes = set()
            # 获取板块下的代码
            # 统计目前为止的代码涨停数量(分涨停原因)
            now_limit_up_codes_info = self.__kplDataManager.get_data(KPLDataType.LIMIT_UP)
@@ -466,7 +470,8 @@
                # 代码,名称,涨停时间,是否炸板,是否想买,是否已经下过单,涨停时间,自由流通市值,是否在黑名单里面
                codes_info.append(
                    [d[3], d[4], tool.to_time_str(int(d[5])), 1 if d[3] not in now_limit_up_codes else 0, 0, 0, d[12],
                     output_util.money_desc(d[13]), 1, 1 if l2_trade_util.is_in_forbidden_trade_codes(d[3]) else 0])
                     output_util.money_desc(d[13]), 1, 1 if l2_trade_util.is_in_forbidden_trade_codes(d[3]) else 0,
                     1 if d[3] in special_codes else 0])
            for d in record_limit_up_datas:
                if kpl_util.filter_block(d[2]) == plate:
@@ -495,6 +500,15 @@
            # 获取涨停原因下面的代码
            ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
            plate = kpl_util.filter_block(ps_dict["plate"])
            special_codes = set()
            plates = BlockMapManager().filter_blocks({plate})
            for p in plates:
                _codes = BlockSpecialCodesManager().get_block_codes(p)
                if _codes is None:
                    _codes = set()
                special_codes |= _codes
            # 获取板块下的代码
            # 统计目前为止的代码涨停数量(分涨停原因)
            now_limit_up_codes_info = self.__kplDataManager.get_data(KPLDataType.LIMIT_UP)
@@ -521,7 +535,7 @@
                # 代码,名称,涨停时间,是否炸板,是否想买,是否已经下过单,涨停时间,自由流通市值,是否在黑名单里面
                codes_info.append(
                    [d[3], d[4], tool.to_time_str(int(d[5])), 1 if d[3] not in now_limit_up_codes else 0, 0, 0, d[12],
                     output_util.money_desc(d[13]), 1, 1 if l2_trade_util.is_in_forbidden_trade_codes(d[3]) else 0])
                     output_util.money_desc(d[13]), 1, 1 if l2_trade_util.is_in_forbidden_trade_codes(d[3]) else 0, 1 if d[3] in special_codes else 0])
            codes_info.sort(key=lambda x: x[2])
            # 查询是否为想买单
            green_codes = gpcode_manager.GreenListCodeManager().list_codes_cache()
@@ -956,10 +970,48 @@
if __name__ == "__main__":
    code = "603359"
    records = code_info_output.load_trade_record_cancel_watch_indexes(code,
                                                                      trade_record_log_util.CancelWatchIndexesInfo.CANCEL_TYPE_H)
    print(records)
    # 统计目前为止的代码涨停数量(分涨停原因)
    currents = LimitUpDataConstant.current_limit_up_datas
    records = LimitUpDataConstant.history_limit_up_datas
    if not currents:
        currents = KPLDataManager.get_data(KPLDataType.LIMIT_UP)
    # 获取历史涨停
    if not records:
        KPLLimitUpDataRecordManager.load_total_datas()
        records = KPLLimitUpDataRecordManager.total_datas
    records_map = {x[3]: x for x in records}
    current_codes = [d[0] for d in currents]
    record_codes = [d[3] for d in records]
    # 计算涨停时间排序
    record_reason_dict = {}
    current_reason_dict = {}
    for _code in record_codes:
        blocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(_code)
        if not blocks:
            blocks = set()
        for b in blocks:
            if b not in record_reason_dict:
                record_reason_dict[b] = []
            record_reason_dict[b].append(_code)
    for _code in current_codes:
        blocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(_code)
        if not blocks:
            blocks = set()
        for b in blocks:
            if b not in current_reason_dict:
                current_reason_dict[b] = []
            current_reason_dict[b].append(_code)
    # (板块名称,涨停代码数量,炸板数量,涨停时间)
    limit_up_reason_statistic_info = [(k, len(record_reason_dict[k]), len(record_reason_dict[k]) - len(
        current_reason_dict.get(k) if k in current_reason_dict else []),
                                       0) for k in record_reason_dict]
    limit_up_reason_statistic_info.sort(key=lambda x: x[1] - x[2])
    limit_up_reason_statistic_info.reverse()
    response_data = json.dumps({"code": 0, "data": {"limit_up_count": len(current_codes),
                                                    "open_limit_up_count": len(record_codes) - len(current_codes),
                                                    "limit_up_reason_statistic": limit_up_reason_statistic_info}})
    # data = code_info_output.get_output_params(code, self.__jingxuan_cache_dict, self.__industry_cache_dict,
    #                                           trade_record_date=date)
third_data/code_plate_key_manager.py
@@ -364,7 +364,7 @@
        for data in datas:
            if data[1] in constant.KPL_INVALID_BLOCKS:
                continue
            if data[3] < 1e8:
            if data[3] < 5e7:
                continue
            blocks.add(data[1])
            if len(blocks) >= 10:
@@ -384,7 +384,7 @@
        for data in datas:
            if data[1] in constant.KPL_INVALID_BLOCKS:
                continue
            if data[3] > -1e8:
            if data[3] > -5e7:
                # 过滤5千万以上的
                break
            blocks.add(data[1])
trade/buy_radical/block_special_codes_manager.py
New file
@@ -0,0 +1,42 @@
"""
板块辨识度票管理
"""
from db import mysql_data_delegate as mysql_data
from utils import tool
@tool.singleton
class BlockSpecialCodesManager:
    __block_codes_dict = {}
    def __init__(self):
        self.mysql = mysql_data.Mysqldb()
        self.__load_data()
    def __load_data(self):
        results = self.mysql.select_all("select _block,_code from block_special_codes")
        temp_dict = {}
        for row in results:
            if row[0] not in temp_dict:
                temp_dict[row[0]] = set()
            temp_dict[row[0]].add(row[1])
        self.__block_codes_dict = temp_dict
    def get_block_codes(self, block):
        return self.__block_codes_dict.get(block)
    def set_block_codes_list(self, datas):
        """
        设置数据
        @param datas:[(板块,代码,代码名称,涨停次数,自由市值)]
        @return:
        """
        self.mysql.execute("delete from block_special_codes")
        for d in datas:
            sql = f"insert into block_special_codes(_block,_code,_code_name,_limit_up_count,_zyltgb,_create_time) values('{d[0]}', '{d[2]}', '{d[1]}', {d[3]}, {d[4]}, now())"
            self.mysql.execute(sql)
if __name__ == "__main__":
    codes = BlockSpecialCodesManager().get_block_codes("证券")
    print(codes)