from strategy.strategy_variable import StockVariables
|
|
sv = StockVariables()
|
|
|
def can_buy():
|
"""
|
@return: 是否可买, 不能买的原因/可买的板块
|
"""
|
# print(f"{target_code}:执行策略")
|
if not sv.昨日非跌停 or not sv.昨日非涨停 or not sv.昨日非炸板:
|
return False, "日K不满足条件"
|
# if sv.六个交易日涨幅过高:
|
# # print(f"{target_code}:六个交易日涨幅过高")
|
# return False, "六个交易日涨幅过高"
|
|
# if sv.当前价 <= sv.日最高价_10:
|
# return False, "没突破10日最高价"
|
# 统计大单数量
|
big_order_count = 0
|
if sv.今日大单数据:
|
big_order_count = len(set([o[0] for o in sv.今日大单数据 if o[4] >= sv.日最高价_10]))
|
if big_order_count < 1: # max(1, int(round(sv.昨日成交额 * 0.33 / 1e8))):
|
return False, f"({big_order_count})少于2个大单"
|
if not sv.代码板块:
|
return False, "没有板块"
|
|
if "汽车零部件" not in sv.代码板块:
|
return False, "非汽车零部件"
|
|
can_buy_blocks = set([k for k in sv.代码板块 if sv.板块涨停 and k in sv.板块涨停 and len(sv.板块涨停[k]) >= 2])
|
if not can_buy_blocks:
|
return False, "板块少于2个涨停"
|
|
# 是否还有可买的板块
|
# can_buy_blocks = sv.代码板块 - sv.板块成交代码.keys()
|
# if not can_buy_blocks:
|
# return False, "没有可买的代码"
|
# tr = 0.06 if target_code.find("30") != 0 else 0.12
|
tr = 1
|
if sv.今日大单数据 and sv.今日大单数据[-1][4] >= sv.日最高价_10 * 1.008 and (sv.今日大单数据[-1][4] - sv.昨日收盘价) / sv.昨日收盘价 < tr:
|
return True, can_buy_blocks, ([(p, sv.板块涨停.get(p)) for p in can_buy_blocks], f"大单数量:{big_order_count}", f"买入价:{sv.今日大单数据[-1][4]}")
|
else:
|
return False, "大单每破10日的100.8%"
|
|
|
compute_result = can_buy()
|