开始使用免费开始使用

创建移动平均与 RSI 特征

我们希望为机器学习模型加入历史数据来提升预测效果,但直接添加大量历史时间步会很麻烦。相反,您可以用技术指标把先前数据点的信息压缩到单个时间步中。

移动平均(moving average)是最简单的指标之一——它是之前若干数据点的平均值。在 TAlib 库中可用函数 talib.SMA() 计算。

另一个常见的技术指标是相对强弱指数(RSI)。其定义为:

\(RSI = 100 - \frac{100} {1 + RS}\)

\(RS = \frac{\text{过去 } n \text{ 个周期的平均上涨}} {\text{过去 } n \text{ 个周期的平均下跌}}\)

参数中的周期数 ntalib.RSI()timeperiod 参数中指定。

RSI 常用的周期是 14,因此我们会在计算中采用该设置之一。

本练习是课程的一部分

Python 金融机器学习

查看课程

练习说明

  • 创建一个特征名列表(先以只包含 '5d_close_pct' 的列表开始)。
  • 使用 14、30、50 和 200 作为周期,从复权收盘价(lng_df['Adj_Close'])计算 talib.SMA() 的移动平均。
  • 通过除以 Adj_Close,将这些移动平均以复权收盘价进行归一化。
  • 在循环中,使用 talib.RSI() 基于 Adj_Close 并将 n 作为 timeperiod 来计算 RSI。

交互式实操练习

通过完成这段示例代码来试试这个练习。

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)
编辑并运行代码