Tworzenie cech opartych na średniej kroczącej i RSI
Aby poprawić jakość prognoz modeli uczenia maszynowego, warto wzbogacić je o dane historyczne. Dodawanie wielu kolejnych kroków czasowych jest jednak kłopotliwe. Zamiast tego możemy skondensować informacje z poprzednich punktów do jednego kroku czasowego za pomocą wskaźników.
Średnia krocząca to jeden z najprostszych wskaźników – jest to średnia z poprzednich punktów danych. Służy do tego funkcja talib.SMA() z biblioteki TAlib.
Innym popularnym wskaźnikiem technicznym jest indeks siły względnej (RSI). Definiuje się go następująco:
\(RSI = 100 - \frac{100} {1 + RS}\)
\(RS = \frac{\text{average gain over } n \text{ periods}} {\text{average loss over } n \text{ periods}}\)
Liczbę okresów n ustawia się w funkcji talib.RSI() za pomocą argumentu timeperiod.
Najczęściej stosowanym okresem dla RSI jest 14 – właśnie tej wartości użyjemy w naszych obliczeniach.
To ćwiczenie jest częścią kursu
Uczenie maszynowe w finansach z Pythonem
Instrukcje do ćwiczenia
- Utwórz listę nazw cech (zacznij od listy zawierającej wyłącznie
'5d_close_pct'). - Użyj okresów 14, 30, 50 i 200, aby obliczyć średnie kroczące za pomocą
talib.SMA()na podstawie skorygowanych cen zamknięcia (lng_df['Adj_Close']). - Znormalizuj średnie kroczące względem skorygowanej ceny zamknięcia, dzieląc przez
Adj_Close. - Wewnątrz pętli oblicz RSI za pomocą
talib.RSI()na podstawieAdj_Close, używającnjako wartości okresu.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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)