基于深度学习的金融衍生品RSI指标预测模型
2019-08-22侯瑞高凤阳魏赫男
文/侯瑞 高凤阳 魏赫男
RSI 作为一种滞后指标,在预测短线波动中不能起到太大的作用,理论上来说,短周期RSI 指标虽然敏感,但在区间内快速波动的次数较多,可靠性较差;大周期的RSI 指标虽然非常准确,但敏感度不够,比较迟钝,容易错过最佳买卖点。此外,RSI 是由收盘价决定的,如果日内行情波动较大,上下影线非常长,RSI 就不能够反映行情变化。因此,在实际K线中,如果短期RSI 曲线向上突破长期RSI 曲线时,称为RSI 指标“黄金交叉”,构成买入信号;当短期RSI 曲线向下突破长期RSI 曲线时,称为RSI 指标“死亡交叉”,构成卖出信号。在本模型中,采用了RSI12日指标来作为原始数据。本文中采用普遍采用方法:即RSI 计算方法RS=N 天内收盘价涨幅和的均值÷N 天内收盘价跌幅和的均值RSI=100-100÷(1+RS)计算方法。
1 实现过程
1.1 Keras
Keras 属于高层神经网络API,由纯Python 编写,基于谷歌TensorFlow、Theano以及微软CNTK 后端。Keras 可以快速构建一个实验项目,得到准确的结果。
1.2 RNN
RNN(循环神经网络)是一种主流的人工神经网络,RNN 在不同层的神经元之间也建立带权连接,当序列推进,以前的隐藏层将对后来的隐藏层产生作用
RNN 具有以下特点:
(1)RNN 的结构与全连接网络类似。
(2)RNN 有按时间展开的特性。
(3)全连接网络对每一个样本只做一次forward,RNN 对一个样本会做多次forward。
(4)RNN 的缺陷是当输入数据的时间间隔渐渐变长时,将失去较长时间之前的学习,这种现象称为梯度消失。
1.3 实现方法
我们的实验环境为Python 3.7,keras 库
2.2.4 ,采用Tushare 获取RSI 数据集
建立多层神经网络RNN1,RNN1 为RSI形成买卖指标时交易品种的价格变化,建立多层神经网络RNN2,RNN2 为K 线趋势产生反复时RSI 的超买超卖强度,输入原始数据,进行神经网络学习,输出数据集。
图1:实验输出结果
RNN1: 100 个节点,接受input1 的50 个特征,以及自身的偏置值,故有(50+1)*100=5100 个参数;
2RNN1: 50 个节点,接受input2 的30 个特征,以及自身t-1 时刻的50 个隐层输出,故有(30+50+1)*50=4050 个参数;
RNN2: 100 个节点,接受dense1 的100 个隐层输出,以及自身的偏置值,故有(100+1)*100=10100 个参数;
2RNN2: 50 个节点,接受2RNN1 的50 个隐层的输出、自身t-1 隐层的输出,以及自身的偏置值,故有(50+50+1)*50=5050 个参数;
output: 3 个节点,接受RNN2 的100 个隐层的输出、rnn2 的50 个隐层的输出,以及自身的偏置值,故有(100+50+1)*3=453 个参数。
2 Python部分代码
X1 = np.random.rand(10000,50) # 10000 个样本,50 个特征
X2 = np.random.rand(10000,60,30) # 10000个样本,60 个时间点,30 个特征
y = np.random.choice([0,1,2],size=10000)
y = np.eye(3,dtype=int)[y]
Input1 = layers.Input(shape=(50,),name='Ex ample3_input1')
RNN1 = layers.Dense(100,activation='relu',name='Example3_RNN1')(Input1)
RNN2 = layers.Dense(100,activation='relu',name='Example3_RNN2')(RNN1)
Input2 = layers.Input(shape=(60,30,),name='Example3_input2')
2RNN1 = layers.SimpleRNN(60,return_seq uences=True,name='Example3_2RNN1')(Input2)
2RNN2 = layers.SimpleRNN(60,name='Exa mple3_2RNN2')(rnn1)
concat = layers.Concatenate(axis=-1,name='Example3_concat')([RNN2,2RNN2])
Output = layers.Dense(3,activation='softmax',name='output')(concat)
model = Model(inputs=[Input1,Input2],outp uts=Output)
model.compile(optimizer='sgd',loss='categor ical_crossentropy')
model.fit([X 1,X 2],y,batch_size=200,epochs=10)
3 实验结果分析
3.1 结果
在matlab 中将其绘制在坐标轴上,利用线性回归方程验证相关性,观察曲线后发现RSI 超买超卖指标与趋势变化表现出较强的相关性,但在实际应用中可能有一定的滞后。如图1所示。
3.2 结论
通过深度学习我们发现RSI 指标在市场中可以起到积极的指导作用,尤其是在长线投资中,投资者可以通过判断RSI 强弱变化来进行交易。