feat: RR阈值2.0→1.0(保底) + 存档RR分析结论

数据支撑: 123049笔回测 Pearson r=0.05, 分策略/分年规律相反, RR是风控非质量指标
This commit is contained in:
xxm
2026-08-17 18:51:28 +08:00
parent 9d12b7b0d5
commit c9a0cc9183
3 changed files with 95 additions and 5 deletions
+3 -3
View File
@@ -120,8 +120,8 @@ def main():
processed += 1
continue
# 超跌类策略豁免 RR 门槛(超跌反弹 RR 天然 <2,用策略自带参数即可,同 p_oversold 先例)
if _rr < 2.0 and cand_sector not in ("p_oversold", "b_td1_v3", "b_td1"):
print(f"{code} {name} RR={_rr:.2f}<2.0,不入自选")
if _rr < 1.0 and cand_sector not in ("p_oversold", "b_td1_v3", "b_td1"):
print(f"{code} {name} RR={_rr:.2f}<1.0(保底门槛),不入自选")
processed += 1
continue
# 用候选自带参数(不再重锚定)
@@ -164,7 +164,7 @@ def main():
WHERE status='active' AND decision_type='自选策略'
AND code != ?
ORDER BY COALESCE(rr_ratio,0) ASC, updated_at ASC LIMIT 1""", (code,)).fetchone()
if weakest and (weakest[2] or 0) < 2.0:
if weakest and (weakest[2] or 0) < 1.0:
conn.execute(
"INSERT INTO watchlist_log (code, name, event, reason, old_signal, new_signal, price) "
"VALUES (?,?,?,?,?,?,?)",
@@ -77,8 +77,8 @@ def main(dry_run=False):
_rr = conn.execute(
"SELECT rr_ratio FROM holding_strategies WHERE code=? AND status='active'",
(code,)).fetchone()
if _rr and _rr[0] is not None and 0 < _rr[0] < 2.0:
reasons.append(f"RR={_rr[0]}<2.0")
if _rr and _rr[0] is not None and 0 < _rr[0] < 1.0:
reasons.append(f"RR={_rr[0]}<1.0(保底)")
except Exception:
pass
+90
View File
@@ -0,0 +1,90 @@
# RR(盈亏比)与最终结果关联分析结论
> 日期:2026-08-17
> 背景:老莫要求回溯各高分策略选股时选入的 RR,探究 RR 与最终结果是否有关系,以决定 RR 阈值设定。
## 数据来源
- 数据库:`strategy_research.results_json.trades`(各策略严格按规则回测的逐笔交易)
- 样本:123,049 笔交易,15 个策略版本合并(v_mr/v_mr2/v_weak/v1.0/hk_pe_oversold/v2.0/hk_pe_mom/hk_mr2/v3.0/v_mr3/v_oversold/v7.1/v8.1/v_combo/v5.0
- 每笔含 entry_price / exit_price / stop_loss / target / profit_pct / exit_reason / hold_days
## 核心指标定义
- **计划 RR**(选股时):`(target - entry) / (entry - stop_loss)` —— 止盈/止损参数的比例
- **实际 RR**(退出时):`(exit - entry) / (entry - stop_loss)` —— 退出结果的度量
## 分析结果
### 1. 计划 RR vs 最终结果(全局,123,049 笔)
| RR区间 | n | 胜率 | 均收益% | 均持仓天 |
|--------|---|------|--------|---------|
| <1.5 | 28240 | 45.2% | 0.82 | 31.9 |
| 1.5~2.0 | 23268 | 40.2% | 1.74 | 55.5 |
| 2.0~2.5 | 60057 | 50.1% | 3.04 | 28.2 |
| 2.5~3.0 | 7533 | 40.6% | 1.82 | 62.3 |
| ≥3.0 | 3951 | 41.2% | 2.65 | 50.0 |
**Pearson 相关系数 r ≈ 0.05** —— 计划 RR 与收益几乎无线性相关。
### 2. 分策略规律不一致(重要)
| 策略 | 观察 |
|------|------|
| v_mr / v_weak | RR 全部集中 2.0~2.5(胜率 53.6% |
| v1.0 | RR 越高收益越好(0.20→1.14%),≥3.0 回落 |
| v_mr2 | RR 高反而收益低(2.08→1.10% |
| hk_pe_oversold | RR 越高收益越好(9.77→13.78% |
| v8.1 / v_combo | RR<2.0 区间收益最好(11.43%/16.68% |
**RR 与结果的关联是策略特性相关,不是全局规律**
### 3. 分年稳定性(v1.0)—— 不稳定
| 年份 | RR<1.5 收益 | RR2.0-2.5 收益 |
|------|------------|---------------|
| 2021 | +0.46% | +1.77% |
| 2022 | +0.37% | **-1.97%** |
| 2023 | -0.73% | -0.73% |
| 2024 | -0.93% | -0.36% |
| 2025 | +2.17% | +3.28% |
| 2026 | -0.04% | +0.58% |
→ 2022 年 RR 高反而亏,年度间关系不稳定(市场环境主导)。
### 4. 计划 RR 与退出原因(v_mr)
RR 2.0~2.5 时退出分布:time 39% / stop 34% / target 27% —— 多数是时间到期或止损,仅 27% 到达目标位。
### 5. 实际 RR(退出时)vs 结果
| 实际RR | n | 均收益% |
|--------|---|---------|
| <-0.5(深亏) | 8131 | -7.68 |
| -0.5~0 | 1933 | -1.88 |
| 0~0.5 | 2228 | +2.06 |
| 0.5~1.5 | 3144 | +7.29 |
| 1.5~2.5 | 6261 | +17.73 |
→ 实际 RR 与收益强正相关,但它是**退出后的结果度量**,不是选股的前置指标。
## 结论
1. **RR 值本身与最终结果没有稳定的可预测关系**(r≈0.05,分策略相反,分年不稳定)。
2. 计划 RR 只是**止盈/止损参数的比例**(tp/sl),反映策略的风险偏好设计,不是选股质量指标。
3. **RR 2.0 作为统一淘汰阈值没有数据支撑** —— 它既不保证收益,也不代表质量。
4. RR 的合理作用是**防止负期望交易**(如 RR<1 止损距离大于止盈),而非精选门槛。
5. 真正的选股质量指标是**胜率/收益/回撤**strategy_regime_perf 的 win_rate/avg_pnl),RR 是辅助风控。
## 决策落地(2026-08-17
- **RR 阈值从 2.0 调整为 1.0**(基本保底:只拦截止损距离 ≥ 止盈距离的负期望交易)
- promote 进自选:RR < 1.0 拦截
- watchlist_auto_exit 每日淘汰:RR < 1.0 淘汰
- 超跌类策略(p_oversold/b_td1_v3)继续豁免 RR 门槛
## 涉及文件
- `deploy/profile-scripts/promote_candidates.py`promote 门槛)
- `deploy/profile-scripts/watchlist_auto_exit.py`(每日淘汰门槛)