Создание признаков на основе скользящей средней и RSI
Чтобы улучшить предсказания модели машинного обучения, нам нужно добавить исторические данные. Однако использовать большое количество временных шагов напрямую затруднительно. Вместо этого можно сжать информацию из предыдущих точек в один временной шаг с помощью индикаторов.
Скользящая средняя — один из простейших индикаторов: это среднее значение предыдущих точек данных. В библиотеке TAlib она реализована в виде функции talib.SMA().
Другой распространённый технический индикатор — индекс относительной силы (RSI). Он определяется следующим образом:
\(RSI = 100 - \frac{100} {1 + RS}\)
\(RS = \frac{\text{average gain over } n \text{ periods}} {\text{average loss over } n \text{ periods}}\)
Параметр n задаётся в talib.RSI() через аргумент timeperiod.
Распространённое значение периода для RSI — 14, именно его мы и будем использовать в вычислениях.
Это упражнение является частью курса
Машинное обучение для финансов на Python
Инструкции к упражнению
- Создайте список имён признаков (начните со списка, содержащего только
'5d_close_pct'). - Используйте периоды 14, 30, 50 и 200 для вычисления скользящих средних с помощью
talib.SMA()по скорректированным ценам закрытия (lng_df['Adj_Close']). - Нормализуйте скользящие средние относительно скорректированной цены закрытия, разделив на
Adj_Close. - Внутри цикла вычислите RSI с помощью
talib.RSI()по значениямAdj_Close, используяnв качестве периода.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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)