ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:17.67KB ,
资源ID:10176165      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10176165.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用R语言编写量化投资策略.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用R语言编写量化投资策略.docx

1、利用R语言编写量化投资策略利用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=yahoo)getSymbols(MHXX,from=2013-01-01,to

2、=2015-09-30)#显示K线图,如图明显发现股价呈现递增趋势,价格序列是非平稳的。chartSeries(MHXX)#考虑对数收益率#获取收盘价cp = MHXX,4lgcp=log(MHXX,4)#tdx =c(1:456)/365+2014#计算日收益率ret=dailyReturn(MHXX)chartSeries(ret,theme=white,TA=NULL)#plot(tdx,cp,xlab=year,ylab=close price,type=l)#计算对数收益率,如图课件,股价在15年左右有一个跳跃,15年第二季度的股价增长导致#之后股价有较大的下降,这些特征给后续的分析

3、带来一些较大的异常值lgret = log(ret+1)chartSeries(lgret,theme=white,TA=NULL)#由ACF和PACF图可以看出,该股1股价的日收益率序列即使存在某种相关性,该自相关性也#很小par(mfcol=c(2,1)acf(lgret,lag=30)pacf(lgret,lag=30)#为了验证该收益率序列有没有序列相关性,使用Ljung-Box检验,结果对应的P值0.024,#在1%的显著水平下,拒绝该股票日收益率没有显著前后相关性的这一原假设。#但在5%的显著水平下,无法拒绝该股票日收益率没有显著前后相关性的这一原假设。Box.test(lgret

4、,lag=20,type=Ljung)#m1 - auto.arima(lgret,stationary=TRUE,seasonal=FALSE,ic=aic)#鉴于该股票对数收益率序列的自相关性并不强,所以建立的ARIMA模型可能适用性不高。#对于对数收益率序列,单样本的t检验结果的t比为1.0625,p值为0.2884,表明该序列不是#显著异于零的,同时此处根据ACF图所示,在4阶有轻微的超越标准差线,#因此取用AR(5)模型拟合,aic=-2987.43m2 - arima(x=lgret,order=c(4,0,0),include.mean=F)tratio=m2$coef/sqrt

5、(diag(m2$var.coef)tratiomeacf=eacf(lgret,6,12)print(meacf$eacf,digits=2)#残差检验并表示改模型可能不是充分的tsdiag(m2,gof=20)m3 -auto.arima(ret,stationary = TRUE,seasonal = FALSE,ic=aic)m3#由上述可知,对于价格变化的分析,纯ARMA模型是不充分的,一方面ARMA模型不能处理#波动率聚集,另一方面,ARMA-GARCH模型能充分处理这些数据的复杂性,#并能提高样本外预测price=ts(cp)dp=ts(diff(cp)par(mfcol=c(2

6、,1)plot(price,xlab=year,ylab=price)plot(dp,xlab=year,ylab=changes)cprice=diff(price)par(mfcol=c(2,1)acf(cprice)pacf(cprice)#aic=-0.37m.garch1-garchFit(1+garch(1,1),data=cprice,trace=F)summary(m.garch1)#aic=-0.62m.garch2-garchFit(arma(6,0)+garch(1,1),data=cprice,trace=F,ininclude.mean = F,cond.dist =

7、 std)summary(m.garch2)#aic=-0.60m.garch3-garchFit(arma(2,0)+garch(1,1),data=cprice,trace=F,ininclude.mean = F,cond.dist = std)summary(m.garch3)#aic=-0.596m.garch4-garchFit(arma(1,0)+garch(1,1),data=cprice,trace=F,ininclude.mean = F,cond.dist = std)summary(m.garch4)#回测检验source(backtestGarch.R)M2F=bac

8、ktestGarch(cprice,714,2,inc.mean=F,cdist=sstd)source(backtest.R)M2AF=backtest(m2,cprice,714,2,inc.mean=F)#ArchTest(coredata(ret)#计算VaRmgarch1-ugarchspec(variance.model=list(garchOrder=c(1,1),mean.model=list(armaOrder=c(0,0)mgarch1_fit-ugarchfit(spec=mgarch1,data=cprice)mgarch1_fitmgarch1_roll-ugarch

9、roll(mgarch1,cprice,n.start=120,refit.every=1,refit.window = moving,solver=hybrid,calculate.VaR = TRUE,VaR.alpha = 0.01,keep.coef = TRUE)report(mgarch1_roll,type=VaR,VaR.alpha=0.01,conf.level=0.99)#生成PLOTcprice_var-zoo(mgarch1_rollforecast$VaR,1)index(cprice_var)-as.yearmon(rownames(mgarch1_rollfore

