diff --git a/scripts/batch_reassess.py b/scripts/batch_reassess.py index 5cef291f..5b72556c 100644 --- a/scripts/batch_reassess.py +++ b/scripts/batch_reassess.py @@ -109,7 +109,7 @@ PE={data.get('pe','?')} 市值={data.get('mcap','?')}亿 【买入区间】最低价~最高价 【建议止损】数字 【建议止盈】数字 -【建议仓位】轻仓/中等仓位/重仓(并说明理由)""" +【建议仓位】总资产的百分之几(如8%),只写数字+%号,不要写文字描述""" def parse_response(text): """从LLM回复中提取策略参数""" @@ -143,10 +143,28 @@ def parse_response(text): nums = re.findall(r'[\d.]+', l) if nums: result["take_profit"] = float(nums[0]) - # 仓位 + # 仓位(提取百分比) for l in text.split("\n"): if "建议仓位" in l: - result["position"] = l.replace("建议仓位","").strip()[:100] + nums = re.findall(r'[\d.]+', l) + pct = "" + if nums: + # 取第一个合理的百分比(1-100之间) + for n in nums: + f = float(n) + if 1 <= f <= 100: + pct = f"{f:.0f}%" + break + # 如果没有百分比,用文字描述映射到百分比 + raw = l.replace("建议仓位","").strip() + if not pct: + if "轻仓" in raw: pct = "3%" + elif "中" in raw and "仓" in raw: pct = "5%" + elif "重仓" in raw: pct = "10%" + elif "清仓" in raw or "零仓" in raw: pct = "0%" + else: pct = "5%" + result["position"] = pct + break return result