43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
import numpy as np
|
|
import pandas as pd
|
|
import matplotlib.pyplot as plt
|
|
from sklearn.linear_model import LinearRegression
|
|
|
|
# Exemple : dataframe avec une colonne sma24
|
|
n = 100
|
|
df = pd.DataFrame({
|
|
"sma24": np.sin(np.linspace(0, 6*np.pi, n)) * 50 + 200 + np.random.randn(n)*2
|
|
})
|
|
|
|
# --- paramètres
|
|
lookback = 30 # nombre de bougies utilisées pour l'apprentissage
|
|
future_steps = 10 # combien de bougies futures on veut estimer
|
|
|
|
# --- Préparer les données
|
|
X = np.arange(lookback).reshape(-1, 1) # 0 .. 29
|
|
y = df["sma24"].iloc[-lookback:].values # les dernières valeurs
|
|
|
|
# --- Entraîner la régression
|
|
model = LinearRegression()
|
|
model.fit(X, y)
|
|
|
|
# --- Prédire les valeurs futures
|
|
X_future = np.arange(lookback, lookback + future_steps).reshape(-1, 1)
|
|
y_future = model.predict(X_future)
|
|
|
|
# --- Reconstituer la courbe complète (historique + prévision)
|
|
predicted_full = np.concatenate([y, y_future])
|
|
|
|
# --- Affichage
|
|
plt.figure(figsize=(10,5))
|
|
plt.plot(df.index[-lookback:], y, label="Historique (sma24)", color="blue")
|
|
plt.plot(
|
|
np.arange(df.index[-1]-lookback+1, df.index[-1]+future_steps+1),
|
|
predicted_full,
|
|
label="Régression + prévision", color="orange", linestyle="--"
|
|
)
|
|
plt.axvline(df.index[-1], color="gray", linestyle=":")
|
|
plt.legend()
|
|
plt.title(f"Projection de SMA24 sur {future_steps} bougies futures")
|
|
plt.show()
|