From 396858fdab608f9d9bd4c866a6b000f56aa4e03a Mon Sep 17 00:00:00 2001 From: xxm Date: Tue, 18 Aug 2026 12:22:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20per=5Fstock=5Freassess=20rr=5Fratio=3D0?= =?UTF-8?q?=20bug=E2=80=94=E2=80=94lifecycle=E7=9A=84rr=5Fratio=E4=B8=BA0?= =?UTF-8?q?=E6=97=B6=E7=94=A8entry/stop/tp=E8=87=AA=E5=B7=B1=E7=AE=97RR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/profile-scripts/per_stock_reassess.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/deploy/profile-scripts/per_stock_reassess.py b/deploy/profile-scripts/per_stock_reassess.py index f67880d3..51f431a7 100644 --- a/deploy/profile-scripts/per_stock_reassess.py +++ b/deploy/profile-scripts/per_stock_reassess.py @@ -60,7 +60,23 @@ def _build_full_analysis(code, entry, result): eh = result.get("entry_high") if result.get("entry_high") is not None else entry.get("entry_high", 0) sl = result.get("stop_loss") or entry.get("stop_loss", 0) tp = result.get("take_profit") or entry.get("take_profit", 0) - rr = result.get("rr_ratio") or entry.get("rr_ratio", 0) + # 2026-08-18 修复 rr_ratio=0 bug:strategy_lifecycle 的 rr_ratio 可能为 0, + # 用 entry/stop/tp 自己算(RR = (tp-mid)/(mid-sl),mid=(el+eh)/2) + # 若 strategy_lifecycle 给了 rr_ratio > 0 用它;否则用 entry/stop/tp 算 + _rr_from_lifecycle = result.get("rr_ratio") or 0 + if _rr_from_lifecycle > 0: + rr = _rr_from_lifecycle + else: + # 用 entry/stop/tp 自己算(promote 同口径) + _el_rr = result.get("entry_low") if result.get("entry_low") is not None else entry.get("entry_low", 0) + _eh_rr = result.get("entry_high") if result.get("entry_high") is not None else entry.get("entry_high", 0) + _sl_rr = result.get("stop_loss") or entry.get("stop_loss", 0) + _tp_rr = result.get("take_profit") or entry.get("take_profit", 0) + if _el_rr > 0 and _eh_rr > _el_rr and _sl_rr > 0 and _tp_rr > 0: + _mid_rr = (_el_rr + _eh_rr) / 2 + rr = round((_tp_rr - _mid_rr) / (_mid_rr - _sl_rr), 2) if _mid_rr > _sl_rr else 0 + else: + rr = entry.get("rr_ratio", 0) act = result.get("action", "") # ── 从DB拉取大盘、基本面、资金流 ──