Garch波动率预测的区制转移交易策略

简介: Garch波动率预测的区制转移交易策略

本文提出了一种算法,可以根据市场波动性在均值回归和趋势跟随策略之间进行切换。研究了两种模型:一种使用历史波动率,另一种使用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\]^2
garch.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.vol
for( 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
# 区制转移Garch
data$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有非常丰富的软件包集,用于建模和预测时间序列。

相关文章
|
6月前
|
机器学习/深度学习 数据可视化 数据库
R语言广义线性模型索赔频率预测:过度分散、风险暴露数和树状图可视化
R语言广义线性模型索赔频率预测:过度分散、风险暴露数和树状图可视化
|
6月前
|
存储 数据挖掘
R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列
R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列
|
6月前
Eviews基于多元回归模型OLS的CPI影响因素分析
Eviews基于多元回归模型OLS的CPI影响因素分析
|
6月前
|
算法 测试技术
R语言基于Garch波动率预测的区制转移交易策略
R语言基于Garch波动率预测的区制转移交易策略
|
6月前
|
数据挖掘 数据建模
R语言指数加权模型EWMA预测股市多变量波动率
R语言指数加权模型EWMA预测股市多变量波动率
R语言指数加权模型EWMA预测股市多变量波动率
|
6月前
|
算法 vr&ar Python
R语言隐马尔可夫模型HMM连续序列重要性重抽样CSIR估计随机波动率模型SV分析股票收益率时间序列
R语言隐马尔可夫模型HMM连续序列重要性重抽样CSIR估计随机波动率模型SV分析股票收益率时间序列
|
6月前
R语言中进行期权定价的Heston随机波动率模型
R语言中进行期权定价的Heston随机波动率模型
|
6月前
|
安全 vr&ar
R语言非线性动态回归模型ARIMAX、随机、确定性趋势时间序列预测个人消费和收入、用电量、国际游客数量
R语言非线性动态回归模型ARIMAX、随机、确定性趋势时间序列预测个人消费和收入、用电量、国际游客数量
|
6月前
|
机器学习/深度学习 数据采集 算法
【数据分享】简化的评分卡、Smote采样和随机森林的信贷违约预测
【数据分享】简化的评分卡、Smote采样和随机森林的信贷违约预测
|
6月前
|
数据挖掘
指数加权模型EWMA预测股市多变量波动率时间序列
指数加权模型EWMA预测股市多变量波动率时间序列