НачатьНачать бесплатно

Создание признаков на основе скользящей средней и 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)
Редактировать и запускать код