feat: mr框架双边条件增强——rsi_min/mom20_min/vol_ratio_min下限+mom20_max改is not None(港股趋势策略需要,A股未设不影响)
This commit is contained in:
+16
-4
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user