拓端tecdat|R語言量化交易R(shí)SI策略:使用支持向量機(jī)SVM
原文鏈接:http://tecdat.cn/?p=19839
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
機(jī)器學(xué)習(xí)算法可用于找到最佳值來交易您的指標(biāo)。
相對強(qiáng)弱指標(biāo)(RSI)是最常見的技術(shù)指標(biāo)之一。它用于識(shí)別超賣和超買情況。傳統(tǒng)上,交易者希望RSI值超過70代表超買市場狀況,而低于30則代表超賣市場狀況。但是,這些主張是否有效?為什么70,為什么30?此外,不同的趨勢市場如何影響RSI信號(hào)?
在本文中,我們將使用一種功能強(qiáng)大的機(jī)器學(xué)習(xí)算法-支持向量機(jī)(SVM),在考慮到市場整體趨勢的同時(shí),探索您實(shí)際需要的RSI值。
首先,我們將簡要概述SVM,然后根據(jù)算法發(fā)現(xiàn)的模式來構(gòu)建和測試策略。
支持向量機(jī)
支持向量機(jī)基于其發(fā)現(xiàn)非線性模式的能力,是較流行且功能強(qiáng)大的機(jī)器學(xué)習(xí)算法之一。SVM通過找到一條稱為“決策邊界”或“超平面”的線來工作,該線可以根據(jù)類別(在我們的情況下為“看漲”或“看跌”)最好地分離數(shù)據(jù)。SVM的強(qiáng)大功能是可以使用一組稱為“核”的數(shù)學(xué)函數(shù)將數(shù)據(jù)重新排列或映射到多維特征空間,在該空間中數(shù)據(jù)可以線性分離。

