Vier weitere ebooks ausgewertet: drei ohne Ertrag, das vierte widerlegt eine Projekt-Regel

Sechs PDFs in ebooks/, zwei davon heute schon ausgewertet. Die vier neuen als
Text extrahiert (346k Woerter) und gegen das Gemessene gescannt statt gelesen.

- 'Day-Trading Attention' ist KEIN Trading-Buch: Vaynerchuks Social-Media-
  Marketing-Titel, ein Wortspiel. Null TA-Begriffe im ganzen Text.
- 'Die Kunst des technischen und algorithmischen Tradings' (656 S.): RSI/MACD/
  ADX 165x, Elliott 35x, Kerzen 37x, Fibonacci 18x, Bollinger 17x -- alles hier
  bereits gemessen und verworfen. Keine pruefbare Regel, kein CRV-Kapitel.
- 'KDP968 4 in 1': ausdruecklich fuer Einsteiger, unter dem Projektstand.
- 'Ein Fuchs namens Risiko': das einzige mit pruefbaren Aussagen, weil seine
  Kapitel ueber REIHENFOLGE und ABSTAND von Trades sprechen.

Gemessen auf 1.318 eigenen Trades (analyze_verhalten.py, je Lot, Bootstrap-KI):
keine der vier Behauptungen reproduziert. Revenge-Trading und Overtrading zeigen
sogar in die Gegenrichtung (< 5 min nach Verlust -1,53 gegen > 2 h -16,16;
3.-5. Trade -7,23 gegen 11.+ +1,00).

DER EIGENTLICHE BEFUND: die Projekt-eigene Checklisten-Regel 'nach 2 Losses
Session beenden' (seit 30.07. Punkt 6) ist auf den eigenen Trades NICHT
gestuetzt -- keine monotone Verschlechterung, der 3.-Verlust-Bucket ist wieder
positiv, alle vier KI enthalten die Null. Uebernommen aus der Literatur, nie
geprueft.

