Administrator
2025-06-09 8b7972581d0324e3f634b5b5a57a9ed7db1addaf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
"""
买入策略
"""
import constant
from log_module import async_log_util
from log_module.log import logger_buy_strategy
from third_data import kpl_api
from utils import tool
 
 
class OpenLimitUpGoodBlocksBuyStrategy:
    """
    开1的好板块买入策略
    """
    __excuted = False
 
    @classmethod
    def set_current_limit_up_data(cls, datas):
        """
        设置当前的涨停数据
        @param datas:
        @return:
        """
 
        now_time = int(tool.get_now_time_str().replace(":", ""))
        if now_time < int("092800") or now_time > int("093000"):
            return
        if cls.__excuted:
            return
        cls.__excuted = True
 
        # 形如: {"801038":['801038', '维生素', 7.325]}
        reason_id_info_dict = {}
        # 形如: {"801038":{}}
        reason_id_codes = {}
        for d in datas:
            code = d[0]
            limit_up_reason = d[5]
            # [['801038', '维生素', 7.325]]
            reasons = cls.__load_blocks(code, limit_up_reason)
            for r in reasons:
                reason_id_info_dict[r[0]] = r
                if r[0] not in reason_id_codes:
                    reason_id_codes[r[0]] = set()
                reason_id_codes[r[0]].add(code)
        reason_list = [reason_id_info_dict[x] for x in reason_id_info_dict]
        # 按涨幅倒序排
        reason_list.sort(key=lambda x: x[2], reverse=True)
        async_log_util.info(logger_buy_strategy, f"原因排序:{reason_list}")
        async_log_util.info(logger_buy_strategy, f"原因代码:{reason_id_codes}")
        max_lenth = len(reason_list)
        # 剔除宽泛原因
        for i in range(0, max_lenth):
            if i >= len(reason_list):
                break
            if reason_list[i][1] in constant.KPL_INVALID_BLOCKS:
                del reason_list[i]
                i -= 1
 
    @classmethod
    def __load_blocks(cls, code, limit_up_reason):
        """
        加载板块
        @param code:
        @return:
        """
        limit_up_reason_info = None
        jx_blocks = kpl_api.getCodeJingXuanBlocks(code)
        for x in jx_blocks:
            if x[1] == limit_up_reason:
                limit_up_reason_info = x
                break
        recommend_reasons = jx_blocks
        if len(jx_blocks) > 2:
            recommend_reasons = jx_blocks[:2]
        reasons = []
        if limit_up_reason_info:
            reasons.append(limit_up_reason_info)
        for r in recommend_reasons:
            if limit_up_reason_info and r[0] == limit_up_reason_info[0]:
                continue
            reasons.append(r)
        return reasons
 
 
if __name__ == "__main__":
    with open("C:\\Users\\Administrator\\Desktop\\新建文本文档 (2).txt", encoding="utf-8") as f:
        line = f.readline()
        line = eval(line)
        OpenLimitUpGoodBlocksBuyStrategy.set_current_limit_up_data(line)