Alpha-Nebula:Deep Learning Stock Volatility with Google Domestic Trends

论文链接:Deep Learning Stock Volatility with Google Domestic Trends

课件链接:mhy-Deep Learning Stock Volatility with Google Domestic Trends_pptx

概述

这篇文章核心目标是,通过长短期记忆循环神经网络(LSTM)预测股市波动率,其中输入数据依赖于Google Domestic Trend这样一个搜索量指数。

Google Domestic Trend里面提取了Google中每一个关键词相对于时间的搜索量变化,当然,如果说联想到国内数据,百度指数提供了相似的操作

首先,选取若干具有代表性的词语,如bankruptcy,auto trading, travel等,将其热度指数同股价一起输入LSTM,来预测波动率。

波动率的计算公式比较有意思,

    \[\sigma = 0.511(u-d)^2 - 0.019[c(u+d)-2ud]-0.383c^2\]

其中 u=log(\frac{High}{Open})d=log(\frac{Low}{Open})c=log(\frac{Close}{Open}).

即该公式仅仅依赖于四个价格,他和MACD用不同的算法导出了几乎相似的指数,这也是一个非常美妙的地方。

本文在预测\sigma之外,也同时尝试了预测价格变化量,即

    \[r_i = log(\frac{Close_i}{Close_{i-1}})\]

只是一个label不同的问题,就不详述了。

技巧1:平滑

细粒度的数据存在较大的杂音,故希望通过增大粒度来去除杂音。这里增大粒度就存在值得合并问题

\Delta t为平滑的时间区间.

收益率由于已经取过log了,所以可以直接求和

    \[r_i^{\Delta t} = \sum^{i \Delta t}_{t=(i-1)\Delta t +1} r_t\]

搜索量合并是一个算数平均的过程

    \[d_i^{\Delta t} = \frac{1}{\Delta t} \sum^{i \Delta t}_{t=(i-1)\Delta t +1} d_t\]

波动率是一个几何平均过程

    \[\sigma_i^{\Delta t} = \sqrt{\sum^{i \Delta t}_{t=(i-1)\Delta t +1} \sigma_t^2}\]

技巧2:归一

对于任意序列A,都有归一化公式

    \[Z = \frac{A_i - mean(A)}{std(A)}\]

而对于时序A,可以加一个滑动窗口时长K进行仿照

    \[Z^A_{k,i} = \frac{A_i - mean(A_{i-k:i})}{std(A_{i-k:i})}\]

这样的归一方法,既保证了短期趋势的完整复制,还可以避免长期趋势导致的值不平均。

结论

如其他论文一样,这里还是借助其他模型进行比较,结论是:比其他模型效果更好。不过恐怕也是五十步笑百步了吧~

就这个问题而言,如果预测r_i,可能会比较有实用价值,但是预测效果会很差,毕竟确实想不出来涨跌会和这东西有什么关系。但是如果是预测\sigma_i,虽然效果不错,但是实用价值又不太高。总之感觉很鸡肋啊。

Alpha-Nebula:Short-term stock price prediction based on echo state networks

原文链接:Short-term stock price prediction based on echo state networks

展示课件链接:Short-Term Stock Price Prediction based on Echo State Network

这篇文章讲的是将Echo State Network(回声状态网络)应用于股票数据的短期预测中。我之前没有听说过ESN,而这篇文章在ESN之外的创新也不多,所以算是介绍这样一个工具吧。

Echo State Network

ESN是什么呢?这里直接应用一篇个人认为写的很好的教学文章,不过这里我也准备用简单的语言讲一讲个人的理解。

ESN拥有一个叫做reservoir的状态储存池,我们将其记为x(i)向量,对于这个x(i)向量进行某种迭代

(1)   \begin{equation*}  x(i+1) = f(W*x(i)) \end{equation*}

其中f是任意非线性函数。现在我们x(i)充当了一种Memory的角色。

接着令u(i)表示第i时刻的输入,y(i)表示第i时刻的目标输出,我们将这个输入输出加到刚才的 (1)里面,得到实际的迭代式

(2)   \begin{equation*}  x(t+1) &= f(W^{in}u(t+1) + W x(t) + W^{back} y(t)) \end{equation*}

是不是感觉这里面x(t)就像回声一样在里面荡来荡去,这里就对了。

最后输出为

(3)   \begin{equation*}  y'(t+1) = W^{out} concat(u(n+1),x(n+1),y(n)) \end{equation*}

在式子(3)里面,y'(t+1),concat(u(n+1),x(n+1),y(n))以及y(t+1)已知,则可以用线性回归训练啦。

可以看出该算法有如下特点:

  • 训练是最小二乘法,速度快
  • 不会陷入局部最优解

另外也有一些需要注意的地方:

  • W不能太大,否则可能越乘越大,可以通过W的特征值的最大值的大小来限制
  • 为了使效果更优,W最好是稀疏矩阵(比如95%的零)

使用ESN预测短期股价

先说一些论文中的细节

  • 论文中非线性函数f(x)的选择为

    (4)   \begin{equation*}  f(x)  = \frac{1}{1+e^{-\alpha x + v}} \end{equation*}

  • 通过赫斯特指数选择训练输入数据,文章里面选择了Hurst指数最接近1的序列进行训练,原因不明…… 也许是因为hurst接近1的时候,序列特征更持久?
    相关文献:Some comments on Hurst exponent and the long memory processes on capital markets
  • 通过各种技术指标可以有效的提高效果,但是可能存在过拟合,所以通过PCA来进行数据降维。

想法与疑问

  • 一般的论文都通过平均百分比误差来表示效果,感觉这东西还是不太容易量化实际的收益……
  • 这里的LinearRegression是最简单的版本,我们是否可以给他加入更多的优化,比如局部回归,或者对于不同的部分采用不同的回归,甚至可以把决策树套进来。