然后,SVM在較高維度的空間中繪制一條線,以最大化兩個(gè)類之間的距離。將新的數(shù)據(jù)點(diǎn)提供給SVM后,它會(huì)計(jì)算該點(diǎn)落在線的哪一邊并進(jìn)行預(yù)測。
SVM的另一個(gè)優(yōu)點(diǎn)是,在可以使用它之前,必須選擇的參數(shù)相對較少。首先,您必須選擇用于將數(shù)據(jù)轉(zhuǎn)換到更高維度空間的核或映射功能。徑向基函數(shù)是一種流行的選擇。接下來,您需要選擇gamma參數(shù)。gamma確定單個(gè)訓(xùn)練示例可以對決策邊界產(chǎn)生多少影響。較低的值表示單個(gè)點(diǎn)將對畫線的位置產(chǎn)生較大的影響,而較高的值表示每個(gè)點(diǎn)將僅對較小的影響。將gamma參數(shù)選擇為模型輸入數(shù)量(1 /(輸入數(shù)量))是一個(gè)經(jīng)驗(yàn)法則。最后,您需要選擇正則化參數(shù)C。C確定了訓(xùn)練集中分類錯(cuò)誤的示例與決策邊界的簡單性之間的權(quán)衡。低C會(huì)創(chuàng)建更平滑的決策邊界并減少過度擬合,而高C會(huì)嘗試正確分類訓(xùn)練集中的每個(gè)數(shù)據(jù)點(diǎn),并可能導(dǎo)致過度擬合。我們希望減少模型的過擬合量,因此我們將選擇一個(gè)值1。
現(xiàn)在,我們對支持向量機(jī)的工作原理以及如何選擇其參數(shù)有了基本的了解,讓我們看看是否可以使用它來計(jì)算如何交易R(shí)SI。
交易R(shí)SI
相對強(qiáng)弱指標(biāo)(RSI)將“上漲”移動(dòng)的平均大小與“下跌”移動(dòng)的平均大小進(jìn)行比較,并將其歸一化為0到100。傳統(tǒng)的邏輯是,一旦股價(jià)有更多的,顯著的上升趨勢,它已經(jīng)變得超買或被高估,并且價(jià)格可能會(huì)下降。超買通常由RSI值超過70來確定,相反的情況表示RSI值為30時(shí)出現(xiàn)超賣或低估。
在強(qiáng)勁的上升趨勢中,RSI值超過70可能表示趨勢的延續(xù),而在下降趨勢期間的RSI值70可能意味著一個(gè)很好的切入點(diǎn)。問題是要找出要考慮這兩個(gè)因素的確切條件。
我們可以收集成千上萬個(gè)數(shù)據(jù)點(diǎn),然后嘗試自己找到這些關(guān)系,也可以使用支持向量機(jī)為我們完成工作。
讓我們看看我們可以使用AUD / USD 每小時(shí)數(shù)據(jù)將開盤價(jià)與50期簡單移動(dòng)平均線(SMA)比較,從而在3期RSI中找到模式并定義趨勢。
加載歷史價(jià)格。
#*****************************************************************
# 載入歷史數(shù)據(jù)
#******************************************************************
AUDUSD = read.xts('AUDUSD.csv', format='%m/%d/%y %H:%M', index.class = c("POSIXlt", "POSIXt"))
建立模型
使用R建立我們的模型,分析它能夠找到的模式,然后進(jìn)行測試以查看這些模式在實(shí)際的交易策略中是否成立。
創(chuàng)建指標(biāo)并訓(xùn)練SVM:
#*****************************************************************
# 代碼策略
#******************************************************************
load.packages('e1071,ggplot2')
indicators = as.xts(list(
RSI3 = RSI(Cl(AUDUSD), 3),
SMA50 = SMA(Op(data$AUDUSD), 50)
# 刪除缺失
DataSet = DataSet[-(1:49),]
#將數(shù)據(jù)分為60%的訓(xùn)練集以構(gòu)建模型,20%的測試集以測試我們發(fā)現(xiàn)的模型,以及20%的驗(yàn)證集將我們的策略應(yīng)用于新的數(shù)據(jù)
Training = DataSet[1:4528,]
#使用徑向基函數(shù)作為核,將成本或C設(shè)置為1,構(gòu)建支持向量機(jī)
svm(
data=Training,
kernel="radial",
cost=1,gamma=1/2)
#在訓(xùn)練集中再次運(yùn)行算法以可視化找到的模型
predict(SVM,Training,type="class")
# 繪圖
ggplot(TrainingData, aes(x=Trend,y=RSI3))

我們可以看到算法在三個(gè)不同的區(qū)域預(yù)測空頭,而在中間的一個(gè)區(qū)域預(yù)測多頭。
讓我們進(jìn)一步探索。
多頭空頭RSI低于25,價(jià)格比SMA 50低20(準(zhǔn)確度為56%,交易36次)RSI小于25,且價(jià)格比SMA 50低10至5個(gè)點(diǎn)(準(zhǔn)確度為54%,交易81次)RSI3在50到75之間,價(jià)格比SMA 50高5到10個(gè)點(diǎn)之間(準(zhǔn)確度為58%,交易104)RSI大于70,價(jià)格比SMA 50低5個(gè)點(diǎn)以上(準(zhǔn)確度為59%,交易37次)RSI大于75,價(jià)格比SMA 50高出15個(gè)點(diǎn)(準(zhǔn)確度為59%,交易34次)
首先是左下角區(qū)域。在這里,價(jià)格剛剛跌破50期SMA,RSI跌破25,表明跌勢突破。
但是,如果價(jià)格跌破50周期SMA下方20個(gè)點(diǎn),而RSI仍低于25點(diǎn),則該算法會(huì)發(fā)現(xiàn)有較強(qiáng)的信號(hào)可以轉(zhuǎn)換為均值,并預(yù)測多頭交易。
接下來,圖左上方的短暫機(jī)會(huì)代表了RSI的傳統(tǒng)觀點(diǎn)。我們希望RSI超過70,而價(jià)格比50周期均線高出15點(diǎn)以上,以表示“超買”情況,這表明我們做空了。
左上方的區(qū)域有些不同。當(dāng)價(jià)格剛剛跌破50期SMA以下且RSI超過70時(shí),它發(fā)現(xiàn)了一個(gè)短暫的機(jī)會(huì)。這與第一種情況相似,但我們正在尋找看跌突破進(jìn)入信號(hào),而不是傳統(tǒng)的“超買”條件。
最終,存在一個(gè)區(qū)域的RSI在50到75之間,而價(jià)格已經(jīng)超過了50期均線,該算法發(fā)現(xiàn)了強(qiáng)烈的買入信號(hào)。
現(xiàn)在,我們找到了SVM發(fā)現(xiàn)的一組基本規(guī)則,讓我們測試一下它們對新數(shù)據(jù)(測試集)的支持程度。
# 我們找到了SVM發(fā)現(xiàn)的一組基本規(guī)則,測試一下它們在新數(shù)據(jù)(測試集)的正確程度。
# 模式在測試集中的表現(xiàn):
sum(ShortTrades$Direction == -1)/nrow(ShortTrades)*100
[1] 57.82313
sum(LongTrades$Direction ==1)/nrow(LongTrades)*100
[1] 57.14286
我們的空頭交易為58%(147筆交易中的85筆正確),而我們的多頭交易為57%(140筆交易中的80筆正確)。
使用支持向量機(jī)(一種功能強(qiáng)大的機(jī)器學(xué)習(xí)算法),我們不僅能夠了解RSI的傳統(tǒng)知識(shí)在什么條件下成立,而且還能夠創(chuàng)建可靠的交易策略。
此過程稱為從機(jī)器學(xué)習(xí)算法中得出規(guī)則,使您可以結(jié)合自己的交易經(jīng)驗(yàn)來使用機(jī)器學(xué)習(xí)算法。

最受歡迎的見解
1.用機(jī)器學(xué)習(xí)識(shí)別不斷變化的股市狀況—隱馬爾科夫模型(HMM)的應(yīng)用
2.R語言GARCH-DCC模型和DCC(MVT)建模估計(jì)
3.R語言實(shí)現(xiàn) Copula 算法建模依賴性案例分析報(bào)告
4.R語言COPULAS和金融時(shí)間序列數(shù)據(jù)VaR分析
5.R語言多元COPULA GARCH 模型時(shí)間序列預(yù)測
6.用R語言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實(shí)例
7.r語言預(yù)測波動(dòng)率的實(shí)現(xiàn):ARCH模型與HAR-RV模型
8.R語言如何做馬爾科夫轉(zhuǎn)換模型markov switching model
9.matlab使用Copula仿真優(yōu)化市場風(fēng)險(xiǎn)