Files
Place-Order-Trading-Bot/FIX_DUPLICATE_SCHEDULER.md
T

307 lines
8.5 KiB
Markdown
Raw Normal View History

# 🔧 FIX: Duplicate Scheduler Problem
## ❌ Problem Identifiziert
**Symptom:** Bot tradet während London Session trotz SESSION_WHITELIST_CONFIG mit nur NY aktiviert
**Root Cause:** **DUPLICATE Scheduler Jobs!**
Beweis aus deinen Logs:
```
2025-11-26 11:37:00 - INFO - Running job "create_session_filtered_check..." (scheduled at 11:37:00)
2025-11-26 11:37:00 - INFO - ⏸️ Trading SKIP: Session blocked: London
2025-11-26 11:37:00 - INFO - Running job "create_session_filtered_check..." (scheduled at 11:37:00)
2025-11-26 11:37:00 - INFO - ⏸️ Trading SKIP: Session blocked: London
```
**Was passiert:**
1.**NEUER** Scheduler mit Session Filter → blockiert London korrekt
2.**ALTER** Scheduler OHNE Session Filter → tradet weiter!
## 🔍 Wie ist das passiert?
**Szenario:**
1. Du hast Cell 33 (Scheduler Start) mehrmals ausgeführt
2. Jedes Mal wurde ein NEUER Scheduler erstellt
3. ALTE Scheduler laufen weiter im Hintergrund
4. Result: 2+ Jobs zur gleichen Zeit!
## ✅ Lösung: Scheduler Cleanup + Neustart
### SCHRITT 1: Alle laufenden Scheduler stoppen
**In einer NEUEN Notebook Cell ausführen:**
```python
# ==========================================
# SCHRITT 1: ALLE SCHEDULER STOPPEN
# ==========================================
print("🔄 Stopping all schedulers...")
# Stop current scheduler
try:
scheduler.shutdown(wait=False)
print("✅ Main scheduler stopped")
except:
print("⚠️ No main scheduler found")
# Check for orphaned schedulers
import gc
from apscheduler.schedulers.background import BackgroundScheduler
orphaned_count = 0
for obj in gc.get_objects():
try:
if isinstance(obj, BackgroundScheduler):
if obj.running:
obj.shutdown(wait=False)
orphaned_count += 1
print(f"✅ Stopped orphaned scheduler {orphaned_count}")
except:
pass
print(f"\n✅ Cleanup complete! Stopped {orphaned_count + 1} scheduler(s)")
print("⏸️ Bot is now PAUSED - no trading happening")
```
**Erwartete Ausgabe:**
```
🔄 Stopping all schedulers...
✅ Main scheduler stopped
✅ Stopped orphaned scheduler 1
✅ Stopped orphaned scheduler 2
✅ Cleanup complete! Stopped 3 scheduler(s)
```
### SCHRITT 2: Session Filter Configuration bestätigen
**Prüfe nochmal die Config:**
```python
# ==========================================
# SCHRITT 2: VERIFY SESSION FILTER CONFIG
# ==========================================
from session_filter_patch import SESSION_WHITELIST_CONFIG, is_session_allowed
print("📊 CURRENT SESSION FILTER CONFIGURATION:")
print("=" * 60)
for session in ['asian', 'london', 'overlap', 'ny']:
allowed, reason = is_session_allowed(session)
emoji = "✅ AKTIV" if allowed else "❌ BLOCKED"
print(f"{emoji:12s} {session.upper():8s}: {reason}")
print("\n📋 Full Config:")
print(f"Enabled Sessions: {SESSION_WHITELIST_CONFIG['enabled_sessions']}")
print(f"Base Confidence: {SESSION_WHITELIST_CONFIG['base_confidence']}%")
print(f"Aggressive Mode: {SESSION_WHITELIST_CONFIG.get('aggressive_mode', False)}")
```
**Erwartete Ausgabe:**
```
❌ BLOCKED ASIAN : Session blocked: Asian has -$199 loss...
❌ BLOCKED LONDON : Session blocked: London is break-even...
❌ BLOCKED OVERLAP : Session blocked: Not in whitelist
✅ AKTIV NY : NY allowed: +$372 profit, 50.0% win-rate
```
### SCHRITT 3: Neuen Scheduler mit Session Filter starten
**Erstelle einen FRISCHEN Scheduler:**
```python
# ==========================================
# SCHRITT 3: CREATE FRESH SCHEDULER
# ==========================================
from apscheduler.schedulers.background import BackgroundScheduler
from session_filter_patch import create_session_filtered_check, SESSION_WHITELIST_CONFIG
from infrastructure_patch import create_scheduled_reports
print("🚀 Creating FRESH scheduler with session filter...")
# Create NEW scheduler instance
scheduler = BackgroundScheduler()
# Create session-filtered trading check
adaptive_trading_check = create_session_filtered_check(
rhythm_manager=rhythm_manager,
execute_func=execute_trade_v2_adaptive,
symbol=symbol,
strategy_name=strategy_name,
max_positions=max_positions,
logger=logger,
datetime=datetime,
config=SESSION_WHITELIST_CONFIG # ✅ EXPLICITLY pass config
)
# Add FILTERED trading job
scheduler.add_job(
func=adaptive_trading_check,
trigger='cron',
minute='*',
id='adaptive_trading_check_v18', # NEW ID to avoid conflicts
replace_existing=True
)
# Add status report
scheduler.add_job(
func=print_status_report,
trigger='cron',
minute='0,30',
id='status_report_v18',
replace_existing=True
)
# Add infrastructure reports
create_scheduled_reports(infra, scheduler)
# Start scheduler
scheduler.start()
print("\n✅ FRESH SCHEDULER STARTED!")
print(f" Active Jobs: {len(scheduler.get_jobs())}")
print("\n📋 Scheduled Jobs:")
for job in scheduler.get_jobs():
print(f" • {job.id} - {job.trigger}")
print("\n⚠️ SESSION FILTER ACTIVE:")
for session, enabled in SESSION_WHITELIST_CONFIG['enabled_sessions'].items():
status = "✅ TRADING" if enabled else "❌ BLOCKED"
print(f" {session.upper():8s}: {status}")
print("\n🎯 Bot will ONLY trade during NY session (13:00-21:00 UTC)")
print("🔒 All other sessions are BLOCKED")
```
**Erwartete Ausgabe:**
```
✅ FRESH SCHEDULER STARTED!
Active Jobs: 4
📋 Scheduled Jobs:
• adaptive_trading_check_v18 - cron[minute='*']
• status_report_v18 - cron[minute='0,30']
• daily_report - cron[hour='22', minute='0']
• weekly_report - cron[day_of_week='sun', hour='23', minute='0']
⚠️ SESSION FILTER ACTIVE:
ASIAN : ❌ BLOCKED
LONDON : ❌ BLOCKED
OVERLAP : ❌ BLOCKED
NY : ✅ TRADING
```
### SCHRITT 4: Verification Test
**Warte 1-2 Minuten und prüfe die Logs:**
```python
# ==========================================
# SCHRITT 4: VERIFY LOGS
# ==========================================
import time
print("⏰ Waiting 90 seconds to collect logs...")
time.sleep(90)
print("\n📊 Last few log entries should show:")
print(" ⏸️ Trading SKIP: Session blocked: London")
print("\n✅ If you see this → Session filter is working!")
```
## 📊 Expected Behavior nach Fix
### Während London Session (08:00-13:00 UTC / 09:00-14:00 CET):
```
2025-11-26 11:37:00 - INFO - ⏸️ Trading SKIP: Session blocked: London
2025-11-26 11:38:00 - INFO - ⏸️ Trading SKIP: Session blocked: London
2025-11-26 11:39:00 - INFO - ⏸️ Trading SKIP: Session blocked: London
```
**WICHTIG:** Nur EINE Log-Zeile pro Minute! (Nicht 2 wie vorher)
### Während NY Session (13:00-21:00 UTC / 14:00-22:00 CET):
```
2025-11-26 14:00:00 - INFO - ✅ Session: NY - NY allowed: +$372 profit
2025-11-26 14:00:00 - INFO - 📊 Confidence Threshold: 60%
[Normal trading analysis...]
```
### Andere Sessions:
- **Asian (00:00-08:00 UTC):** ⏸️ Trading SKIP
- **Overlap (13:00-16:00 UTC):** ⏸️ Trading SKIP (auch wenn in NY Zeit!)
## 🔍 How to Monitor
### Quick Check jede Stunde:
```python
# Check current session & status
from datetime import datetime
import pytz
now_utc = datetime.now(pytz.UTC)
current_session = rhythm_manager.get_current_session()
allowed, reason = is_session_allowed(current_session)
print(f"Time: {now_utc.strftime('%H:%M UTC')}")
print(f"Session: {current_session.upper()}")
print(f"Trading: {'✅ ACTIVE' if allowed else '❌ BLOCKED'}")
print(f"Reason: {reason}")
```
### Full Status:
```python
check_adaptive_bot_status()
```
## ⚠️ WICHTIG: Prevent Future Duplicates
**NIEMALS nochmal Cell 33 ausführen!**
Wenn du den Scheduler neu starten musst:
1. **ERST:** `scheduler.shutdown()` ausführen
2. **DANN:** Neue Scheduler Cell ausführen
**ODER:** Kernel → Restart & Run All (safest!)
## 🎯 Summary
**Problem:**
- Duplicate schedulers (mit/ohne Session Filter)
**Lösung:**
1. ✅ Alle Scheduler stoppen
2. ✅ Config verifizieren
3. ✅ Frischen Scheduler mit Session Filter starten
4. ✅ Logs monitoren
**Result:**
- Nur 1 Scheduler läuft
- Session Filter aktiv
- Nur NY Session tradet
- London/Asian/Overlap blockiert
**Expected Log:**
```
⏸️ Trading SKIP: Session blocked: London ← RICHTIG!
(nur EINE Zeile pro Minute während London)
```
## 📱 Next Steps
Nach dem Fix:
1. **Monitor 24h:** Prüfe dass KEIN Trade außerhalb NY passiert
2. **Check Telegram:** Du solltest jetzt NUR NY-Trades sehen
3. **Database Check:** Alle neuen Trades sollten `session='ny'` haben
**Falls weiterhin London Trades:**
→ Kernel Restart erforderlich
→ Alle Cells neu ausführen (Kernel → Restart & Run All)