R語言金融市場量化交易:布林帶、價差策略、RSI交易策略,回測COMP 226|附代碼數(shù)據(jù)
全文下載鏈接:http://tecdat.cn/?p=29653
最近我們被客戶要求撰寫關(guān)于量化交易的研究報告,包括一些圖形和統(tǒng)計(jì)輸出。
我們將利用每日數(shù)據(jù)制定簡單的交易策略,將涵蓋以下內(nèi)容。
一個簡單的介紹性交易。
它每天只根據(jù)前一天的價格行為做出交易決定 - 我們用這個例子來介紹前瞻性的偏見
布林線是一個使用移動平均線(和移動標(biāo)準(zhǔn)差)的標(biāo)準(zhǔn)技術(shù)分析指標(biāo)的例子
一個使用布林線的簡單的均線回復(fù)型交易策略 指標(biāo)作為策略的構(gòu)件(但與之不同)。路徑依賴性。止損、盈利目標(biāo)和持有期是引入路徑依賴的交易策略構(gòu)建的例子。
滑點(diǎn)--我們回顧一下什么是滑點(diǎn),我們探討在交易策略中考慮滑點(diǎn)的問題 - 使用價差的策略,它是兩個價格時間序列的線性組合
簡單的策略:模仿
策略
如果收盤價高于開盤價,則在第二天買入
否則,在第二天賣出
我們希望這個策略在什么時候能發(fā)揮作用?
如果有連續(xù)多日價格向同一方向移動的情況
每一天的方向與之前的變化不同,對該策略來說都是虧損的一天,所以這樣的日子不應(yīng)該有大的價格波動。
測試該策略
從現(xiàn)在開始,我們將重復(fù)使用實(shí)用工具腳本 "utilities.R "中的函數(shù)。在這種情況下,我們將使用。
getLogReturns(prices),從調(diào)整后的價格中計(jì)算出對數(shù)回報。
getEquityLog(log_ret,pos),從對數(shù)收益和倉位向量中計(jì)算出股權(quán)曲線。
實(shí)用功能
getLogReturns <- function(prices) {
# 返回調(diào)整后價格的對數(shù)收益
# 假設(shè)輸入中存在調(diào)整后的價格列
log_ret <- ROC(Ad(prices),type='continuous')
log_ret[1] <- 0
return(log_ret)
}
getEquityCurve <- function(returns,pos,type='log') { # ?股票曲線的簡單回報
if (type=='log') return(exp(cumsum(returns*pos)) - 1) else
cat ('Type not supported','\n')
}
股票曲線?
我們使用滯后函數(shù)將時間序列移動一個位置,因此我們使用前一天的價格來做決定
pos <- ifelse(Cl(prices)-Op(prices)>0,1,-1)
pos <- Lag(pos)
pos[1] <- 0
正確的股票曲線
交換位置?
注意到這個策略在所有四個股票上都表現(xiàn)不佳,但在其中三個股票上表現(xiàn)特別差。這表明對策略進(jìn)行了明顯的改變:做完全相反的事情,即交換多頭和空頭交易,如下所示
pos <- ifelse(Cl(prices)-Op(prices)>0,1,-1)
切換式股票曲線
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
【視頻】量化交易陷阱和R語言改進(jìn)股票配對交易策略分析中國股市投資組合
左右滑動查看更多
01
02
03
04
移動標(biāo)準(zhǔn)差和布林帶
類似于移動平均線,我們現(xiàn)在引入移動(滾動)標(biāo)準(zhǔn)差
我們使用移動平均線和移動標(biāo)準(zhǔn)差來定義布林帶,然后將在我們的下一個交易策略示例中使用
圖表系列
> library(quantmod)
> getSymbols('AAPL')
這使用包中的BBands函數(shù)TTR quantmod在chartSeries中結(jié)合了xts和TTR功能
策略代碼
我們將使用與相同的循環(huán)、收益和權(quán)益曲線計(jì)算
改變的是位置向量的計(jì)算
pos <- long + shortpos <- lag(pos)
參數(shù)
這個策略的參數(shù)是什么?
bbands <- BBands(prices,n=50,sd=2)
兩個明顯的數(shù)字參數(shù)是。
n是回溯期,和
sd是標(biāo)準(zhǔn)偏差的乘數(shù)
?例子
plot(equity,main='Equity curve')
該策略需要一個參數(shù),即持有期。當(dāng)且僅當(dāng)持有期過后,我們退出交易?
通過在計(jì)數(shù)小于持有期時留在交易中來實(shí)現(xiàn)。
run <- function(prices,n,sd,hold) {
bbands <- lag(BBands(prices,n=n,sd=sd))
pos <- rep(0,length=nrow(prices)) # all zeroes
下一個例子 - 止損
止損限制了某項(xiàng)交易的損失
我們將衡量一筆交易的簡單回報
如果它太負(fù),我們將退出交易
getTradeReturn <- function(prices,entry,exit,short=FALSE) {
prices <- as.numeric(prices)
> prices
Adjusted1970-01-02 1001970-01-03 1101970-01-04 1001970-01-05 1501970-01-06 2001970-01-07 100
> getTradeReturn(prices,entry=1,exit=2)[1] 0.1
> getTradeReturn(prices,entry=1,exit=2,short=T)[1] -0.09090909
> getTradeReturn(prices,entry=1,exit=4)[1] 0.5
titStr <- paste("stoploss=", stoploss,":",sum(stopOuts),"stop outs")
plotEquity(prices,pos,stopOuts,titStr); return(pos)
}
利差
兩個系列的加權(quán)組合(通常是差異)。
策略可以嘗試?yán)脙r差中的均值反轉(zhuǎn);對于一對股票,這被稱為成對交易
與協(xié)整理論有關(guān)
價差例子
我們將看一下標(biāo)準(zhǔn)普爾500指數(shù)和道瓊斯工業(yè)指數(shù)
pdf('different_screens.pdf')
plot.zoo(prices,col=cols,xlab=xlab,ylab=paste(tickers,ylab),main="")
dev.off()
現(xiàn)在,驚人的相似性是顯而易見的
例子:尋找權(quán)重
lookback <- 50
spread <- close1 - positionRatio*close2
點(diǎn)差 = x - positionRatio * y
當(dāng)我們賣出y的倉位比例單位時,買入一個單位的x
點(diǎn)差例子
plot.zoo(cbind(spread,0,0.5,-0.5),screen=c(2,2,2,2),main="Spread")
一個價差策略
創(chuàng)建價差的目的是創(chuàng)建一個平穩(wěn)的時間序列,也就是一個具有恒定平均值和標(biāo)準(zhǔn)差的時間序列。
如果我們成功了,我們就可以在價差遠(yuǎn)遠(yuǎn)低于其平均值時買入價差(做多廉價產(chǎn)品,做空昂貴產(chǎn)品),在價差高于其平均值時賣出價差。
連續(xù)積分理論正是處理平穩(wěn)的時間序列的線性組合,但我們不會去研究數(shù)學(xué)。
接下來我們將看到一個簡單的基于布林線的價差交易策略想法。
例子:RSI策略
RSI是一個標(biāo)準(zhǔn)的指標(biāo),在TTR軟件包中實(shí)現(xiàn)。
它的數(shù)值在0到100之間,較高(較低)的數(shù)值表示市場最近在上升(下降)。
# RSI 策略
pos <- long + short
pos <- Lag(pos); pos[is.na(pos)] <- 0
return(pos)
}
樣本內(nèi)和樣本外回測
resultsIn <- backtest(prices[startIn:endIn,],params) # in-sampleresultsOut <- backtest(prices[startOut:endOut,],params) # out-of-sample
繪制圖
#dev.new(width=10, height=5) # prevent elongation of plotsgrid.arrange(plot1,plot2,ncol=2)
dev.off()
從樣本內(nèi)結(jié)果中挑選參數(shù)并不總是容易的
數(shù)據(jù)集的漂移可能導(dǎo)致良好的參數(shù)組合在樣本內(nèi)和樣本外期間有所不同
點(diǎn)擊文末?“閱讀原文”
獲取全文完整代碼數(shù)據(jù)資料。
本文選自《R語言金融市場量化交易:布林帶、價差策略、RSI交易策略,回測COMP 226》。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
【視頻】量化交易陷阱和R語言改進(jìn)股票配對交易策略分析中國股市投資組合
使用R語言對S&P500股票指數(shù)進(jìn)行ARIMA + GARCH交易策略
R語言量化交易RSI策略:使用支持向量機(jī)SVM
R語言資產(chǎn)配置: 季度戰(zhàn)術(shù)資產(chǎn)配置策略研究
R語言動量交易策略分析調(diào)整后的數(shù)據(jù)
TMA三均線股票期貨高頻交易策略的R語言實(shí)現(xiàn)
R語言時間序列:ARIMA / GARCH模型的交易策略在外匯市場預(yù)測應(yīng)用
R語言基于Garch波動率預(yù)測的區(qū)制轉(zhuǎn)移交易策略
r語言多均線股票價格量化策略回測
使用R語言對S&P500股票指數(shù)進(jìn)行ARIMA + GARCH交易策略
Python基于粒子群優(yōu)化的投資組合優(yōu)化研究
R語言Fama-French三因子模型實(shí)際應(yīng)用:優(yōu)化投資組合
R語言動量和馬科維茨Markowitz投資組合(Portfolio)模型實(shí)現(xiàn)
Python計(jì)算股票投資組合的風(fēng)險價值(VaR)
R語言Markowitz馬克維茨投資組合理論分析和可視化
R語言中的廣義線性模型(GLM)和廣義相加模型(GAM):多元(平滑)回歸分PYTHON用RNN神經(jīng)網(wǎng)絡(luò)LSTM優(yōu)化EMD經(jīng)驗(yàn)?zāi)B(tài)分解交易策略分析股票價格MACD
R語言深度學(xué)習(xí):用keras神經(jīng)網(wǎng)絡(luò)回歸模型預(yù)測時間序列數(shù)據(jù)
【視頻】CNN(卷積神經(jīng)網(wǎng)絡(luò))模型以及R語言實(shí)現(xiàn)回歸數(shù)據(jù)分析
Python TensorFlow循環(huán)神經(jīng)網(wǎng)絡(luò)RNN-LSTM神經(jīng)網(wǎng)絡(luò)預(yù)測股票市場價格時間序列和MSE評估準(zhǔn)確性
數(shù)據(jù)分享|PYTHON用KERAS的LSTM神經(jīng)網(wǎng)絡(luò)進(jìn)行時間序列預(yù)測天然氣價格例子
Python對商店數(shù)據(jù)進(jìn)行l(wèi)stm和xgboost銷售量時間序列建模預(yù)測分析
Matlab用深度學(xué)習(xí)長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對文本數(shù)據(jù)進(jìn)行分類
RNN循環(huán)神經(jīng)網(wǎng)絡(luò) 、LSTM長短期記憶網(wǎng)絡(luò)實(shí)現(xiàn)時間序列長期利率預(yù)測
結(jié)合新冠疫情COVID-19股票價格預(yù)測:ARIMA,KNN和神經(jīng)網(wǎng)絡(luò)時間序列分析
深度學(xué)習(xí):Keras使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類分析新聞組數(shù)據(jù)
用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類預(yù)測銀行客戶流失模型
PYTHON用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)的參數(shù)優(yōu)化方法預(yù)測時間序列洗發(fā)水銷售數(shù)據(jù)
Python用Keras神經(jīng)網(wǎng)絡(luò)序列模型回歸擬合預(yù)測、準(zhǔn)確度檢查和結(jié)果可視化
Python用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)對不穩(wěn)定降雨量時間序列進(jìn)行預(yù)測分析
R語言中的神經(jīng)網(wǎng)絡(luò)預(yù)測時間序列:多層感知器(MLP)和極限學(xué)習(xí)機(jī)(ELM)數(shù)據(jù)分析報告
R語言深度學(xué)習(xí):用keras神經(jīng)網(wǎng)絡(luò)回歸模型預(yù)測時間序列數(shù)據(jù)
Matlab用深度學(xué)習(xí)長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對文本數(shù)據(jù)進(jìn)行分類
R語言KERAS深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)分類識別手寫數(shù)字圖像數(shù)據(jù)(MNIST)
MATLAB中用BP神經(jīng)網(wǎng)絡(luò)預(yù)測人體脂肪百分比數(shù)據(jù)
Python中用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類預(yù)測銀行客戶流失模型
R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析
SAS使用鳶尾花(iris)數(shù)據(jù)集訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)(ANN)模型
【視頻】R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析
Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類
R語言用神經(jīng)網(wǎng)絡(luò)改進(jìn)Nelson-Siegel模型擬合收益率曲線分析
R語言基于遞歸神經(jīng)網(wǎng)絡(luò)RNN的溫度時間序列預(yù)測
R語言神經(jīng)網(wǎng)絡(luò)模型預(yù)測車輛數(shù)量時間序列
R語言中的BP神經(jīng)網(wǎng)絡(luò)模型分析學(xué)生成績
matlab使用長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對序列數(shù)據(jù)進(jìn)行分類
R語言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測和結(jié)果可視化
用R語言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實(shí)例
使用PYTHON中KERAS的LSTM遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行時間序列預(yù)測
python用于NLP的seq2seq模型實(shí)例:用Keras實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯
用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類