M15-Auto-Entry: Richtung aus dem Veto + Abbruchregel verankert

(1) Der Auto-Entry nimmt die Richtung jetzt aus bias.verboten (= die ERLAUBTE
Richtung), also genau das, was die Karte anzeigt (app.js:504 nimmt erl). Kein
Veto -> kein Entry, weil die Karte dort ausdruecklich keine Richtung gibt.
Gegenprobe an der Live-Lage: verboten=SHORT, lesart=ab -> alt SHORT (die
verbotene!), neu LONG = identisch zur Anzeige. Damit entspricht der Pfad der
gemessenen Kontrolle C (-0,085/-0,030), der am wenigsten schlechten Variante --
aber weiterhin negativ. Die Korrektur behebt den Widerspruch, nicht den
fehlenden Edge.

(2) measurement_reminder.py: neue Messung m15_abbruch (>=20 AUTOM15_*-Trades,
Latte Verhaeltnis < 1,0 ODER PF < 1) und Config-Anker auto_m15 (validiert
false), dazu der Helfer _zaehle_setup(). Der Zaehler zaehlt nur geschlossene
Trades. Damit kann die vorab fixierte Regel nicht mehr unbemerkt verfallen --
genau das war bei B5 wochenlang der Fall.

Aktivierung steht aus: Backend-Aenderung, braucht einen Neustart. auto_m15 ist
aus, also keine Eile -- der Neustart wartet, bis das Konto flat ist.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-19 18:10:07 +02:00
co-authored by Claude Opus 5
parent 412aab706d
commit c5190e77fd
3 changed files with 84 additions and 2 deletions
+39
View File
@@ -48,6 +48,19 @@ def _days_since(iso: str) -> float:
# ── Die offenen Messungen ────────────────────────────────────────────────────
# have = aktueller Stand · need = Schwelle · unit = Anzeigeeinheit
# cmd = was zu tun ist, wenn fällig
def _zaehle_setup(muster: str) -> int:
"""Geschlossene Trades mit `setup LIKE muster` (fuer die Abbruchregeln)."""
try:
import sqlite3
with sqlite3.connect(DB) as c:
return c.execute(
"SELECT COUNT(*) FROM trades WHERE setup LIKE ?"
" AND exit_time IS NOT NULL AND pnl IS NOT NULL", (muster,)
).fetchone()[0]
except Exception:
return 0
CHECKS = [
{
# ⚠⚠ WIEDERVORLAGE aus dem Backtest vom 2026-08-12
@@ -213,6 +226,25 @@ CHECKS = [
"Ziel ist ein HINWEIS im Order-Dialog ('deine Trades in dieser "
"Konstellation: X % WR, n=Y'), ausdrücklich KEIN Auto-Entry.",
},
{
# Diese Regel MUSS hier stehen: sie wurde am 19.08. vorab fixiert, und
# genau so eine Regel blieb bei B5 wochenlang unbemerkt, weil der Zaehler
# nirgends lief. Ohne Ueberwachung ist eine Abbruchregel keine Regel.
"key": "m15_abbruch",
"title": "M15-Auto-Entry: Abbruchpruefung (Latte vorab fixiert)",
"why": "Am 19.08. auf User-Wunsch GEGEN die Messung gebaut. "
"backtest_m15_auto.py: die Karte ist in BEIDEN Halbjahren negativ "
"(Lesart -0,162/-0,094; die jetzt gehandelte ERLAUBTE Richtung "
"entspricht Kontrolle C mit -0,085/-0,030). Zusaetzlich ist der "
"gebaute MARKT-Einstieg schlechter als der gemessene "
"Level-Einstieg. Erwartung: die Latte greift.",
"have": lambda: _zaehle_setup("AUTOM15%"),
"need": 20, "unit": "AUTOM15_*-Trades",
"cmd": "LATTE (vorab fixiert, NICHT verschiebbar): Verhaeltnis "
"(OeGewinn/OeVerlust) < 1,0 ODER PF < 1 -> auto_m15 = false "
"(Knopf M15). Dieselbe Latte wie squeeze_b5. Rechnung analog, "
"nur setup LIKE 'AUTOM15%'.",
},
{
# ⚠ VORAB festgelegte Abbruchregel (User-Zustimmung 2026-08-01) — bewusst VOR
# der Beobachtung fixiert, damit die Latte hinterher nicht verschoben wird.
@@ -436,6 +468,13 @@ CONFIG_DEPS = [
"gelesen — Reaktivieren ginge nur über die Git-Historie bzw. "
".removed_backup/auto_signal_2026-08-12.py.",
},
{
"key": "auto_m15", "test": "backtest_m15_auto.py", "soll": "false",
"why": "Gemessen negativ (Lesart -0,162/-0,094; die gehandelte erlaubte "
"Richtung entspricht Kontrolle C, -0,085/-0,030 -- ebenfalls "
"negativ). Steht er auf 'true', laeuft ein gemessen negativer "
"Auto-Entry auf echtem Geld. Das soll sichtbar bleiben.",
},
{
"key": "auto_squeeze", "test": "backtest_breakout_squeeze.py",
# ⚠⚠ ERWARTUNG GEDREHT 2026-08-17: stand auf "true" und meldete deshalb