10、cast$VaR)cprice_actual-zoo(mgarch1_rollforecast$VaR,2)index(cprice_var)-as.yearmon(rownames(mgarch1_rollforecast$VaR)plot(cprice_actual,type=b,main=99% day Var backtesting,xlab=Date,ylab=Return /VaR in percent)lines(cprice_var,col=red)legend(topright,inset=.05,c(MHXX return,VaR),col=c(black,red),lty

11、=c(1,1)mgarch1_fcst - ugarchforecast(mgarch1_fit, n.ahead = 6)mgarch1_fcstret.fcst - - qnorm(0.95) * mgarch1_fcst forecast$sigmaForret.fcstchartSeries(MHXX,name=中国民航信息,TA=NULL)addBBands()#addMACD()#量化投资策略# 通道突破 #通道突破函数=bband.bk.sim - function(stk.prc.xts, k=20, p=1.65, q=0.8) #q是交易倍数,表示资金的q分用于交易stk.

12、prc - coredata(stk.prc.xts) #把主要数据取出Timeline - index(stk.prc.xts) End - length(stk.prc.xts)MA - c( rep(0, k), 0) std - c( rep(0, k), 0) u.bound - c( rep(0, k), 0)signal - c( rep(0, k), 0) #交易信号 trd.state - c( rep(0, k), 0) #记录买卖状态share - c( rep(0, k), 0) #记录持股份数cash - c( rep(1e4, k), 0) #现金部位 value

13、- c( rep(1e4, k), 0) #资产价值=股票市值+现金部位# Sim -for( t in k:End )stk.prc.pre - stk.prc(t-k):t MAt - mean( stk.prc.pre )stdt - sd( stk.prc.pre )u.boundt - MAt + p * stdt #布林带上界signalt u.boundt ) signalt = 1 #当股票价格超出布林上界时,buyif( stk.prct-1 MAt-1 & stk.prct = MAt ) signalt = -1 if( stk.prct-1 = MAt ) signal

14、t = -1#卖的情况trd.statet - trd.statet-1 casht - casht-1sharet - sharet-1valuet - valuet-1#更新交易状态、持股数目、现金金额if( trd.statet-1 = 0 & signalt = 1 ) trd.statet - 1sharet - ( q * casht-1 ) / stk.prctcasht - casht-1 - sharet*stk.prctif( trd.statet-1 = 1 & signalt = -1 )trd.statet - 0sharet - 0casht - casht-1 +

15、 sharet-1*stk.prctvaluet - casht + sharet*stk.prctres - cbind(stk.prc, signal, trd.state, share, cash, value)names(res) - c(prc, signal, trd.state, share, cash, value)return(res)#通道突破函数END=res - bband.bk.sim(cp)head(res)tail(res)plot(res,6,type=l,col=darkred,lty=1,lwd=2)# 通道(end)# 均线系统策略 # 双均线交叉策略mo

16、v.avg.sim - function(stk.prc.xts, k=50, n=7, p=1.05, q=1.10, m=0.8)stk.prc - coredata(stk.prc.xts)Timeline - index(stk.prc.xts)End - length(stk.prc)MA.5 - SMA(stk.prc, 5) #计算5日均线MA.20 - SMA(stk.prc, 20) #计算20日均线signal - c( rep(0, k), 0)trd.state - c( rep(0, k), 0)share - c( rep(0, k), 0)cash - c( re

17、p(1e4, k), 0)value - c( rep(1e4, k), 0)# Sim -for( t in k:End )signalt MA.20(t-n):(t-1) = n& stk.prct-1/MA.20t-1 p) signalt = MA.20t-1 & MA.5t = MA.20t) signalt q ) signalt - -1trd.statet - trd.statet-1casht - casht-1sharet - sharet-1valuet - valuet-1if( trd.statet-1 = 0 & signalt = 1 ) trd.statet -

18、 1sharet - ( m * casht-1 ) / stk.prctcasht - casht-1 - sharet*stk.prctif( trd.statet-1 = 1 & signalt = -1 )trd.statet - 0sharet - 0casht - casht-1 + sharet-1*stk.prctvaluet - casht + sharet*stk.prctres - xts( cbind(stk.prc, MA.5, MA.20, signal, trd.state, share, cash, value),order.by=Timeline)names(

19、res) - c(prc, MA.5, MA.20,signal, trd.state,share, cash, value)head(res)return(res)#双均线交叉策略END=res.mov - mov.avg.sim(cp)head(res.mov)tail(res.mov)plot(res.mov,6,type=l,lty=1,lwd=2)# MACD(begin)MACD.sim - function(stk.prc.xts, k=50, m=0.8)stk.prc - coredata(stk.prc.xts)Timeline - index(stk.prc.xts)En

20、d - length(stk.prc)macd.line - MACD(stk.prc, nFast=12, nSlow=26, nSig=9), 1signal.line - MACD(stk.prc, nFast=12, nSlow=26, nSig=9), 2signal - c( rep(0, k), 0)trd.state - c( rep(0, k), 0)share - c( rep(0, k), 0)cash - c( rep(1e4, k), 0)value - c( rep(1e4, k), 0)# Sim -for( t in (k+1):End )signalt - 0if( macd.linet-1 signal.linet) signalt = signal.linet-1 & macd.linet signal.linet) signalt - -1trd.statet - trd.statet-1casht - casht-1sharet

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1