Ruhende Messungen als RUHT markieren statt als "sammelt"

Zwei Messungen brauchen SQUEEZE-Trades, und auto_squeeze ist seit dem 11.08.
aus -- seit dem 17.08. auch begruendet (B5-Regel gefallen). Ihre Zaehler stehen
seither still: Stop-Order-Umbau 8/12, Nacht-Fenster 3/15.

Als "sammelt (67 %)" angezeigt suggerierten sie einen Fortschritt, den es nicht
gibt: sie laufen NIE ab. Jetzt erscheinen sie als

  ⏸ ... [RUHT]   8/12 ... -- steht STILL
     braucht SQUEEZE-Trades -- auto_squeeze ist AUS ...

RUHEND heisst: die Messung ist nicht langsam, sie ist BLOCKIERT -- und die
Blockade ist eine ENTSCHEIDUNG, keine Datenfrage. Wer den Trader wieder
einschaltet, laesst beide automatisch weiterlaufen; es ist nichts nachzuholen.

Umsetzung: RUHT-Tabelle mit je einer Pruef-Funktion; _auto_squeeze_an() liest
core.live_config (ini + runtime_state in der Vorrangfolge des Engine-Starts).
Faellt die Pruefung aus, gilt "nicht ruhend" -- lieber ein Zaehler zu viel als
eine still verschwundene Messung.

Die sechs uebrigen Messungen laufen unveraendert als "sammelt".

⚠ Beim Bau in die dokumentierte \n-Falle gelaufen: ein per Heredoc geschriebenes
f"\n..." wurde zum echten Umbruch im String-Literal (SyntaxError). CLAUDE.md
sagt genau das ("NIE per Heredoc -- den Edit-Weg nehmen"); ueber den Edit-Weg
behoben, check_nfalle laeuft sauber.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-18 23:31:52 +02:00
co-authored by Claude Opus 5
parent 7a832c4f40
commit adcae09317
+50 -1
View File
@@ -596,6 +596,48 @@ def _popup(title: str, text: str) -> None:
print(f"Popup fehlgeschlagen: {e}\n{text}")
def _auto_squeeze_an() -> bool:
"""Laeuft der Auto-Squeeze? (ini + runtime_state, Vorrang wie beim Start)"""
try:
from core.live_config import LiveConfig
return bool(LiveConfig.laden().auto_squeeze)
except Exception:
return True # im Zweifel NICHT als ruhend melden
# ── RUHENDE Messungen ────────────────────────────────────────────────────────
# ⚠⚠ ANLASS (2026-08-18): zwei Messungen brauchen SQUEEZE-Trades — und
# `auto_squeeze` ist seit dem 11.08. aus, seit dem 17.08. auch begruendet
# (B5-Regel gefallen). Ihre Zaehler stehen seither still: 8/12 und 3/15.
# Als „sammelt (67 %)" angezeigt suggerieren sie einen Fortschritt, den es
# nicht gibt — sie laufen NIE ab.
# RUHEND heisst: die Messung ist nicht langsam, sie ist BLOCKIERT — und die
# Blockade ist eine ENTSCHEIDUNG, keine Datenfrage. Wer den Trader wieder
# einschaltet, laesst beide automatisch weiterlaufen; hier ist nichts zu tun.
RUHT = {
"squeeze_entry_gap": (
_auto_squeeze_an,
"braucht SQUEEZE-Trades — `auto_squeeze` ist AUS (B5-Regel am 17.08. "
"gefallen). Zaehler steht seit dem 11.08. still."),
"night_window_0127": (
_auto_squeeze_an,
"braucht SQUEEZE-Trades aus 0/1/2/7 Uhr — `auto_squeeze` ist AUS. "
"Zaehler steht seit dem 11.08. still."),
}
def ruht(key: str):
"""(True, Grund) wenn die Messung blockiert ist, sonst (False, '')."""
e = RUHT.get(key)
if not e:
return False, ""
pruef, grund = e
try:
return (not pruef()), grund
except Exception:
return False, ""
def main() -> None:
os.makedirs(MARKER_DIR, exist_ok=True)
due, pending = [], []
@@ -611,7 +653,8 @@ def main() -> None:
elif ready:
pending.append((c, have, "gemeldet"))
else:
pending.append((c, have, "sammelt"))
_sch, _ = ruht(c["key"])
pending.append((c, have, "RUHT" if _sch else "sammelt"))
# ── Config-Drift: welche Messung ist durch eine Config-Änderung veraltet?
# Marker enthält den Wert → ändert der User später erneut, wird neu gemeldet.
@@ -637,6 +680,12 @@ def main() -> None:
print(f" {have:.0f}/{c['need']} {c['unit']}")
print(f"{c['cmd']}")
for c, have, st in pending:
if st == "RUHT":
_, _grund = ruht(c["key"])
print(f"\n{c['title']} [RUHT]")
print(f" {have:.0f}/{c['need']} {c['unit']} — steht STILL")
print(f"{_grund}")
continue
pct = min(100, have / c["need"] * 100) if c["need"] else 0
print(f"\n{c['title']} [{st}]")
print(f" {have:.0f}/{c['need']} {c['unit']} ({pct:.0f} %)")