创建移动平均与 RSI 特征
我们希望为机器学习模型加入历史数据来提升预测效果,但直接添加大量历史时间步会很麻烦。相反,您可以用技术指标把先前数据点的信息压缩到单个时间步中。
移动平均(moving average)是最简单的指标之一——它是之前若干数据点的平均值。在 TAlib 库中可用函数 talib.SMA() 计算。
另一个常见的技术指标是相对强弱指数(RSI)。其定义为:
\(RSI = 100 - \frac{100} {1 + RS}\)
\(RS = \frac{\text{过去 } n \text{ 个周期的平均上涨}} {\text{过去 } n \text{ 个周期的平均下跌}}\)
参数中的周期数 n 在 talib.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)