Administrator
3 天以前 5f034f7a6733b03e0d08d7920ec6de1b1517c421
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
from strategy.strategy_variable import StockVariables
 
sv = StockVariables()
 
 
def can_buy():
    """
    @return: 是否可买, 不能买的原因/可买的板块
    """
    # print(f"{target_code}:执行策略")
    if target_code.find("60") != 0 and target_code.find("00") != 0:
        return False, "创业板/科创板的票不买"
    if not sv.昨日非跌停 or not sv.昨日非涨停 or not sv.昨日非炸板:
        return False, "日K不满足条件"
    if not sv.领涨板块信息:
        return False, "没有板块"
    if sv.自由流通市值 > 300e8 or sv.自由流通市值 < 10e8:
        return False, f"自由市值({sv.自由流通市值})不满足要求"
 
    if sv.今日涨停价 > 60 or sv.今日涨停价 < 2.99:
        return False, "今日涨停价高于60/低于2.99"
 
    if sv.涨停数_30 <= 0 and not sv.日放倍量日期_15:
        return False, "30个交易日无涨停且15个交易日无倍量"
 
    if sv.今日涨停价 < sv.日最高价_5:
        return False, "今日涨停价需大于5日最高价"
 
    if sv.涨停数_5 > 3 or sv.跌停数_5 > 3 or sv.炸板数_5 > 3:
        return False, "5日涨停数/炸板数/跌停数>3"
 
    if sv.今日开盘价 and (sv.今日开盘价 - sv.昨日收盘价) / sv.昨日收盘价 < -0.03:
        return False, "开盘涨幅小于-0.03"
 
    tr = 0.07
    rate = (sv.当前价 - sv.昨日收盘价) / sv.昨日收盘价
    if rate >= tr:
        return False, f"涨幅过高:{rate}"
    elif rate > 0.03 and sv.今日成交量 < sv.日最高量_10[0] * 0.9:
        return False, f"涨幅较高:{rate},量不足"
    if rate < 0:
        return False, f"水下不买"
 
    # 低于最高价的4%就不买
    if (sv.今日最高价 - sv.当前价) / sv.昨日收盘价 > 0.04:
        return False, f"低于分时高价4个点"
 
    if (sv.当前价 - round(sv.今日成交额 / sv.今日成交量, 2)) / sv.昨日收盘价 >= 0.02:
        return False, f"买入价高于均价2个点"
 
    # TODO 老题材买入
    if sv.今日成交量 < sv.昨日成交量 * 0.8:
        return False, f"实时成交量必须≥90%昨日总成交量"
 
    if sv.昨日成交量 <= 0:
        return False, f"昨日量是0"
 
    if sv.当前价 > sv.昨日最低价 * 1.1:
        return False, f"买入时的价格必须≤昨日最低价*110%"
 
    if abs(sv.今日最高价 - sv.今日涨停价) <= 0.001:
        return False, f"今日有涨停"
 
    can_buy_blocks = set()
    for k in sv.领涨板块信息.keys():
        if sv.开盘啦领涨板块涨停 and k in sv.开盘啦领涨板块涨停 and len(sv.开盘啦领涨板块涨停[k]) >= 1:
            can_buy_blocks.add(k)
    # new_blocks = sv.开盘啦领涨板块涨停.keys() - sv.日出现的板块_5
    # print("新题材板块:", [(b, sv.开盘啦领涨板块涨停[b]) for b in new_blocks])
 
    can_buy_blocks = can_buy_blocks - sv.日出现的板块_5
    # print("新题材", can_buy_blocks)
 
    if not can_buy_blocks:
        return False, "没有新板块"
    # print("新题材", target_code, can_buy_blocks, [(b, sv.开盘啦领涨板块涨停.get(b)) for b in can_buy_blocks])
 
    return True, can_buy_blocks, (
        f"买入价:{sv.当前价},涨幅:{round((sv.当前价 - sv.昨日收盘价) * 100 / sv.昨日收盘价, 2)}%  量:{sv.今日成交量}/{sv.昨日成交量}, 分时最高价:{sv.今日最高价}, 自由流通:{round(sv.自由流通市值 / 1e8, 2)}亿",
        [(p, f"领涨次数:{sv.领涨板块信息.get(p)[1]}/{sv.领涨板块信息.get(p)[2]}", sv.开盘啦领涨板块涨停.get(p)) for p in can_buy_blocks])
 
 
compute_result = can_buy()