fix: per_stock_reassess rr_ratio=0 bug——lifecycle的rr_ratio为0时用entry/stop/tp自己算RR

This commit is contained in:
xxm
2026-08-18 12:22:41 +08:00
parent d19a9c4039
commit 396858fdab
+17 -1
View File
@@ -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 bugstrategy_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拉取大盘、基本面、资金流 ──