资源描述:
《利用R语言编写量化投资策略》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、利用R语言编写量化投资策略选取一股票,利用R语言进行分析,同时构建通道突破,双均线交叉和MACD策略,进行回测。library(xts)library(xtsExtra)library(quantmod)library(FinTS)library(forecast)library(TSA)library(TTR)library(fGarch)library(rugarch)library(tseries)setSymbolLookup(MHXX=list(name='0696.hk,/src=,
2、yahoo'))getSymbols(,,MHXXHzfrom=n2013-01-01;to=,,2015-09-30u)#显示K线图,如图明显发现股价呈现递增趋势,价格序列是非平稳的。chartSeries(MHXX)#考虑对数收益率#获取收盘价cp=MHXX[,4]lgcp=log(MHXX[,4])#tdx=c(l:456)/365+2014#计算日收益率ret=dailyReturn(MHXX)chartSeries(ret/theme=nwhite"/TA=NULL)#plot(tdx
3、/cp/xlab="year",ylab="closeprice",type=T)#计算对数收益率,如图课件,股价在15年左右有一个跳跃,15年第二季度的股价增长导致#之后股价有较大的下降,这些特征给后续的分析带来一些较大的异常值Igret=log(ret+l)chartSeries(lgret/theme=,,whiten/TA=NULL)#由ACF和PACF图可以看出,该股1股价的日收益率序列即使存在某种相关性,该自相关性也#很小par(mfcol=c(2,l))acf(lgret,lag=
4、30)pacf(lgret,lag=30)#为了验证该收益率序列有没有序列相关性使用Ljung-Box检验,结果对应的P值0.024,#在1%的显著水平下,拒绝该股票日收益率没有显著前后相关性的这一原假设。#但在5%的显著水平下”无法拒绝该股票日收益率没有显著前后相关性的这一原假设。Box.test(lgret,lag=20,type='Ljung')#########################################################################
5、#####ml<-auto.arima(lgret,stationary二TRUE,seasonal二FALSE,ic二"aic")#鉴于该股票对数收益率序列的自相关性并不强,所以建立的ARIMA模型可能适用性不高。#对于对数收益率序列,单样本的t检验结果的t比为1.0625,p值为0.2884,表明该序列不是#显著异于零的,同时此处根据ACF图所示,在4阶有轻微的超越标准差线,#因此取用AR⑸模型拟合,aic=-2987.43m2<-arima(x=lgret,order=c(4,0,0)/i
6、nclude.mean=F)tratio=m2$coef/sqrt(diag(m2$var.coef))tratiomeacf=eacf(lgret/6,12)pnnt(meacf$eacfzdigits=2)#残差检验并表示改模型可能不是充分的tsdiag(m2,gof=20)m3<-auto.arima(ret/stationary=TRUE,seasonal=FALSE,ic二"aic")m3#################################################
7、################################由上述可知,对于价格变化的分析,纯ARMA模型是不充分的,一方面ARMA模型不能处理#波动率聚集,另一方面,ARMA-GARCH模型能充分处理这些数据的复杂性,#并能提高样本外预测price=ts(cp)dp=ts(diff(cp))par(mfcol=c(2,l))plot(price/xlab=,year,,ylab=,price')plot(dp,xlab=,year'/ylab='changes')cprice=diff(p
8、rice)par(mfcol=c(2/l))acf(cprice)pacf(cprice)#aic=-0.37m.garchl<-garchFit(~l+garch(l/l)/data=cprice/trace=F)summary(m.garchl)#aic=-0.62m.garch2<-garchFit(~arma(6/0)+garch(l/l)/data=cprice/trace=F/ininclude.mean=F,cond.dist=nstdn)summary(m.garch2)#aic