Créer des caractéristiques de moyenne mobile et de RSI
Nous voulons ajouter des données historiques à nos modèles de Machine Learning pour améliorer les prédictions, mais ajouter de nombreux pas de temps historiques est complexe. À la place, on peut condenser l'information des points précédents en un seul pas de temps à l'aide d'indicateurs.
Une moyenne mobile est l'un des indicateurs les plus simples : c'est la moyenne des points de données précédents. On l'obtient avec la fonction talib.SMA() de la bibliothèque TAlib.
Un autre indicateur technique courant est l'indice de force relative (RSI), défini ainsi :
\(RSI = 100 - \frac{100} {1 + RS}\)
\(RS = \frac{\text{gain moyen sur } n \text{ périodes}} {\text{perte moyenne sur } n \text{ périodes}}\)
Le nombre de périodes n est défini dans talib.RSI() par l'argument timeperiod.
Une valeur courante pour le RSI est 14; nous allons donc l'utiliser comme l'un des paramètres dans nos calculs.
Cette activité fait partie du cours
Machine Learning pour la finance en Python
Instructions de l’exercice
- Créez une liste de noms de caractéristiques (commencez par une liste ne contenant que
'5d_close_pct'). - Utilisez des périodes de 14, 30, 50 et 200 pour calculer des moyennes mobiles avec
talib.SMA()à partir des cours de clôture ajustés (lng_df['Adj_Close']). - Normalisez les moyennes mobiles avec le cours de clôture ajusté en divisant par
Adj_Close. - À l'intérieur de la boucle, calculez le RSI avec
talib.RSI()à partir deAdj_Closeen utilisantnpour le paramètre timeperiod.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
feature_names = ____ # a list of the feature names for later
# Create moving averages and rsi for timeperiods of 14, 30, 50, and 200
for n in [____]:
# Create the moving average indicator and divide by Adj_Close
lng_df['ma' + str(n)] = talib.SMA(lng_df['Adj_Close'].values,
timeperiod=n) / lng_df[____]
# Create the RSI indicator
lng_df['rsi' + str(n)] = talib.____(lng_df['Adj_Close'].____, timeperiod=____)
# Add rsi and moving average to the feature name list
feature_names = feature_names + ['ma' + str(n), 'rsi' + str(n)]
print(feature_names)