Files
Place-Order-Trading-Bot/ml_integration.py
T

170 lines
4.6 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""
ML SIGNAL PREDICTOR INTEGRATION
Einfache Integration des ML Predictors in den Trading Bot
VERWENDUNG IM NOTEBOOK:
from ml_integration import (
ml_predictor,
check_ml_signal,
train_ml_model,
get_ml_status,
enable_ml_predictor,
disable_ml_predictor,
ML_CONFIG
)
# Status anzeigen
print(get_ml_status())
# Model trainieren (falls genug Daten)
train_ml_model()
# In enhanced_trading_check_wrapper:
ml_result = check_ml_signal(signal_info)
if not ml_result['should_trade']:
print(f"TRADE BLOCKIERT durch ML Predictor!")
return None
"""
import logging
from typing import Dict
logger = logging.getLogger(__name__)
# ==========================================
# IMPORT ML PREDICTOR
# ==========================================
try:
from ml_signal_predictor import (
MLSignalPredictor,
ML_CONFIG,
get_ml_predictor,
check_ml_signal,
train_ml_model,
get_ml_status,
enable_ml_predictor,
disable_ml_predictor
)
# Initialize global predictor
ml_predictor = get_ml_predictor()
ML_AVAILABLE = True
print("ML Signal Predictor loaded successfully")
except ImportError as e:
logger.warning(f"ML Signal Predictor not available: {e}")
ML_AVAILABLE = False
# Fallback functions
ML_CONFIG = {'enabled': False}
ml_predictor = None
def check_ml_signal(signal_info: Dict) -> Dict:
return {
'win_probability': 0.5,
'should_trade': True,
'lot_multiplier': 1.0,
'action': 'ALLOW',
'reason': 'ML not available'
}
def train_ml_model(force: bool = False) -> Dict:
return {'error': 'ML not available'}
def get_ml_status() -> str:
return "ML Signal Predictor: NOT AVAILABLE (install xgboost)"
def enable_ml_predictor():
print("ML Signal Predictor not available")
def disable_ml_predictor():
print("ML Signal Predictor not available")
# ==========================================
# INTEGRATION HELPER
# ==========================================
def check_ml_and_get_multiplier(signal_info: Dict, debug: bool = True) -> tuple:
"""
Prüft ML Signal und gibt (should_trade, lot_multiplier, result) zurück
Für einfache Integration in enhanced_trading_check_wrapper
Returns:
(should_trade: bool, lot_multiplier: float, ml_result: Dict)
"""
if not ML_AVAILABLE or not ML_CONFIG.get('enabled', False):
return True, 1.0, {'action': 'SKIP', 'reason': 'ML disabled'}
ml_result = check_ml_signal(signal_info)
if debug:
action_emoji = {
'ALLOW': '',
'CAUTION': '',
'REDUCE': '',
'BLOCK': ''
}.get(ml_result['action'], '')
print(f"\n{action_emoji} ML SIGNAL CHECK:")
print("-" * 50)
print(f" Win Probability: {ml_result['win_probability']:.1%}")
print(f" Action: {ml_result['action']}")
print(f" Lot Multiplier: {ml_result['lot_multiplier']:.0%}")
print(f" Reason: {ml_result['reason']}")
print("-" * 50)
return ml_result['should_trade'], ml_result['lot_multiplier'], ml_result
# ==========================================
# AUTO-TRAINING CHECK
# ==========================================
def auto_train_if_needed():
"""
Prüft ob genug neue Trades für Retraining vorhanden sind
und trainiert automatisch falls nötig
"""
if not ML_AVAILABLE or ml_predictor is None:
return
if ml_predictor.should_retrain():
print("\n Auto-Retraining triggered...")
train_ml_model()
# ==========================================
# QUICK STATUS
# ==========================================
def ml_quick_status() -> str:
"""Kurzer Status für Startup-Output"""
if not ML_AVAILABLE:
return " ML Predictor: NOT INSTALLED (pip install xgboost)"
if not ML_CONFIG.get('enabled', False):
return " ML Predictor: DISABLED"
if ml_predictor and ml_predictor.is_trained:
stats = ml_predictor.training_stats
auc = stats.get('cv_auc_mean', 0)
trades = stats.get('total_trades', 0)
return f" ML Predictor: ACTIVE (AUC: {auc:.2f}, trained on {trades} trades)"
else:
return " ML Predictor: NOT TRAINED (run train_ml_model())"
# ==========================================
# STANDALONE TEST
# ==========================================
if __name__ == "__main__":
print(ml_quick_status())
print()
print(get_ml_status())