Gleitende Durchschnitte und RSI-Features erstellen
Wir möchten unseren Machine-Learning-Modellen historische Daten hinzufügen, um bessere Vorhersagen zu treffen. Viele historische Zeitschritte hinzuzufügen, ist jedoch knifflig. Stattdessen können wir Informationen aus früheren Punkten mit Indikatoren in einem einzelnen Zeitschritt zusammenfassen.
Ein gleitender Durchschnitt ist einer der einfachsten Indikatoren – er ist der Durchschnitt der vorherigen Datenpunkte. Das ist die Funktion talib.SMA() aus der Bibliothek TAlib.
Ein weiterer gängiger technischer Indikator ist der Relative-Stärke-Index (RSI). Er ist definiert durch:
\(RSI = 100 - \frac{100} {1 + RS}\)
\(RS = \frac{\text{durchschnittlicher Gewinn über } n \text{ Perioden}} {\text{durchschnittlicher Verlust über } n \text{ Perioden}}\)
Die Anzahl der Perioden n wird in talib.RSI() über das Argument timeperiod gesetzt.
Eine übliche Periodenlänge für den RSI ist 14, daher verwenden wir das als eine Einstellung in unseren Berechnungen.
Diese Übung ist Teil des Kurses
<Kurs>Maschinelles Lernen für Finanzen in Python</Kurs>Übungsanweisungen
- Erstelle eine Liste von Feature-Namen (beginne mit einer Liste, die nur
'5d_close_pct'enthält). - Verwende die Perioden 14, 30, 50 und 200, um gleitende Durchschnitte mit
talib.SMA()aus den bereinigten Schlusskursen (lng_df['Adj_Close']) zu berechnen. - Normalisiere die gleitenden Durchschnitte mit dem bereinigten Schlusskurs, indem du durch
Adj_Closeteilst. - Berechne innerhalb der Schleife den RSI mit
talib.RSI()ausAdj_Closeund verwendenfür die Zeitperiode.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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)