原文链接:http://tecdat.cn/?p=17526
原文出处:拓端数据部落公众号
本文提出了一种算法,能够依据市场波动性在均值回归和趋势追随策略之间进行切换。钻研了两种模型:一种应用历史稳定率,另一种应用Garch(1,1)稳定率预测。均值回归策略应用RSI(2)建模:RSI(2)时为Long,否则为Short。趋势跟踪策略以SMA 50/200穿插建模:当SMA(50)> SMA(200)时为Long,否则为Short。
以下代码从Yahoo Fiance加载历史价格,并比拟买入和持有,均值回归和趋势跟踪策略的成果:
#***************************************************************** # 加载历史数据 #****************************************************************** load.packages('quantmod') tickers = 'SPY' data <- new.env() getSymbols(tickers, src = 'yahoo', from = '1970-01-01', env = data, auto.assign = T) #***************************************************************** # 代码策略 #****************************************************************** prices = d # 购买并持有 data$weight\[ # 均值回归(MR)策略 rsi2 = bt.apply.ma # 趋势跟踪(TF)策略 sma.short = apply.matrix(prices, SMA, 50) sma.long = apply.matrix(prices, SMA, 200) data$weight\[\] = NA #***************************************************************** # 创立报告 #****************************************************************** plotb
接下来,让咱们创立一个基于历史市场波动性在均值回归和趋势追随策略之间切换的策略。
#*****************************************************************#依据历史市场稳定状况进行区制转移#应用252天的回溯期按百分比对以后稳定率进行分类#****************************************************************** # #区制转移历史data$weight\[\] = NA data$weight\[\] = iif(vol.rank > 0.5, iif(rsi2 <l=capital, trade.summary=T) #*****************************************************************#创立报告#******************************************************************report(regime, mr)
接下来,咱们创立一个GARCH(1,1)稳定率预测。
有一些R包能够适宜GARCH模型。我将思考tseries软件包中的garch函数和fGarch软件包中的garchFit函数。tseries软件包中的garch函数速度很快,但并不总能找到解决方案。fGarch软件包中的garchFit函数速度较慢,但收敛得更加统一。为了演示garch函数和garchFit函数之间的速度差别,我创立了一个简略的基准测试:
#*****************************************************************# 基准化Garch算法#******************************************************************temp = garchSim(n=252) test1 <- function() { fit1=garch(temp, order = c(1, 1), control = garch.control(trace = F))}test2 <- function() { fit2=garchFit(~ garch(1,1), data = temp, include.mean=FALSE, trace=F)} benchmark( test1(), test2(), columns=)
garchFit函数均匀比garch函数慢6倍。因而,要预测稳定率,我将尝试在找到解决方案时应用garch函数,否则将尝试应用garchFit函数。
#*****************************************************************#应用Garch预测稳定率#来自tseries的garch速度很快,然而并不能始终收敛#fGarch的garchFit速度较慢,但收敛统一#******************************************************************load.packages('tseries,fGarch') # Sigma\[t\]^2 = w + a* Sigma\[t-1\]^2 + b*r\[t-1\]^2garch.predict.one.day <- function(fit, r1) { hl = tail( fitted(fit)\[,1\] ,1) # 与预测雷同( fit, n.ahead=1, doplot=F)\[3\]garchFit.predict.one.day <- funct garch.vol = NA * hist.volfor( i in (252+1):nperiods err ) FALSE, warning=function( warn ) FALSE ) if( !is.logical( fit garch(1,1), data = temp, include.mean=FALSE, trace=F), error=function( err ) FALSE, warning=function( warn ) FALSE ) if( !is.logical(
当初,让咱们创立一个基于GARCH(1,1)稳定率预测在均值回归和趋势跟踪策略之间切换的策略。
#*****************************************************************# 应用Garch进行区制转移#****************************************************************** vol.rank = percent.rank(SMA(percent.rank(garch.v# 区制转移Garchdata$weight\[\] = NA data$weight\[\] = iif(vol.rank > 0.5, iif(rsi2 < 50, 1, -1), iif(sma.short > sma.l#*****************************************************************#创立报告#******************************************************************report(regime.switching)
应用GARCH(1,1)稳定率预测的转换策略要比应用历史稳定率的策略稍好。
您能够采纳多种不同的办法将预测合并到模型和交易策略中。R有十分丰盛的软件包集,用于建模和预测工夫序列。
最受欢迎的见解
1.HAR-RV-J与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频稳定率
2.R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长回归的HAR-RV模型预测GDP增长")
3.稳定率的实现:ARCH模型与HAR-RV模型
4.R语言ARMA-EGARCH模型、集成预测算法对SPX理论稳定率进行预测
5.GARCH(1,1),MA以及历史模拟法的VaR比拟
6.R语言多元COPULA GARCH 模型工夫序列预测
7.R语言基于ARMA-GARCH过程的VAR拟合和预测
8.matlab预测ARMA-GARCH 条件均值和方差模型
9.R语言对S&P500股票指数进行ARIMA + GARCH交易策略