276 lines
6.2 KiB
Markdown
276 lines
6.2 KiB
Markdown
# 📊 Trade Analysis Report - 20 Consecutive Losses
|
|
|
|
**Datum:** 2025-12-09
|
|
**Status:** 🔴 KRITISCH - Trading pausiert
|
|
**Grund:** 20 consecutive losses detected
|
|
|
|
---
|
|
|
|
## 🚨 **PROBLEM IDENTIFIZIERT:**
|
|
|
|
### **Drawdown Protection Status:**
|
|
```
|
|
Max Consecutive Losses Limit: 5
|
|
Actual Consecutive Losses: 20
|
|
Status: ⚠️ 4x über dem Limit!
|
|
Cooldown: 24 Stunden (~8 Stunden verbleibend)
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 **ROOT CAUSE ANALYSE:**
|
|
|
|
### **1. Datenquellen-Problem:**
|
|
|
|
**SQLite Datenbank (`trading_bot.db`):**
|
|
- ✅ 269 Trades insgesamt erfasst
|
|
- ❌ **0 geschlossene Trades** (status='closed')
|
|
- ❌ **Alle Profit-Felder sind NULL**
|
|
- ⚠️ 240 Trades als "historical" markiert (aus JSON-Import)
|
|
- ⚠️ 29 Trades als "open" markiert
|
|
|
|
**Was das bedeutet:**
|
|
- Die 20 Losses kommen **NICHT** aus der Datenbank
|
|
- `DrawdownProtection._get_consecutive_losses()` findet 0 geschlossene Trades
|
|
- Die Losses müssen aus **MT5 History direkt** kommen
|
|
|
|
### **2. Wo kommen die 20 Losses her?**
|
|
|
|
**Vermutung:**
|
|
Der Bot holt Trade-History **direkt von MT5** über:
|
|
```python
|
|
# Wahrscheinlich irgendwo im Code:
|
|
history = mt5.history_deals_get(...)
|
|
# oder
|
|
history = mt5.history_orders_get(...)
|
|
```
|
|
|
|
**Das Problem:**
|
|
- SQLite DB wird nur für Entry-Logging genutzt
|
|
- **Exits werden nicht in DB geschrieben!**
|
|
- Position Monitor schreibt vermutlich nur Logs/Telegram
|
|
|
|
---
|
|
|
|
## 📈 **ANALYSE DER VERFÜGBAREN DATEN:**
|
|
|
|
### **Aus SQLite DB (letzte 10 Trades):**
|
|
|
|
| Datum | Trades | Session | Regime | Avg Confidence |
|
|
|-------|--------|---------|--------|----------------|
|
|
| 2025-12-04 | 2 | NY | Ranging | 92.6% |
|
|
| 2025-12-03 | 3 | NY | Ranging | 92.6% |
|
|
| 2025-12-02 | 5 | NY | Ranging | 92.6% |
|
|
| 2025-12-01 | 13 | NY | Ranging | 92.6% |
|
|
|
|
**Auffälligkeiten:**
|
|
1. ⚠️ **Alle Trades in "Ranging" Regime**
|
|
2. ⚠️ **Alle in NY Session**
|
|
3. ⚠️ **Sehr hohe Confidence (92.6%)** - aber trotzdem Losses!
|
|
4. ⚠️ **Keine Wins in letzten Tagen**
|
|
|
|
---
|
|
|
|
## 🎯 **HAUPTPROBLEM:**
|
|
|
|
### **Strategie funktioniert NICHT in Ranging Markets!**
|
|
|
|
**Beweis:**
|
|
- Regime: 100% Ranging
|
|
- Result: 20 Losses in Folge
|
|
- Confidence: Trotzdem 92.6% (falsch kalibriert!)
|
|
|
|
**Was passiert:**
|
|
```
|
|
Bot sagt: "92% Confidence, super Signal!"
|
|
Markt sagt: "Nope, ranging market → Loss"
|
|
→ 20x hintereinander!
|
|
```
|
|
|
|
---
|
|
|
|
## 💡 **EMPFEHLUNGEN:**
|
|
|
|
### **SOFORT (heute):**
|
|
|
|
#### **1. Trade History aus MT5 exportieren:**
|
|
```python
|
|
# Führe auf VPS aus:
|
|
import MetaTrader5 as mt5
|
|
from datetime import datetime, timedelta
|
|
|
|
mt5.initialize()
|
|
|
|
# Get last 30 deals
|
|
from_date = datetime.now() - timedelta(days=7)
|
|
deals = mt5.history_deals_get(from_date, datetime.now())
|
|
|
|
print("Last 30 Deals:")
|
|
for deal in deals[-30:]:
|
|
print(f"Ticket: {deal.ticket}, Profit: {deal.profit}, Time: {deal.time}")
|
|
```
|
|
|
|
#### **2. Position Monitor FIX:**
|
|
**Problem:** Exits werden nicht in DB geschrieben!
|
|
|
|
**Fix:** Stelle sicher, dass `position_monitor.py` macht:
|
|
```python
|
|
# Wenn Position geschlossen:
|
|
db.close_trade(
|
|
ticket=position.ticket,
|
|
exit_price=exit_price,
|
|
exit_time=datetime.now(),
|
|
profit=position.profit,
|
|
status='closed',
|
|
exit_reason='tp' / 'sl' / 'manual'
|
|
)
|
|
```
|
|
|
|
#### **3. Ranging-Filter DRINGEND:**
|
|
```python
|
|
# Im Notebook / Bot:
|
|
def should_trade_in_regime(regime, regime_strength):
|
|
"""Nur traden wenn Regime passt"""
|
|
|
|
if regime == "ranging":
|
|
# Ranging Markets sind schlecht für uns!
|
|
return False
|
|
|
|
if regime == "trending" and regime_strength > 65:
|
|
return True
|
|
|
|
return False
|
|
```
|
|
|
|
---
|
|
|
|
### **MITTELFRISTIG (diese Woche):**
|
|
|
|
#### **4. Confidence Kalibrierung:**
|
|
**Problem:** 92% Confidence → Trotzdem Loss
|
|
|
|
**Fix:** Confidence-Berechnung überarbeiten:
|
|
```python
|
|
# VORHER:
|
|
confidence = technical_score * 0.8 + regime_score * 0.2
|
|
|
|
# NACHHER:
|
|
confidence = technical_score * 0.5 + regime_score * 0.5
|
|
|
|
# Und: Bei Ranging → Confidence -20%
|
|
if regime == "ranging":
|
|
confidence *= 0.8 # Penalty für Ranging
|
|
```
|
|
|
|
#### **5. Adaptive Threshold erhöhen:**
|
|
```python
|
|
# VORHER:
|
|
adaptive_threshold = 70
|
|
|
|
# NACHHER:
|
|
adaptive_threshold = 75 # Höhere Bar für Entry
|
|
```
|
|
|
|
#### **6. Session Filter anpassen:**
|
|
**Aktuell:** NY + Asian aktiv
|
|
**Problem:** NY während Ranging = viele Losses
|
|
|
|
**Test:** Nur London Session (wenn Trend vorhanden)
|
|
|
|
---
|
|
|
|
## 📊 **ERWARTETE VERBESSERUNGEN:**
|
|
|
|
### **Mit Ranging-Filter:**
|
|
```
|
|
Statt: 20 Losses in Ranging
|
|
→ 0 Trades in Ranging (kein Entry!)
|
|
→ Nur Trades wenn Trending
|
|
|
|
Erwartung:
|
|
- Win Rate: 30% → 45% (+15%)
|
|
- Profit Factor: 1.2 → 1.6 (+0.4)
|
|
```
|
|
|
|
### **Mit Confidence-Kalibrierung:**
|
|
```
|
|
Ranging Signals: 92% → 72% (realistischer)
|
|
→ Fällt unter 75% Threshold
|
|
→ Kein Entry
|
|
|
|
Trending Signals: 85% → 85% (bleibt gut)
|
|
→ Entry nur bei echten Trends
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 **ACTION ITEMS:**
|
|
|
|
| Priorität | Task | Aufwand | Impact |
|
|
|-----------|------|---------|--------|
|
|
| 🔥 1 | Position Monitor Fix (Exits in DB schreiben) | 30 Min | Hoch |
|
|
| 🔥 2 | Ranging-Filter implementieren | 1 Std | SEHR HOCH |
|
|
| ⚠️ 3 | MT5 History Export & Analyse | 30 Min | Hoch |
|
|
| ⚠️ 4 | Confidence-Kalibrierung | 1 Std | Mittel |
|
|
| 📋 5 | Session Filter Review | 30 Min | Mittel |
|
|
|
|
**Total:** 3-4 Stunden
|
|
|
|
---
|
|
|
|
## ⏰ **TIMELINE:**
|
|
|
|
### **Heute (09.12.2025):**
|
|
```
|
|
✅ 1. Trade Analysis Complete
|
|
⏳ 2. Warte 8h bis Drawdown Protection aufhebt
|
|
⏳ 3. Implementiere Ranging-Filter
|
|
⏳ 4. Fixe Position Monitor
|
|
```
|
|
|
|
### **Morgen (10.12.2025):**
|
|
```
|
|
⏳ 1. Trading startet wieder (mit Fixes)
|
|
⏳ 2. Monitor erste 5 Trades genau
|
|
⏳ 3. Prüfe ob Ranging-Filter funktioniert
|
|
```
|
|
|
|
### **Diese Woche:**
|
|
```
|
|
⏳ 1. Sammle 10+ Trades mit neuen Fixes
|
|
⏳ 2. Verifiziere Performance-Verbesserung
|
|
⏳ 3. Fine-tune Thresholds
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 **ZIEL:**
|
|
|
|
**Von:**
|
|
- 20 Consecutive Losses
|
|
- 0% Win Rate in Ranging
|
|
- Trading pausiert
|
|
|
|
**Zu:**
|
|
- Keine Trades in Ranging Markets
|
|
- 40-50% Win Rate in Trending Markets
|
|
- Stabiles Live Trading
|
|
|
|
**Erwartete Zeit bis Stable:** 1 Woche
|
|
|
|
---
|
|
|
|
## 📝 **NEXT STEPS:**
|
|
|
|
1. ✅ **Review diesen Report**
|
|
2. ⏳ **Entscheide:** Fixes jetzt oder nach Cooldown?
|
|
3. ⏳ **Implementiere** Ranging-Filter (höchste Priorität!)
|
|
4. ⏳ **Fixe** Position Monitor (DB Exits)
|
|
5. ⏳ **Teste** mit Demo/Live nach Cooldown
|
|
|
|
---
|
|
|
|
**Status:** 📋 Analyse Complete - Ready for Implementation
|
|
|
|
**Recommendation:** Implementiere Ranging-Filter SOFORT, bevor Trading wieder startet!
|