feat: mr框架双边条件增强——rsi_min/mom20_min/vol_ratio_min下限+mom20_max改is not None(港股趋势策略需要,A股未设不影响)

This commit is contained in:
hmo
2026-08-15 01:44:46 +08:00
parent c8e1181b81
commit 816f17ae05
+16 -4
View File
@@ -2258,7 +2258,7 @@ def run_mr_backtest(strategy_version, start_date, end_date, capital=913000,
trades = []
screened = 0
skip_stats = {'no_bars': 0, 'bias': 0, 'rsi': 0, 'ret60': 0, 'mom20': 0,
'amount': 0, 'rsi_delta': 0, 'mkt': 0, 'next_open': 0}
'amount': 0, 'rsi_delta': 0, 'vol_ratio': 0, 'mkt': 0, 'next_open': 0}
for code, name in stocks:
screened += 1
@@ -2289,7 +2289,9 @@ def run_mr_backtest(strategy_version, start_date, end_date, capital=913000,
if bmax is not None and bias60 > bmax:
skip_stats['bias'] += 1; i += 1; continue
# 2. RSI 超卖
# 2. RSI 超卖rsi_max 上限);2026-08-14 港股趋势策略需 rsi_min 下限(双边对称)
if mr.get('rsi_min') is not None and rsi < mr['rsi_min']:
skip_stats['rsi'] += 1; i += 1; continue
if rsi > mr.get('rsi_max', 50):
skip_stats['rsi'] += 1; i += 1; continue
@@ -2306,10 +2308,12 @@ def run_mr_backtest(strategy_version, start_date, end_date, capital=913000,
if rmax is not None and prev_ret60 > rmax:
skip_stats['ret60'] += 1; i += 1; continue
# 4. 低动量
# 4. 低动量mom20_max 上限;2026-08-14 港股趋势策略需 mom20_min 下限,双边对称,None=不限)
prev20 = bars[i-20].get('close') or 0
mom20 = (close - prev20) / prev20 * 100 if prev20 > 0 else 0
if mom20 > mr.get('mom20_max', 5):
if mr.get('mom20_min') is not None and mom20 < mr['mom20_min']:
skip_stats['mom20'] += 1; i += 1; continue
if mr.get('mom20_max') is not None and mom20 > mr['mom20_max']:
skip_stats['mom20'] += 1; i += 1; continue
# 5. 小盘(20日均成交额,百万元)
@@ -2320,6 +2324,14 @@ def run_mr_backtest(strategy_version, start_date, end_date, capital=913000,
if mr.get('amount_max') is not None and amount_ma20_m > mr['amount_max']:
skip_stats['amount'] += 1; i += 1; continue
# 5.5 量比(放量确认,2026-08-14 港股趋势策略;A股未设 vol_ratio_min 不生效)
if mr.get('vol_ratio_min') is not None:
_vols = [bars[j].get('volume') or 0 for j in range(max(0, i-19), i+1)]
_vv = [v for v in _vols[:-1] if v > 0]
_vol_ratio = (_vols[-1] / (sum(_vv)/len(_vv))) if _vv and _vols[-1] else 0
if _vol_ratio < mr['vol_ratio_min']:
skip_stats['vol_ratio'] += 1; i += 1; continue
# 6. 止跌回升确认(RSI 5日回升)
if i >= 5:
rsi0 = bars[i-5].get('rsi')