Nicht ueberinterpretieren: ~20 Zellen getestet, ~1 Fehlalarm erwartbar, zwei
schliessen die Null aus. Beobachtungsdaten, keine Zuweisung. Nichts gebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-19 13:15:49 +02:00
co-authored by Claude Opus 5
parent af5190cf9e
commit 496d65aab5
2 changed files with 199 additions and 0 deletions
+53
View File
@@ -7434,6 +7434,59 @@ vollständig.
**Verifikation der Zustellung steht aus** — sie erfolgt mit dem Report am
nächsten Morgen um 07:30. Die Bausteine sind einzeln live gegengeprüft.
## ⚠⚠ VIER WEITERE BÜCHER (`ebooks/`) — drei ohne Ertrag, das vierte
## widerlegt eine Regel, die IM PROJEKT steht (2026-08-19)
User: „nutze alle Bücher im Verzeichnis ebooks als Ideenquelle“. Sechs PDFs,
zwei davon am selben Tag schon ausgewertet. Die vier neuen als Text extrahiert
(346k Wörter, `pypdf`) und gegen das Gemessene gescannt statt gelesen.
| Buch | Umfang | Befund |
|---|---|---|
| **Day-Trading Attention** (Vaynerchuk) | 333 S. | ❌ **kein Trading-Buch** — Social-Media-Marketing („build brand and sales in the new Social Media World“). Der Titel ist ein Wortspiel. **Null** TA-Begriffe im ganzen Text. |
| **Die Kunst des techn. u. algo. Tradings** (Fatih AK) | 656 S. | ⚠ breites Lehrbuch, FX-/Makro-lastig. RSI/MACD/ADX **165×**, Elliott 35×, Kerzen 37×, Fibonacci 18×, Bollinger 17×**alles hier bereits gemessen und verworfen**. Kein CRV-Kapitel, keine Risiko-Zahlen, keine prüfbare Regel. |
| **KDP968 4 in 1** (Lakefield) | 401 S. | ❌ ausdrücklich „für Einsteiger“ (ETF/Aktien/Dividenden). Unter dem Projektstand. |
| **Ein Fuchs namens Risiko** | 62 S. | ✅ **das einzige mit prüfbaren Aussagen** — s. u. |
**Warum das vierte:** seine Kapitel sind Aussagen über **Reihenfolge und
Abstand** von Trades („Revenge Trading“, „Overtrading fühlt sich an wie
Kontrolle“, „warum Langeweile profitabel ist“) — und genau das steht in
`trades`. **Gemessen auf 1.318 eigenen Trades** (`analyze_verhalten.py`),
je Lot normiert, 95-%-Bootstrap je Zelle.
| Behauptung | Gemessen |
|---|---|
| „Revenge: gleich nach einem Verlust wieder rein ist teuer“ | ❌ **umgekehrt**: < 5 min 1,53 [5,22 … +2,18] · **> 2 h 16,16 [36,08 … 0,33]** |
| „Overtrading“ — späte Trades des Tages sind schlechter | ❌ **umgekehrt**: 1.2. 1,04 · **3.5. 7,23 [12,77 … 2,36]** · 6.10. +0,52 · 11.+ **+1,00** |
| „Langeweile ist profitabel“ — ruhige Tage besser | ❌ 13 Trades +1,83 (n=11) · **48 36,52** · 16+ 0,63 |
| *(Projekt-eigene Regel)* „nach 2 Losses Session beenden“ | ❌ **nicht gestützt**: 0 Verl. +1,12 · 1 4,31 · 2 4,98 · **3+ wieder +1,87** — alle vier KI enthalten die Null |
⚠⚠ **DER EIGENTLICHE BEFUND ist die letzte Zeile.** „Nach 2 Losses Session
beenden“ steht seit dem 30.07. als Punkt 6 in der Entry-Checkliste
(`_entry_checklist`, „Mental-Check: Verlust-Serie heute“) — **übernommen aus
der Handbuch-Literatur, nie auf den eigenen Trades geprüft.** Auf 1.318 Trades
gibt es keine monotone Verschlechterung; der 3.-Verlust-Bucket ist wieder
positiv. Damit ist es dieselbe Klasse wie die 28 verworfenen Signal-Eingriffe:
plausibel klingend, gemessen ohne Inhalt.
⚠⚠ **NICHT ÜBERINTERPRETIEREN — Mehrfachvergleich.** Getestet wurden ~20
Zellen; bei 5 % ist **etwa eine** falsch-positive zu erwarten. **Zwei**
schliessen die Null aus („> 2 h nach Verlust“ und „3.5. Trade“). Dass beide
in dieselbe, dem Buch **entgegengesetzte** Richtung zeigen, ist ein **Hinweis,
kein Beleg**. Als Befund taugt allein: **keine der vier Behauptungen
reproduziert.**
**Zwei Grenzen, ehrlich:** (a) Beobachtungsdaten, keine Zuweisung — wer nach
einem Verlust weiterhandelt, wählt das selbst; ein Unterschied kann auch
„andere Marktlage“ heissen. (b) Der Block „Langeweile“ vergleicht **Tages-
SUMMEN** über Gruppen mit verschieden vielen Trades — mehr Trades = grössere
Summe, die Buckets sind damit nicht sauber vergleichbar. Die Richtung deckt
sich mit Block (3), der das sauber je Trade rechnet.
**Nichts gebaut.** Die Checklisten-Zeile bleibt stehen (sie **blockiert
nichts**, seit dem 11.08. gibt es ohnehin keinen Dialog mehr) — sie ist jetzt
aber als **unbelegt** gekennzeichnet statt als Regel.
## ✅ RAUM JE RICHTUNG AUF DEN ORDER-KNÖPFEN (2026-08-19, v=175)
Die einzige umgesetzte Empfehlung aus der Ideen-Runde — und sie stammt nicht
+146
View File
@@ -0,0 +1,146 @@
"""Die Verhaltens-Behauptungen aus „Ein Fuchs namens Risiko“ auf den EIGENEN
Trades gemessen (User-Auftrag 2026-08-19: "nutze alle Buecher als Ideenquelle").
WARUM AUSGERECHNET DIESES BUCH. Von den sechs Buechern im Verzeichnis ist es das
einzige, dessen Kernaussagen auf der vorhandenen Datenlage **pruefbar** sind:
Kap. 9 "Der Drang, Verluste zurueckzuholen" -> Revenge-Trading
Kap. 11 "Overtrading fuehlt sich an wie Kontrolle"
Kap. 12 "Revenge Trading und der rote Nebel"
Kap. 14 "Warum Langeweile profitabel ist"
Kap. 10 "Warum kleine Verluste gesund sind"
Alle vier sind Aussagen ueber die REIHENFOLGE und den ABSTAND von Trades -- und
genau das steht in `trades` (entry_time, exit_time, pnl, lots).
⚠⚠ WARUM DAS NICHT NUR EIN BUCH-TEST IST. Die Projekt-Zahlen zeigen seit
Wochen in dieselbe Richtung: der MENSCH schlaegt den Bot (+3,20 gegen
-5,85 EUR/Lot), 28 Signal-Eingriffe sind gescheitert, und die einzige
beidhaelftig robuste Aussage ist ein VETO (gegen das Signal -6,60 EUR/Lot).
Der Hebel liegt gemessen im Verhalten -- nur ist das Verhalten selbst hier nie
gemessen worden. Die Entry-Checkliste nennt "nach 2 Losses Session beenden" als
Regel, ohne sie je auf den eigenen Trades geprueft zu haben.
⚠ JE LOT NORMIERT. Absolute Euro sind bei schwankender Positionsgroesse
ungueltig (Lehre 04.08.: der 04.08. sah nur wegen groesserer Lots wie ein
Ausreisser aus). Gerechnet wird `pnl / lots`.
⚠ 95-%-BOOTSTRAP je Zelle. Ein Punktschaetzer ist auf so kleinen Gruppen keine
Aussage. Zellen mit n < 15 werden als zu duenn markiert statt interpretiert.
⚠ GRENZE, vorab benannt: das sind BEOBACHTUNGSdaten, keine Zuweisung. Wer nach
einem Verlust weiterhandelt, waehlt das selbst -- ein Unterschied kann also auch
heissen "in solchen Marktlagen handelt er anders", nicht "der Zeitabstand ist
die Ursache". Die Richtung ist trotzdem verwertbar, weil sie handlungsnah ist.
Aufruf: python analyze_verhalten.py [tage]
"""
import sqlite3
import sys
from backtest_cost_gate import ci95
DB = "oil_widget_history.db"
MIN_N = 15
def lade(tage):
c = sqlite3.connect(DB)
c.row_factory = sqlite3.Row
q = ("SELECT entry_time, exit_time, pnl, lots FROM trades "
" WHERE exit_time IS NOT NULL AND pnl IS NOT NULL AND lots > 0 ")
if tage:
q += " AND entry_time > strftime('%s','now','-{} days') ".format(int(tage))
q += " ORDER BY entry_time"
rows = [dict(r) for r in c.execute(q)]
c.close()
for r in rows:
r["pl"] = r["pnl"] / r["lots"]
return rows
def zeig(lbl, werte):
if not werte:
print(" {:<34} --".format(lbl)); return
n = len(werte); m = sum(werte) / n
ci = ci95(werte) if n >= 20 else None
s = "n={:>4} {:>5.0f}% Gew. {:+8.2f} EUR/Lot".format(
n, 100.0 * sum(1 for x in werte if x > 0) / n, m)
if ci:
s += " [{:+7.2f} .. {:+7.2f}]".format(ci[0], ci[1])
s += "" if ci[0] * ci[1] > 0 else " ~0"
if n < MIN_N:
s += " ⚠ zu duenn"
print(" {:<34} {}".format(lbl, s))
def main():
tage = int(sys.argv[1]) if len(sys.argv) > 1 else 0
tr = lade(tage)
if len(tr) < 50:
print("zu wenige Trades:", len(tr)); return
print("=" * 100)
print(" VERHALTENS-MESSUNG auf {} eigenen Trades{}".format(
len(tr), " (letzte {} Tage)".format(tage) if tage else " (gesamt)"))
print(" je Lot normiert · 95-%-Bootstrap · Zellen < {} als zu duenn markiert".format(MIN_N))
print("=" * 100)
# ---- (1) REVENGE: Abstand zum vorigen EXIT, getrennt nach dessen Ausgang --
print("\n (1) REVENGE-TRADING — wie schnell nach dem letzten Ausstieg?")
print(" " + "-" * 96)
for nach_verlust in (True, False):
gr = {"< 5 min": [], "530 min": [], "30120 min": [], "> 2 h": []}
for a, b in zip(tr, tr[1:]):
if (a["pnl"] < 0) != nach_verlust:
continue
dt = (b["entry_time"] - a["exit_time"]) / 60.0
if dt < 0:
continue
k = ("< 5 min" if dt < 5 else "530 min" if dt < 30
else "30120 min" if dt < 120 else "> 2 h")
gr[k].append(b["pl"])
print(" nach einem {}:".format("VERLUST" if nach_verlust else "Gewinn"))
for k, v in gr.items():
zeig(" " + k, v)
# ---- (2) VERLUST-SERIE ---------------------------------------------------
print("\n (2) VERLUST-SERIE — der wievielte Trade nach wie vielen Verlusten?")
print(" (Projekt-Regel der Entry-Checkliste: 'nach 2 Losses Session beenden')")
print(" " + "-" * 96)
serie = 0
gr = {0: [], 1: [], 2: [], 3: []}
for t in tr:
gr[min(serie, 3)].append(t["pl"])
serie = serie + 1 if t["pnl"] < 0 else 0
for k in sorted(gr):
zeig(" nach {} Verlust{} in Folge".format(k, "" if k == 1 else "en"), gr[k])
# ---- (3) OVERTRADING / "Langeweile" -------------------------------------
print("\n (3) OVERTRADING — der wievielte Trade des Tages?")
print(" " + "-" * 96)
tage_d = {}
for t in tr:
d = int(t["entry_time"]) // 86400
tage_d.setdefault(d, []).append(t)
gr = {"1.2.": [], "3.5.": [], "6.10.": [], "11.+": []}
tagesbilanz = {"13 Trades": [], "48": [], "915": [], "16+": []}
for d, ts in tage_d.items():
for i, t in enumerate(ts, 1):
k = ("1.2." if i <= 2 else "3.5." if i <= 5
else "6.10." if i <= 10 else "11.+")
gr[k].append(t["pl"])
n = len(ts)
kk = ("13 Trades" if n <= 3 else "48" if n <= 8
else "915" if n <= 15 else "16+")
tagesbilanz[kk].append(sum(x["pl"] for x in ts))
for k, v in gr.items():
zeig(" " + k + " Trade des Tages", v)
print("\n (4) „LANGEWEILE IST PROFITABEL“ — TAGESbilanz je Lot nach Handelsmenge")
print(" (Einheit: Summe EUR/Lot des Tages, n = Anzahl Tage)")
print(" " + "-" * 96)
for k, v in tagesbilanz.items():
zeig(" " + k, v)
print("=" * 100)
if __name__ == "__main__":
main()