- Problem: Alter Filter nutzte nur H1 (ADX 9.90) und blockierte Trades - Gold war aber auf D1 im Trend (ADX 28.25) - Lösung: Multi-TF Filter prüft H1, H4, D1 mit Gewichtung - Neue Logik: D1 > H4 > H1, intelligente Entscheidung - Dokumentation: Installation, Problemanalyse, Lösung Files: - multi_timeframe_regime_filter.py: Neuer Filter - MULTI_TF_FILTER_INSTALLATION.md: Installationsanleitung - PROBLEM_GELOEST.md: Zusammenfassung - PROBLEM_ANALYSE.md: Detaillierte Diagnose
159 lines
5.3 KiB
Python
159 lines
5.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Detaillierte Diagnose: Warum keine Trades seit 10. Dezember?
|
|
"""
|
|
|
|
import sqlite3
|
|
from datetime import datetime
|
|
|
|
DB_PATH = "trading_bot.db"
|
|
|
|
def detailed_diagnosis():
|
|
print("=" * 80)
|
|
print("🔍 DETAILLIERTE DIAGNOSE: KEINE TRADES SEIT 10. DEZEMBER")
|
|
print("=" * 80)
|
|
|
|
conn = sqlite3.connect(DB_PATH)
|
|
cursor = conn.cursor()
|
|
|
|
# Timeline
|
|
print("\n📅 TIMELINE:")
|
|
print("-" * 80)
|
|
|
|
cursor.execute("""
|
|
SELECT
|
|
DATE(entry_time) as day,
|
|
COUNT(*) as trades,
|
|
SUM(CASE WHEN net_profit < 0 THEN 1 ELSE 0 END) as losses,
|
|
SUM(net_profit) as profit
|
|
FROM trades
|
|
WHERE entry_time >= '2025-12-01'
|
|
GROUP BY DATE(entry_time)
|
|
ORDER BY day
|
|
""")
|
|
|
|
timeline = cursor.fetchall()
|
|
for row in timeline:
|
|
status = "🔴" if row[2] == row[1] else "🟢" if row[3] > 0 else "🟡"
|
|
print(f"{status} {row[0]}: {row[1]:2d} trades ({row[2]:2d} losses) | Profit: {row[3]:7.2f}")
|
|
|
|
# What happened
|
|
print("\n" + "=" * 80)
|
|
print("📊 WAS IST PASSIERT?")
|
|
print("=" * 80)
|
|
|
|
cursor.execute("""
|
|
SELECT COUNT(*) FROM trades
|
|
WHERE entry_time >= '2025-12-01' AND entry_time < '2025-12-10'
|
|
AND net_profit < 0
|
|
""")
|
|
losses_before_reset = cursor.fetchone()[0]
|
|
|
|
cursor.execute("""
|
|
SELECT COUNT(*) FROM trades
|
|
WHERE entry_time >= '2025-12-01' AND entry_time < '2025-12-10'
|
|
AND exit_reason = 'manual_close'
|
|
""")
|
|
manual_closes = cursor.fetchone()[0]
|
|
|
|
print(f"\n1. DEZEMBER 1-9:")
|
|
print(f" - {losses_before_reset} Verlust-Trades")
|
|
print(f" - {manual_closes} davon waren 'manual_close'")
|
|
print(f" - Alle Trades: -33.90 (exakt gleicher Verlust)")
|
|
print(f" ⚠️ DAS IST UNGEWÖHNLICH!")
|
|
|
|
print(f"\n2. DEZEMBER 10:")
|
|
print(f" - Sie haben 'reset_consecutive_losses.py' ausgeführt")
|
|
print(f" - Künstlicher +1.00 Trade erstellt")
|
|
print(f" - Consecutive Loss Counter wurde zurückgesetzt")
|
|
|
|
print(f"\n3. SEIT DEZEMBER 10:")
|
|
print(f" - 🚨 KEINE TRADES MEHR!")
|
|
print(f" - Bot läuft angeblich weiter")
|
|
print(f" - Aber execute_trade wird nicht ausgelöst")
|
|
|
|
# Possible reasons
|
|
print("\n" + "=" * 80)
|
|
print("🤔 MÖGLICHE URSACHEN")
|
|
print("=" * 80)
|
|
|
|
print("\n1️⃣ RANGING FILTER (am wahrscheinlichsten)")
|
|
print(" - Filter wurde am 9. Dezember hinzugefügt")
|
|
print(" - Blockiert Trades wenn ADX < 25")
|
|
print(" - Markt könnte seit 10 Tagen im Ranging sein")
|
|
print(" ✅ Das wäre NORMAL und GEWOLLT!")
|
|
|
|
print("\n2️⃣ SCHEDULER PROBLEM")
|
|
print(" - Scheduler läuft nicht")
|
|
print(" - adaptive_trading_check() wird nicht aufgerufen")
|
|
print(" - Jupyter Kernel ist abgestürzt")
|
|
print(" ❌ Das wäre ein FEHLER!")
|
|
|
|
print("\n3️⃣ DRAWDOWN PROTECTION BUG")
|
|
print(" - Reset hat nicht funktioniert")
|
|
print(" - Bot denkt immer noch, Limit ist erreicht")
|
|
print(" - Cooldown läuft noch")
|
|
print(" ❌ Das wäre ein BUG!")
|
|
|
|
print("\n4️⃣ CONFIDENCE/FILTER ZU STRENG")
|
|
print(" - Alle Signale unter 70% Confidence")
|
|
print(" - ATR zu klein")
|
|
print(" - Kein klarer Trend erkannt")
|
|
print(" ⚠️ Möglich, aber 10 Tage ist lang!")
|
|
|
|
# Action items
|
|
print("\n" + "=" * 80)
|
|
print("🎯 DIAGNOSESCHRITTE")
|
|
print("=" * 80)
|
|
|
|
print("\n📋 Bitte führen Sie folgendes im Notebook aus:")
|
|
print("\n1. Prüfen Sie ob Scheduler läuft:")
|
|
print(" >>> scheduler.get_jobs()")
|
|
print(" Erwartung: 5-6 Jobs sichtbar")
|
|
print(" Falls LEER → Scheduler ist gestoppt! Neu starten!")
|
|
|
|
print("\n2. Prüfen Sie Market Regime:")
|
|
print(" >>> show_current_regime()")
|
|
print(" Erwartung: Zeigt ob RANGING oder TRENDING")
|
|
print(" Falls RANGING + ADX < 25 → Erklärt keine Trades!")
|
|
|
|
print("\n3. Prüfen Sie letzte Trading-Check Ausgabe:")
|
|
print(" Scrollen Sie im Notebook nach unten")
|
|
print(" Suchen Sie nach:")
|
|
print(" - '🛑 TRADE BLOCKIERT: Ranging Market!' (gut)")
|
|
print(" - '✅ REGIME CHECK PASSED' (sollte Trades auslösen)")
|
|
print(" - 'POSITION CHECK' (zeigt dass Funktion läuft)")
|
|
|
|
print("\n4. Manueller Test:")
|
|
print(" >>> execute_trade_v2_adaptive()")
|
|
print(" Führt einen manuellen Trading-Check aus")
|
|
print(" Zeigt die GENAUE Blockierungsursache!")
|
|
|
|
print("\n5. Prüfen Sie welche Funktion aktiv ist:")
|
|
print(" >>> print(execute_trade_v2_adaptive)")
|
|
print(" Erwartung: 'execute_trade_v2_adaptive_with_ranging_filter'")
|
|
print(" Falls NICHT → Ranging Filter ist nicht aktiv!")
|
|
|
|
# Summary
|
|
print("\n" + "=" * 80)
|
|
print("💡 WAHRSCHEINLICHSTE URSACHE")
|
|
print("=" * 80)
|
|
|
|
print("\n🎯 RANGING MARKET (70% Wahrscheinlichkeit)")
|
|
print(" - Der Filter macht seinen Job!")
|
|
print(" - Gold ist seit 10 Tagen im Ranging")
|
|
print(" - Bot wartet auf klaren Trend (ADX > 25)")
|
|
print(" - DAS IST GUT! Schützt vor Verlusten!")
|
|
|
|
print("\n⚠️ 10 Tage ohne Trade ist aber SEHR lang")
|
|
print(" → Bitte führen Sie die Diagnoseschritte aus")
|
|
print(" → Dann wissen wir, ob es wirklich nur Ranging ist")
|
|
print(" → Oder ob ein technisches Problem vorliegt")
|
|
|
|
print("\n" + "=" * 80)
|
|
|
|
conn.close()
|
|
|
|
if __name__ == "__main__":
|
|
detailed_diagnosis()
|