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


12

我正在尝试掌握如何使用机器学习来预测未来的财务时间序列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的预测没有用。

我尝试预测关闭,我是否应该在拟合模型之前将其他变量滞后尽可能多的步长?

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

Answers:


16

我的第一个观察结果是,您输入的价格相对于收盘价没有滞后,这就是为什么您观察到如此好的拟合。SMA(简单移动平均线)在其计算中使用收盘价,而高低范围涵盖了收盘价,因此使用它们来预测收盘价会产生前瞻性偏差。我的观点是,如果您要预测提前两天的收盘价,则应该使用与收盘价相差至少两天的输入来构建模型。一些输入可能会滞后两天以上,但是我会从简单开始,尝试仅使用少量输入。

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

我还建议您在一种以上的安全性上构建模型,以使机器学习算法不会影响一种股票的特质。我将从至少5种彼此之间没有高度相关性的股票开始。

Guido Deboeck撰写的《边缘交易》是探索机器学习在金融时间序列预测中的应用的良好起点。这是一本较旧的书,因此虽然落后于我们今天可用的技术,但这是一个好的开始。我还将推荐Kaufman的《新交易系统和方法》和John Wolberg的《专家交易系统》。


好的,谢谢您的回答。该示例让我更了解如何设置数据,以便randomForest可以使用它。但是现在我知道我需要落后于投入才能使它正常工作。将示例中SMA的价格作为输出变量是否有意义,还是必须将其设为0或1?\ n还要感谢您的推荐书,以便熟悉它们。
尼克,

您可以肯定地使用SMA的价格作为输出变量。问题变得更加复杂。现在,您正在尝试预测准确的价格值,而不是预测方向。以我的经验,这对于机器算法来说很难做得很好。但是,如果您只是熟悉设置时间序列数据以进行预测的过程,那么这可能是一个不错的起点,特别是如果它比定向预测更直观的话。您还可以尝试预测两个移动平均线相交的价格。
CrossValidatedTrading

嗨,我创建了一些功能并制作了一个模型:pastie.org/7958695我想我已经确定了机制。但是,该模型过于曲线拟合。您是否做过类似的事情并且有任何实际用途?多聊会很酷。
尼克,

我总是愿意进行更详细的对话。我的联系信息在我的个人资料上。如果您愿意,请给我发送一封电子邮件。
CrossValidatedTrading

与预测价格值相比,做了一些简单的回归来预测应该可以用的收益。除了预测回报外,还必须预测足够大的回报以击败点差和交易等。谈论更多,在个人资料中找不到您的邮件会很酷。我在上一条评论中张贴的馅饼中。
尼克,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.