Quant review 2026-09-26: alert cooldown, plain-language alerts, M15 grade-A SELL block, 1R printed targets, panel/breach fixes
Live signals.db review (2026-09-04 → 09-25, 100 unique setups replayed on the scans' stored candles): the stop-hunt claim is refuted (71% of stop-outs ran ≥ 1R past the stop, the same as the books' 70–72%); −25.1R of the −37.8R raw live book were consecutive-bar re-entries the backtester's 5-bar cooldown never takes; the cooldown view sits at the 3rd–5th percentile of the books' three-week windows. Delivery (book-neutral): - telegram_bot: 5-bar alert cooldown per timeframe (_ALERT_COOLDOWN_BARS = backtest.cooldown_bars); setup block prints the trail first as the tested exit, TP1/TP2 as guides with their R, "Planned TP1 RR", and one validated-book line per setup class (agent_panel_base_rates.json); the informational 100-pip TP line is removed (owner request). - AI block rewritten for a new trader: "AI check: the odds look better than / worse than / about usual", the chance "in 100" against the usual odds, one reason for and one against, no verdict word or confidence figure; rendered whenever the verdict carries a probability. agent_panel: persona prompts ban trading jargon (PANEL_PROMPT_VERSION v2.1-2026-09-26); the macro-source verdict now carries its persona's p_win (every live v2 row had panel_probability NULL). Dashboard and guides mirror the wording. - telegram_bot: level-breach rescans skip the settlement-pause window (the 20:45 M15 bar was re-logged at 22:01/22:06/22:11 every evening). Signal (pre-registered rule-1 campaign, CUDA twin paired with gpu_backtest.py): - M15 grade-A SELLs blocked (sell_min_quality ["A+","B"], M15 override 6): W2 813/+154.15R PF 1.53 vs 931/+146.14R PF 1.43, OOS +68.5 vs +60.67, W3 max DD 20.9 vs 19.3R. PASSED a–f. - Printed target 1 floored at 1R in every generator (signals.tp_print_floor_rr), applied AFTER the min-RR and spread gates so no trade changes; mirrored in cuda_signal_kernels.py K2. Label-only re-pin of all four timeframes (only tp1/rr_planned columns move). A floor applied before the gate cost −24.6R and was rejected. - FAILED: M15 min_rr_ratio 1.0 (trade-identical, −2.0R). Owner's call: M5 tp_floor_rr 1.0 (+48.9R W2, max DD 10.1 → 15.9R), not shipped. New pins: M5 W2 e599c8a8…, M15 W2 5b65ecf6…, M15 OOS 09b8a8e7…, H1 W3 a44fd19b…, H4 W3 f3587bae…; twin and reference MD5s equal on every window. Base-rate table rebuilt from the new pins. Suite 558 passed. Evidence: backtest/research/rr_and_sell_campaign_2026-09-26.md (plus the 2026-09-18 loss-anatomy and wrong-direction reports it builds on). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -107,6 +107,29 @@ screen's M5 picks (MACD-down) all FAILED the replay, and ema_trend x 2
|
||||
/ divergence -> 0 on M15 failed too. Canonical M15 book re-pinned to
|
||||
backtest/oanda_m15_2yr_065_20260909.csv.
|
||||
|
||||
M15 override 6 — grade-A SELLs blocked (validated 2026-09-26,
|
||||
backtest/research/rr_and_sell_campaign_2026-09-26.md, pre-registered
|
||||
rule, CUDA twin runs paired with gpu_backtest.py MD5s, $0.65):
|
||||
sell_min_quality=["A+", "B"] on M15, so gate 6e downgrades every
|
||||
grade-A short to D (A+ and B shorts still trade). The bucket was the
|
||||
one cycle-2 candidate from the 2026-09-10 screen: M15 grade-A SELLs
|
||||
230 / -14.4R on the 3-year window, negative in every 12-month slice
|
||||
and in the OOS window. Candidate vs control: 2-year W2 2024-09-05 ->
|
||||
2026-09-05 813/+154.15R PF 1.53 DD 15.6R (halves +70.1/+84.0) vs
|
||||
931/+146.14R PF 1.43 DD 16.1R (+66.1/+80.0); OOS 2024-06-01 ->
|
||||
2025-03-30 313/+68.50R PF 1.67 DD 12.4R vs 355/+60.67R PF 1.49 DD
|
||||
17.1R; 3-year W3 2023-09-05 -> 2026-09-05 1105/+195.79R PF 1.49 DD
|
||||
20.9R vs 1273/+186.61R PF 1.39 DD 19.3R (+8%, inside the 10% clause),
|
||||
better in 2024, 2025 and 2026, -2.4R in the 4 months of 2023; at $0.30
|
||||
+167.53R vs +161.44R (W2). Trade diff on W2: 162 removed (-8.1R, all
|
||||
grade-A SELLs), 44 added (-0.1R, cooldown displacement). Counter-fact
|
||||
on record: M15 A-grade shorts paid in the 2021-22 bear phase
|
||||
(m15_5yr_cuda_2026-09-18.md), outside the owner's 3-year window.
|
||||
Tested and NOT shipped in the same campaign: signals.min_rr_ratio 1.0
|
||||
on M15 (trade-identical, -2.0R W2, -2.8R W3: the swing-anchored
|
||||
GENERIC stop is not better than the 2 x ATR stop on the same grade-A
|
||||
signals); the combination with this block (-0.7R vs the block alone).
|
||||
|
||||
M5 override (validated 2026-07-11, full-history replay 2020-03-17 ->
|
||||
2026-07-11 + 12mo book, $0.30 spread): block hour 9 UTC (post-London-
|
||||
open whipsaw). Hour-9 entries lost -28.9R/143 over 6 years, negative
|
||||
@@ -305,6 +328,10 @@ def make_config(
|
||||
# RSI regime multiplier × 0.5 in every regime on M15 only — see
|
||||
# module docstring (M15 override 5, validated 2026-09-09).
|
||||
config.technical.regime_weights_override = _m15_regime_weights()
|
||||
# Grade-A SELLs blocked on M15 only (gate 6e downgrades an
|
||||
# actionable-grade short whose grade is not listed) — see module
|
||||
# docstring (M15 override 6, validated 2026-09-26).
|
||||
config.xau_strategy.sell_min_quality = ["A+", "B"]
|
||||
if primary_tf == Timeframe.H1:
|
||||
# Block every H1 SELL — the SELL quality gate (6e in
|
||||
# signal_aggregator.py) downgrades any actionable-grade short
|
||||
|
||||
Reference in New Issue
Block a user