diff --git a/deploy/profile-scripts/per_stock_reassess.py b/deploy/profile-scripts/per_stock_reassess.py index 6a1480b5..0ebaed0e 100644 --- a/deploy/profile-scripts/per_stock_reassess.py +++ b/deploy/profile-scripts/per_stock_reassess.py @@ -66,23 +66,18 @@ def _build_full_analysis(code, entry, result): eh = result.get("entry_high") sl = result.get("stop_loss") or entry.get("stop_loss", 0) tp = result.get("take_profit") or entry.get("take_profit", 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 + # 2026-08-18 修复 rr_ratio:统一用 entry/stop/tp 算(与 promote 同口径 rr = (tp-mid)/(mid-sl)) + # strategy_lifecycle 的 rr_ratio 可能算错(6.5 vs 实际 8.64),统一用 entry/stop/tp 算最准 + _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: - # 用 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) + # 无有效区间/止损/止盈时,用 holding 的旧 rr_ratio 或 0 + rr = entry.get("rr_ratio", 0) act = result.get("action", "") # ── 从DB拉取大盘、基本面、资金流 ──