AlphaV15-Quant-Engine / time_model.py
Nexo-S's picture
Update time_model.py
447a4ac verified
import pandas as pd
import xgboost as xgb
import joblib
import os
TIME_MODEL_FILE = "time_model.pkl"
def prepare_time_features(df):
"""
Génère la Target.
Les features (Lags, Momentum, Volume) sont DÉJÀ calculées par app.py !
"""
df = df.copy()
# 🎯 Target (Ce qu'on veut prédire : la prochaine bougie sera-t-elle verte ?)
# 1 = Hausse, 0 = Baisse
df['target'] = (df['close'].shift(-1) > df['close']).astype(int)
# Nettoyage de la toute dernière ligne (qui n'a pas encore de futur)
df = df.dropna()
# Les colonnes que XGBoost va regarder
features = [
'return_1h', 'return_3h', 'return_12h',
'RSI_lag1', 'RSI_lag2', 'vol_lag1', 'VOL_RATIO'
]
return df[features], df['target']
def train_time_model(df):
"""
Entraîne le modèle XGBoost.
Ultra-rapide, optimisé pour les 4 threads de ton processeur !
"""
print("⏳ [V9] Entraînement du Time Engine (XGBoost) en cours...")
X, y = prepare_time_features(df)
# Paramétrage Quant :
# max_depth=4 (pour ne pas overfitter le bruit de la crypto)
# n_jobs=-1 (utilise 100% du CPU dispo)
model = xgb.XGBClassifier(
n_estimators=100,
max_depth=4,
learning_rate=0.05,
objective='binary:logistic',
eval_metric='logloss',
n_jobs=-1,
random_state=42
)
model.fit(X, y)
joblib.dump(model, TIME_MODEL_FILE)
print("✅ [V9] Time Engine sauvegardé avec succès ! Ton CPU te remercie.")
return model
def load_time_model():
"""Charge le modèle depuis le disque."""
if os.path.exists(TIME_MODEL_FILE):
return joblib.load(TIME_MODEL_FILE)
return None
def predict_time(model, df):
"""
Prédit la probabilité de hausse pour la bougie actuelle.
"""
features = [
'return_1h', 'return_3h', 'return_12h',
'RSI_lag1', 'RSI_lag2', 'vol_lag1', 'VOL_RATIO'
]
# On isole la toute dernière ligne du marché
last_row = df[features].iloc[[-1]]
# predict_proba renvoie [prob_baisse, prob_hausse]. On veut la hausse (indice 1)
prob_hausse = model.predict_proba(last_row)[0][1]
return prob_hausse