feat(P2-B+C): 权威保护加固——per_stock重评24h内其他源不得覆写参数(解决参数覆盖反复出bug)。A+D快照瘦身已前置
This commit is contained in:
@@ -2099,6 +2099,32 @@ def write_holding_strategy(conn, code: str, name: str, data: dict,
|
||||
_op = conn.execute(
|
||||
"SELECT entry_low, entry_high, stop_loss, take_profit FROM holding_strategies WHERE code=? AND status='active'",
|
||||
(code,)).fetchone()
|
||||
# ── per_stock 重评保护(2026-08-19 老莫:参数覆写保护)──
|
||||
# per_stock_reassess 重评后 24h 内,其他 source_trigger 不得覆写参数
|
||||
# 判断:最近的 per_stock_12d 快照时间戳(source_trigger='per_stock_12d')
|
||||
_ps = conn.execute(
|
||||
"SELECT snapshotted_at FROM strategy_history WHERE code=? AND source_trigger='per_stock_12d' ORDER BY snapshotted_at DESC LIMIT 1",
|
||||
(code,)).fetchone()
|
||||
if _ps and _ps[0]:
|
||||
try:
|
||||
from datetime import datetime as _ddt, timedelta as _dtd
|
||||
_ps_dt = _ddt.fromisoformat(str(_ps[0])[:19])
|
||||
if (_ddt.now() - _ps_dt) < _dtd(hours=24):
|
||||
# 24h 内重评过 → 保护参数不被覆写
|
||||
_op2 = conn.execute(
|
||||
"SELECT entry_low, entry_high, stop_loss, take_profit, rr_ratio FROM holding_strategies WHERE code=? AND status='active'",
|
||||
(code,)).fetchone()
|
||||
if _op2 and _op2[0] and _op2[0] > 0:
|
||||
# 参数保护:当前值保留(除非调用方是 per_stock_12d 本身)
|
||||
if source_trigger != 'per_stock_12d':
|
||||
data['entry_low'] = float(_op2[0])
|
||||
data['entry_high'] = float(_op2[1]) if _op2[1] else _op2[0]
|
||||
data['stop_loss'] = float(_op2[2]) if _op2[2] else data.get('stop_loss')
|
||||
data['take_profit'] = float(_op2[3]) if _op2[3] else data.get('take_profit')
|
||||
data['rr_ratio'] = float(_op2[4]) if _op2[4] else data.get('rr_ratio')
|
||||
print(f" [AUTHORITY-24H] {code} per_stock重评24h内,保留参数(区{_op2[0]}~{_op2[1]} 损{_op2[2]})", flush=True)
|
||||
except Exception:
|
||||
pass
|
||||
if _op and float(_op[0] or 0) > 0:
|
||||
data['entry_low'] = float(_op[0])
|
||||
data['entry_high'] = float(_op[1])
|
||||
|
||||
Reference in New Issue
Block a user