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