学习使用机器学习预测金融时间序列的第一步

机器算法验证 r 时间序列 机器学习 随机森林 金融
2022-03-27 03:02:59

我试图掌握如何使用机器学习来预测未来的金融时间序列 1 步或更多步。

我有一个包含一些描述性数据的金融时间序列,我想建立一个模型,然后使用该模型来预测 n 步。

到目前为止我一直在做的是:

getSymbols("GOOG")

GOOG$sma <- SMA(Cl(GOOG))
GOOG$range <- GOOG$GOOG.High-GOOG$GOOG.Low

tail(GOOG)

           GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume GOOG.Adjusted     sma range
2013-05-07    863.01    863.87   850.67     857.23     1959000        857.23 828.214 13.20
2013-05-08    857.00    873.88   852.91     873.63     2468300        873.63 834.232 20.97
2013-05-09    870.84    879.66   868.23     871.48     2200600        871.48 840.470 11.43
2013-05-10    875.31    880.54   872.16     880.23     1897700        880.23 848.351  8.38
2013-05-13    878.89    882.47   873.38     877.53     1448500        877.53 854.198  9.09
2013-05-14    877.50    888.69   877.14     887.10     1579300        887.10 860.451 11.55

然后我为这些数据拟合了一个 randomForest 模型。

fit <- randomForest(GOOG$GOOG.Close ~ GOOG$sma + GOOG$range, GOOG)

这似乎非常适合:

> fit

Call:
 randomForest(formula = GOOG$GOOG.Close ~ GOOG$sma + GOOG$range,      data = GOOG) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 353.9844
                    % Var explained: 97.28

并试图用它来预测:

predict(fit, GOOG, n.ahead=2)

但是这个对c的预测并没有奏效。

我尝试预测收盘价,在拟合模型之前,我是否应该将其他变量滞后于我想要的预测步数?

可能还有很多其他的东西我也应该考虑在内,但这些确实是我尝试机器学习的第一步。

1个回答

我的第一个观察结果是,您没有滞后于收盘价的输入,这就是您观察到如此合适的原因。SMA(简单移动平均线)在其计算中使用收盘价,而高低范围包含收盘价,因此使用它们来预测收盘价会产生前瞻性偏差。我的观点是,如果您试图提前两天预测收盘价,您应该使用比收盘价至少滞后两天的输入来构建模型。一些输入可能会滞后两天以上,但我会从简单开始,尝试只使用少数输入。

至于您预测收盘价的目标,我认为收盘价太嘈杂而不能用作目标变量,使用它们会导致过度拟合或优化错误的目标。相反,我会先用移动平均线平滑收盘价,然后预测未来两天的价格变化方向。例如,我可以将收盘价替换为收盘价的 5 天 SMA,然后将 SMA 的价格变化编码为 1,如果它在接下来的两天内为正,否则编码为 0。因为输出变量现在编码为 1 或 0,这是一个很好的问题,可以尝试使用您使用的随机森林函数来解决。您还可以尝试其他一些分类算法,例如逻辑回归、神经网络和 SVM,并可能将一些分类算法组合成一个集合以提高您的性能。在不过度拟合的情况下,这仍然是一个难以解决的问题,但这是朝着正确方向迈出的一步。另一个警告是,您的最终模型在将接下来的两天分类为正面或负面时可能具有惊人的准确性,但仍然会赔钱,因为它错误地分类了一些大动作。

我还建议在不止一种证券上构建您的模型,这样机器学习算法就不会针对一只股票的特质进行磨练。我会从至少 5 只彼此不高度相关的股票开始。

Guido Deboeck 的 Trading on the Edge 是探索机器学习在金融时间序列预测中的应用的一个很好的起点。这是一本较旧的书,因此它远远落后于我们今天可用的技术,但它是一个好的开始。我还会推荐考夫曼的新交易系统和方法以及约翰沃尔伯格的专家交易系统。