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:
co-authored by
Claude Opus 5
parent
7a832c4f40
commit
adcae09317
+50
-1
@@ -596,6 +596,48 @@ def _popup(title: str, text: str) -> None:
|
|||||||
print(f"Popup fehlgeschlagen: {e}\n{text}")
|
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:
|
def main() -> None:
|
||||||
os.makedirs(MARKER_DIR, exist_ok=True)
|
os.makedirs(MARKER_DIR, exist_ok=True)
|
||||||
due, pending = [], []
|
due, pending = [], []
|
||||||
@@ -611,7 +653,8 @@ def main() -> None:
|
|||||||
elif ready:
|
elif ready:
|
||||||
pending.append((c, have, "gemeldet"))
|
pending.append((c, have, "gemeldet"))
|
||||||
else:
|
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?
|
# ── Config-Drift: welche Messung ist durch eine Config-Änderung veraltet?
|
||||||
# Marker enthält den Wert → ändert der User später erneut, wird neu gemeldet.
|
# 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" {have:.0f}/{c['need']} {c['unit']}")
|
||||||
print(f" → {c['cmd']}")
|
print(f" → {c['cmd']}")
|
||||||
for c, have, st in pending:
|
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
|
pct = min(100, have / c["need"] * 100) if c["need"] else 0
|
||||||
print(f"\n ⏳ {c['title']} [{st}]")
|
print(f"\n ⏳ {c['title']} [{st}]")
|
||||||
print(f" {have:.0f}/{c['need']} {c['unit']} ({pct:.0f} %)")
|
print(f" {have:.0f}/{c['need']} {c['unit']} ({pct:.0f} %)")
|
||||||
|
|||||||
Reference in New Issue
Block a user