文/侯瑞 高鳳陽 魏赫男
RSI 作為一種滯后指標(biāo),在預(yù)測短線波動中不能起到太大的作用,理論上來說,短周期RSI 指標(biāo)雖然敏感,但在區(qū)間內(nèi)快速波動的次數(shù)較多,可靠性較差;大周期的RSI 指標(biāo)雖然非常準(zhǔn)確,但敏感度不夠,比較遲鈍,容易錯過最佳買賣點。此外,RSI 是由收盤價決定的,如果日內(nèi)行情波動較大,上下影線非常長,RSI 就不能夠反映行情變化。因此,在實際K線中,如果短期RSI 曲線向上突破長期RSI 曲線時,稱為RSI 指標(biāo)“黃金交叉”,構(gòu)成買入信號;當(dāng)短期RSI 曲線向下突破長期RSI 曲線時,稱為RSI 指標(biāo)“死亡交叉”,構(gòu)成賣出信號。在本模型中,采用了RSI12日指標(biāo)來作為原始數(shù)據(jù)。本文中采用普遍采用方法:即RSI 計算方法RS=N 天內(nèi)收盤價漲幅和的均值÷N 天內(nèi)收盤價跌幅和的均值RSI=100-100÷(1+RS)計算方法。
Keras 屬于高層神經(jīng)網(wǎng)絡(luò)API,由純Python 編寫,基于谷歌TensorFlow、Theano以及微軟CNTK 后端。Keras 可以快速構(gòu)建一個實驗項目,得到準(zhǔn)確的結(jié)果。
RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))是一種主流的人工神經(jīng)網(wǎng)絡(luò),RNN 在不同層的神經(jīng)元之間也建立帶權(quán)連接,當(dāng)序列推進(jìn),以前的隱藏層將對后來的隱藏層產(chǎn)生作用
RNN 具有以下特點:
(1)RNN 的結(jié)構(gòu)與全連接網(wǎng)絡(luò)類似。
(2)RNN 有按時間展開的特性。
(3)全連接網(wǎng)絡(luò)對每一個樣本只做一次forward,RNN 對一個樣本會做多次forward。
(4)RNN 的缺陷是當(dāng)輸入數(shù)據(jù)的時間間隔漸漸變長時,將失去較長時間之前的學(xué)習(xí),這種現(xiàn)象稱為梯度消失。
我們的實驗環(huán)境為Python 3.7,keras 庫
2.2.4 ,采用Tushare 獲取RSI 數(shù)據(jù)集
建立多層神經(jīng)網(wǎng)絡(luò)RNN1,RNN1 為RSI形成買賣指標(biāo)時交易品種的價格變化,建立多層神經(jīng)網(wǎng)絡(luò)RNN2,RNN2 為K 線趨勢產(chǎn)生反復(fù)時RSI 的超買超賣強(qiáng)度,輸入原始數(shù)據(jù),進(jìn)行神經(jīng)網(wǎng)絡(luò)學(xué)習(xí),輸出數(shù)據(jù)集。
圖1:實驗輸出結(jié)果
RNN1: 100 個節(jié)點,接受input1 的50 個特征,以及自身的偏置值,故有(50+1)*100=5100 個參數(shù);
2RNN1: 50 個節(jié)點,接受input2 的30 個特征,以及自身t-1 時刻的50 個隱層輸出,故有(30+50+1)*50=4050 個參數(shù);
RNN2: 100 個節(jié)點,接受dense1 的100 個隱層輸出,以及自身的偏置值,故有(100+1)*100=10100 個參數(shù);
2RNN2: 50 個節(jié)點,接受2RNN1 的50 個隱層的輸出、自身t-1 隱層的輸出,以及自身的偏置值,故有(50+50+1)*50=5050 個參數(shù);
output: 3 個節(jié)點,接受RNN2 的100 個隱層的輸出、rnn2 的50 個隱層的輸出,以及自身的偏置值,故有(100+50+1)*3=453 個參數(shù)。
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)
在matlab 中將其繪制在坐標(biāo)軸上,利用線性回歸方程驗證相關(guān)性,觀察曲線后發(fā)現(xiàn)RSI 超買超賣指標(biāo)與趨勢變化表現(xiàn)出較強(qiáng)的相關(guān)性,但在實際應(yīng)用中可能有一定的滯后。如圖1所示。
通過深度學(xué)習(xí)我們發(fā)現(xiàn)RSI 指標(biāo)在市場中可以起到積極的指導(dǎo)作用,尤其是在長線投資中,投資者可以通過判斷RSI 強(qiáng)弱變化來進(jìn)行交易。