""" 🎯 SESSION FILTER PATCH - TradingBot V1.6 to V1.7 Optimiert Trading basierend auf Performance-Analyse ÄNDERUNGEN: 1. Deaktiviert Asian Session (25.6% Win-Rate, -$199 Verlust) 2. Aktiviert nur NY + Overlap (beste Performance) 3. Optional: London Session (Break-Even) PERFORMANCE-IMPACT: - Asian ausschalten: -$199 eliminiert - Nur NY+Overlap: +$581 (49% mehr Profit) - Win-Rate: 30.9% → ~38% """ # ========================================== # SESSION WHITELIST CONFIGURATION # ========================================== SESSION_WHITELIST_CONFIG = { # Welche Sessions erlauben? 'enabled_sessions': { 'asian': True, # ❌ DEAKTIVIERT: +$202, aber nur 30.2% Win-Rate 'london': False, # ❌ DEAKTIVIERT: +$79, aber nur 30.8% Win-Rate 'overlap': False, # ❌ DEAKTIVIERT: -$208 kumuliert (2 Wochen), 27.3% Win-Rate 'ny': True, # ✅ NUR NY AKTIV: +$660, 47.6% Win-Rate (BESTE!) }, # Trading Parameter 'base_confidence': 70, # 🎯 CONFIDENCE THRESHOLD (60=relaxed, 70=balanced, 75=konservativ, 80=sehr strikt) 'atr_mult': 1.5, # ATR Multiplikator für SL/TP 'max_risk_per_trade': 0.01, # Max Risk pro Trade (1%) 'min_atr': 0.0008, # Minimum ATR für Risk Filter # Trading Optionen 'risk_filter': True, # ATR-basierter Risk Filter 'use_pullback_entry': False, # Pullback Entry Strategie # Alternativ: Aggressive Mode (nur NY) 'aggressive_mode': False, # ⚠️ Nicht nötig - already configured via enabled_sessions # Alternativ: Conservative Mode (NY + Overlap + London) 'conservative_mode': False, # ⚠️ Nicht aktiv # Debug-Modus 'debug': True, } # ========================================== # SESSION FILTER FUNCTION # ========================================== def is_session_allowed(session_name, config=SESSION_WHITELIST_CONFIG): """ Prüft ob Trading in aktueller Session erlaubt ist Args: session_name: 'asian', 'london', 'overlap', 'ny' config: Configuration Dictionary Returns: (allowed: bool, reason: str) """ # Aggressive Mode: Nur NY if config['aggressive_mode']: allowed = session_name == 'ny' reason = f"Aggressive Mode: Only NY session" if not allowed else "NY session - best performance" return allowed, reason # Conservative Mode: Alle außer Asian if config['conservative_mode']: allowed = session_name != 'asian' reason = f"Conservative Mode: Asian disabled" if not allowed else f"{session_name.upper()} session allowed" return allowed, reason # Standard: Whitelist-basiert allowed = config['enabled_sessions'].get(session_name, False) if not allowed: reasons = { 'asian': "Session blocked: Asian has -$199 loss, 25.6% win-rate", 'london': "Session blocked: London is break-even, 29.6% win-rate", 'overlap': "Session blocked: Not in whitelist", 'ny': "Session blocked: Not in whitelist", } reason = reasons.get(session_name, f"Session {session_name} not in whitelist") else: performance = { 'ny': "+$372 profit, 50.0% win-rate (BEST!)", 'overlap': "+$209 profit, 32.1% win-rate (GOOD)", 'london': "+$7 profit, 29.6% win-rate (Break-even)", } reason = f"{session_name.upper()} allowed: {performance.get(session_name, 'In whitelist')}" return allowed, reason # ========================================== # SESSION FILTER WRAPPER # ========================================== def create_session_filtered_check( rhythm_manager, execute_func, symbol, strategy_name, max_positions, logger, datetime, config=None ): """ Factory-Funktion die eine gefilterte Trading-Check-Funktion erstellt Args: rhythm_manager: AdaptiveRhythmManager Instanz execute_func: execute_trade_v2_adaptive Funktion symbol: Trading Symbol (z.B. "XAUUSD") strategy_name: Strategy Name max_positions: Max Positionen logger: Logger Instanz datetime: datetime module config: Optional custom config, sonst SESSION_WHITELIST_CONFIG Returns: Gefilterte adaptive_trading_check Funktion """ if config is None: config = SESSION_WHITELIST_CONFIG # Hole Trading-Parameter aus Config confidence_threshold = config.get('base_confidence', 60) atr_mult = config.get('atr_mult', 1.5) max_risk = config.get('max_risk_per_trade', 0.01) risk_filter = config.get('risk_filter', True) min_atr = config.get('min_atr', 0.0008) use_pullback = config.get('use_pullback_entry', False) def adaptive_trading_check_filtered(): """ 🆕 V1.7: Session-gefilterte Trading Check Funktion """ try: # 1. Prüfe aktuelle Session session = rhythm_manager.get_current_session() allowed, reason = is_session_allowed(session, config) if not allowed: if config['debug']: logger.info(f"⏸️ Trading SKIP: {reason}") return # 2. Berechne optimales Intervall optimal_interval = rhythm_manager.calculate_optimal_interval() current_minute = datetime.now().minute # 3. Trading nur zu berechneten Zeitpunkten if current_minute % optimal_interval == 0: logger.info(f"\n⏰ {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - ADAPTIVE Check") logger.info(f"✅ Session: {session.upper()} - {reason}") logger.info(f"📊 Confidence Threshold: {confidence_threshold}%") logger.info(f"⏱️ Intervall: {optimal_interval} min") # Führe Trading aus mit Parametern aus Config execute_func( symbol=symbol, atr_mult=atr_mult, base_confidence=confidence_threshold, max_risk_per_trade=max_risk, risk_filter=risk_filter, min_atr=min_atr, use_pullback_entry=use_pullback, max_positions=max_positions, strategy_name=strategy_name, debug=True ) except Exception as e: logger.error(f"Fehler im Session-Filtered Trading Check: {e}") return adaptive_trading_check_filtered # ========================================== # USAGE INSTRUCTIONS # ========================================== """ 📋 ANLEITUNG - Wie den Patch anwenden: SCHRITT 1: Dieses File ins gleiche Verzeichnis wie das Notebook kopieren SCHRITT 2: In Cell 24 (Adaptive Scheduler) folgendes ändern: VORHER: ```python def adaptive_trading_check(): try: optimal_interval = rhythm_manager.calculate_optimal_interval() ... ``` NACHHER: ```python # Importiere Session Filter from session_filter_patch import ( adaptive_trading_check_with_session_filter, SESSION_WHITELIST_CONFIG, is_session_allowed ) # Alias für Kompatibilität adaptive_trading_check = adaptive_trading_check_with_session_filter ``` SCHRITT 3: Scheduler neu starten SCHRITT 4: Teste mit verschiedenen Modi: # Standard Mode (NY + Overlap) SESSION_WHITELIST_CONFIG['enabled_sessions'] = { 'asian': False, 'london': False, 'overlap': True, 'ny': True } # Aggressive Mode (nur NY, 50% Win-Rate!) SESSION_WHITELIST_CONFIG['aggressive_mode'] = True # Conservative Mode (alles außer Asian) SESSION_WHITELIST_CONFIG['conservative_mode'] = True SCHRITT 5: Monitor Performance für 1-2 Wochen """ # ========================================== # TESTING # ========================================== if __name__ == "__main__": print("="*70) print("🧪 SESSION FILTER TESTS") print("="*70) sessions = ['asian', 'london', 'overlap', 'ny'] print("\n📊 STANDARD MODE (NY + Overlap):") print("-" * 70) for session in sessions: allowed, reason = is_session_allowed(session) emoji = "✅" if allowed else "❌" print(f"{emoji} {session.upper():8s}: {reason}") print("\n📊 AGGRESSIVE MODE (nur NY):") print("-" * 70) test_config = SESSION_WHITELIST_CONFIG.copy() test_config['aggressive_mode'] = True for session in sessions: allowed, reason = is_session_allowed(session, test_config) emoji = "✅" if allowed else "❌" print(f"{emoji} {session.upper():8s}: {reason}") print("\n📊 CONSERVATIVE MODE (alles außer Asian):") print("-" * 70) test_config = SESSION_WHITELIST_CONFIG.copy() test_config['conservative_mode'] = True test_config['aggressive_mode'] = False for session in sessions: allowed, reason = is_session_allowed(session, test_config) emoji = "✅" if allowed else "❌" print(f"{emoji} {session.upper():8s}: {reason}") print("\n" + "="*70) print("✅ Tests complete") print("="*70) print("\n💡 ERWARTETE PERFORMANCE-VERBESSERUNG:") print(" Standard Mode (NY + Overlap):") print(" • Trades: 40 statt 110 (-64%)") print(" • Profit: +$581 statt +$389 (+49%)") print(" • Win-Rate: ~38% statt 30.9%") print("\n Aggressive Mode (nur NY):") print(" • Trades: 12 statt 110 (-89%)") print(" • Profit: +$372 statt +$389 (-4%, aber 50% Win-Rate!)") print(" • Win-Rate: 50% statt 30.9% (+19.1%)")