R語言量化交易RSI策略:使用支持向量機SVM|附代碼數(shù)據(jù)
原文鏈接:tecdat.cn/?p=19839
機器學習算法可用于找到最佳值來交易您的指標?(?點擊文末“閱讀原文”獲取完整代碼數(shù)據(jù))。
相對強弱指標(RSI)是最常見的技術(shù)指標之一。它用于識別超賣和超買情況。傳統(tǒng)上,交易者希望RSI值超過70代表超買市場狀況,而低于30則代表超賣市場狀況。但是,這些主張是否有效?為什么70,為什么30?此外,不同的趨勢市場如何影響RSI信號?
在本文中,我們將使用一種功能強大的機器學習算法-支持向量機(SVM),在考慮到市場整體趨勢的同時,探索您實際需要的RSI值。
首先,我們將簡要概述SVM,然后根據(jù)算法發(fā)現(xiàn)的模式來構(gòu)建和測試策略。
支持向量機
支持向量機基于其發(fā)現(xiàn)非線性模式的能力,是較流行且功能強大的機器學習算法之一。SVM通過找到一條稱為“決策邊界”或“超平面”的線來工作,該線可以根據(jù)類別(在我們的情況下為“看漲”或“看跌”)最好地分離數(shù)據(jù)。SVM的強大功能是可以使用一組稱為“核”的數(shù)學函數(shù)將數(shù)據(jù)重新排列或映射到多維特征空間,在該空間中數(shù)據(jù)可以線性分離。
然后,SVM在較高維度的空間中繪制一條線,以最大化兩個類之間的距離。將新的數(shù)據(jù)點提供給SVM后,它會計算該點落在線的哪一邊并進行預(yù)測。
點擊標題查閱往期內(nèi)容
數(shù)據(jù)分享|R語言邏輯回歸、線性判別分析LDA、GAM、MARS、KNN、QDA、決策樹、隨機森林、SVM分類葡萄酒交叉驗證ROC
左右滑動查看更多
01
02
03
04
SVM的另一個優(yōu)點是,在可以使用它之前,必須選擇的參數(shù)相對較少。首先,您必須選擇用于將數(shù)據(jù)轉(zhuǎn)換到更高維度空間的核或映射功能。徑向基函數(shù)是一種流行的選擇。接下來,您需要選擇gamma參數(shù)。gamma確定單個訓練示例可以對決策邊界產(chǎn)生多少影響。較低的值表示單個點將對畫線的位置產(chǎn)生較大的影響,而較高的值表示每個點將僅對較小的影響。將gamma參數(shù)選擇為模型輸入數(shù)量(1 /(輸入數(shù)量))是一個經(jīng)驗法則。最后,您需要選擇正則化參數(shù)C。C確定了訓練集中分類錯誤的示例與決策邊界的簡單性之間的權(quán)衡。低C會創(chuàng)建更平滑的決策邊界并減少過度擬合,而高C會嘗試正確分類訓練集中的每個數(shù)據(jù)點,并可能導致過度擬合。我們希望減少模型的過擬合量,因此我們將選擇一個值1。
現(xiàn)在,我們對支持向量機的工作原理以及如何選擇其參數(shù)有了基本的了解,讓我們看看是否可以使用它來計算如何交易RSI。
交易RSI
相對強弱指標(RSI)將“上漲”移動的平均大小與“下跌”移動的平均大小進行比較,并將其歸一化為0到100。傳統(tǒng)的邏輯是,一旦股價有更多的,顯著的上升趨勢,它已經(jīng)變得超買或被高估,并且價格可能會下降。超買通常由RSI值超過70來確定,相反的情況表示RSI值為30時出現(xiàn)超賣或低估。
在強勁的上升趨勢中,RSI值超過70可能表示趨勢的延續(xù),而在下降趨勢期間的RSI值70可能意味著一個很好的切入點。問題是要找出要考慮這兩個因素的確切條件。
我們可以收集成千上萬個數(shù)據(jù)點,然后嘗試自己找到這些關(guān)系,也可以使用支持向量機為我們完成工作。
讓我們看看我們可以使用AUD / USD 每小時數(shù)據(jù)將開盤價與50期簡單移動平均線(SMA)比較,從而在3期RSI中找到模式并定義趨勢。
加載歷史價格。
#***************************************************************** #?載入歷史數(shù)據(jù) #******************************************************************? AUDUSD?=?read.xts('AUDUSD.csv',? format='%m/%d/%y?%H:%M',?index.class?=?c("POSIXlt",?"POSIXt")) 復制代碼
建立模型
使用R建立我們的模型,分析它能夠找到的模式,然后進行測試以查看這些模式在實際的交易策略中是否成立。
創(chuàng)建指標并訓練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%的訓練集以構(gòu)建模型,20%的測試集以測試我們發(fā)現(xiàn)的模型,以及20%的驗證集將我們的策略應(yīng)用于新的數(shù)據(jù) Training?=?DataSet[1:4528,] #使用徑向基函數(shù)作為核,將成本或C設(shè)置為1,構(gòu)建支持向量機 svm( ?data=Training,? kernel="radial", cost=1,gamma=1/2) #在訓練集中再次運行算法以可視化找到的模型 predict(SVM,Training,type="class") #?繪圖 ggplot(TrainingData,?aes(x=Trend,y=RSI3)) 復制代碼
我們可以看到算法在三個不同的區(qū)域預(yù)測空頭,而在中間的一個區(qū)域預(yù)測多頭。
讓我們進一步探索。
多頭
空頭
RSI低于25,價格比SMA 50低20(準確度為56%,交易36次)
RSI小于25,且價格比SMA 50低10至5個點(準確度為54%,交易81次)
RSI3在50到75之間,價格比SMA 50高5到10個點之間(準確度為58%,交易104)
RSI大于70,價格比SMA 50低5個點以上(準確度為59%,交易37次)
RSI大于75,價格比SMA 50高出15個點(準確度為59%,交易34次)
首先是左下角區(qū)域。在這里,價格剛剛跌破50期SMA,RSI跌破25,表明跌勢突破。
但是,如果價格跌破50周期SMA下方20個點,而RSI仍低于25點,則該算法會發(fā)現(xiàn)有較強的信號可以轉(zhuǎn)換為均值,并預(yù)測多頭交易。
接下來,圖左上方的短暫機會代表了RSI的傳統(tǒng)觀點。我們希望RSI超過70,而價格比50周期均線高出15點以上,以表示“超買”情況,這表明我們做空了。
左上方的區(qū)域有些不同。當價格剛剛跌破50期SMA以下且RSI超過70時,它發(fā)現(xiàn)了一個短暫的機會。這與第一種情況相似,但我們正在尋找看跌突破進入信號,而不是傳統(tǒng)的“超買”條件。
最終,存在一個區(qū)域的RSI在50到75之間,而價格已經(jīng)超過了50期均線,該算法發(fā)現(xiàn)了強烈的買入信號。
現(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筆正確)。
使用支持向量機(一種功能強大的機器學習算法),我們不僅能夠了解RSI的傳統(tǒng)知識在什么條件下成立,而且還能夠創(chuàng)建可靠的交易策略。
此過程稱為從機器學習算法中得出規(guī)則,使您可以結(jié)合自己的交易經(jīng)驗來使用機器學習算法。
點擊文末?“閱讀原文”
獲取全文完整資料。
本文選自《R語言量化交易RSI策略:使用支持向量機SVM》。
點擊標題查閱往期內(nèi)容
Python配對交易策略統(tǒng)計套利量化交易分析股票市場
R語言資產(chǎn)配置策略量化模型:改進的移動平均線策略動態(tài)回測
R語言量化:合成波動率指數(shù)移動平均策略分析標準普爾500波動率指數(shù)(VIX)
R語言改進的股票配對交易策略分析SPY-TLT組合和中國股市投資組合
R語言量化交易RSI策略:使用支持向量機SVM
使用R語言對S&P500股票指數(shù)進行ARIMA + GARCH交易策略
R語言量化交易RSI策略:使用支持向量機SVM
R語言資產(chǎn)配置: 季度戰(zhàn)術(shù)資產(chǎn)配置策略研究
R語言動量交易策略分析調(diào)整后的數(shù)據(jù)
TMA三均線股票期貨高頻交易策略的R語言實現(xiàn)
R語言時間序列:ARIMA / GARCH模型的交易策略在外匯市場預(yù)測應(yīng)用
R語言基于Garch波動率預(yù)測的區(qū)制轉(zhuǎn)移交易策略
r語言多均線股票價格量化策略回測
使用R語言對S&P500股票指數(shù)進行ARIMA + GARCH交易策略
Python基于粒子群優(yōu)化的投資組合優(yōu)化研究
R語言Fama-French三因子模型實際應(yīng)用:優(yōu)化投資組合
R語言動量和馬科維茨Markowitz投資組合(Portfolio)模型實現(xiàn)
Python計算股票投資組合的風險價值(VaR)
R語言Markowitz馬克維茨投資組合理論分析和可視化
R語言中的廣義線性模型(GLM)和廣義相加模型(GAM):多元(平滑)回歸分析保險資金投資組合信用風險敞口