利用R语言编写量化投资策略Word文件下载.docx

上传人:b****5 文档编号:16246761 上传时间:2022-11-21 格式:DOCX 页数:12 大小:19KB
下载 相关 举报
利用R语言编写量化投资策略Word文件下载.docx_第1页
第1页 / 共12页
利用R语言编写量化投资策略Word文件下载.docx_第2页
第2页 / 共12页
利用R语言编写量化投资策略Word文件下载.docx_第3页
第3页 / 共12页
利用R语言编写量化投资策略Word文件下载.docx_第4页
第4页 / 共12页
利用R语言编写量化投资策略Word文件下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

利用R语言编写量化投资策略Word文件下载.docx

《利用R语言编写量化投资策略Word文件下载.docx》由会员分享,可在线阅读,更多相关《利用R语言编写量化投资策略Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。

利用R语言编写量化投资策略Word文件下载.docx

par(mfcol=c(2,1))

acf(lgret,lag=30)

pacf(lgret,lag=30)

#为了验证该收益率序列有没有序列相关性,使用Ljung-Box检验,结果对应的P值0.024,

#在1%的显著水平下,拒绝该股票日收益率没有显著前后相关性的这一原假设。

#但在5%的显著水平下,无法拒绝该股票日收益率没有显著前后相关性的这一原假设。

Box.test(lgret,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。

43

m2<

—arima(x=lgret,order=c(4,0,0),include。

mean=F)

tratio=m2$coef/sqrt(diag(m2$var.coef))

tratio

meacf=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,1))

plot(price,xlab='

year'

,ylab='

price'

plot(dp,xlab=’year'

changes'

cprice=diff(price)

acf(cprice)

pacf(cprice)

#aic=-0。

37

m。

garch1〈-garchFit(~1+garch(1,1),data=cprice,trace=F)

summary(m。

garch1)

#aic=-0.62

garch2〈-garchFit(~arma(6,0)+garch(1,1),data=cprice,trace=F,ininclude。

mean=F,

 

cond.dist=”std"

summary(m.garch2)

#aic=-0.60

m.garch3〈-garchFit(~arma(2,0)+garch(1,1),data=cprice,trace=F,ininclude。

cond.dist="

std”)

garch3)

#aic=—0.596

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=backtestGarch(cprice,714,2,inc.mean=F,cdist="

sstd"

source(”backtest。

R"

M2AF=backtest(m2,cprice,714,2,inc。

#ArchTest(coredata(ret))

################################################################################

#计算VaR

mgarch1〈—ugarchspec(variance.model=list(garchOrder=c(1,1)),

mean.model=list(armaOrder=c(0,0)))

mgarch1_fit<

-ugarchfit(spec=mgarch1,data=cprice)

mgarch1_fit

mgarch1_roll<

—ugarchroll(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)

#生成PLOT

cprice_var〈-zoo(mgarch1_roll@forecast$VaR[,1])

index(cprice_var)〈—as.yearmon(rownames(mgarch1_roll@forecast$VaR))

cprice_actual〈-zoo(mgarch1_roll@forecast$VaR[,2])

index(cprice_var)<

—as.yearmon(rownames(mgarch1_roll@forecast$VaR))

plot(cprice_actual,type="

b"

,main=”99%dayVarbacktesting"

xlab="

Date"

ylab=”Return/VaRinpercent”)

lines(cprice_var,col="

red"

legend(”topright”,inset=。

05,c(”MHXXreturn"

”VaR”),col=c(”black"

,"

red”),lty=c(1,1))

mgarch1_fcst〈—ugarchforecast(mgarch1_fit,n。

ahead=6)

mgarch1_fcst

ret.fcst〈--qnorm(0.95)*mgarch1_fcst@forecast$sigmaFor

ret.fcst

chartSeries(MHXX,name=”中国民航信息”,TA=NULL)

addBBands()

#addMACD()

################################量化投资策略####################################

######通道突破######

#通道突破函数==================================================================

bband。

bk。

sim<

—function(stk。

prc.xts,k=20,p=1。

65,q=0.8){ 

#q是交易倍数,表示资金的q分用于交易

stk。

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<

—c(rep(1e4,k),0) 

#资产价值=股票市值+现金部位

#Sim--——

for(tink:

End){

prc.pre〈-stk。

prc[(t—k):

t] 

MA[t]〈-mean(stk。

prc.pre)

std[t]<

-sd(stk。

pre)

u。

bound[t]<

—MA[t]+p*std[t] 

#布林带上界

signal[t]〈—0 

#默认不交易

if(stk.prc[t]>

 

bound[t])signal[t]= 

#当股票价格超出布林上界时,buy

if(stk.prc[t—1]〉MA[t—1]&

stk.prc[t]〈=MA[t])signal[t]=-1 

if(stk.prc[t—1]〈MA[t-1]&stk。

prc[t]〉=MA[t])signal[t]=—1

#卖的情况

trd。

state[t]〈—trd。

state[t-1] 

cash[t]〈-cash[t—1]

share[t]〈-share[t—1]

value[t]<

-value[t-1]

#更新交易状态、持股数目、现金金额

if(trd.state[t-1]==0&signal[t]== 

1){ 

trd.state[t]<

—1

share[t]〈—(q*cash[t—1])/stk。

prc[t]

cash[t]〈—cash[t—1]—share[t]*stk。

prc[t]

}

if(trd.state[t—1]==1&

signal[t]==—1){

trd.state[t]<

-0

share[t]<

cash[t]<

—cash[t-1]+share[t-1]*stk.prc[t]

value[t]〈—cash[t]+share[t]*stk。

res〈—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)

###############################均线系统策略###################################

## 

双均线交叉策略 

mov.avg.sim<

—function(stk.prc。

xts,k=50,n=7,p=1.05,q=1。

10,m=0.8){

stk.prc<

—coredata(stk。

xts)

Timeline〈—index(stk。

prc.xts)

End〈—length(stk。

prc)

MA。

<

—SMA(stk.prc,5) 

#计算5日均线

20〈—SMA(stk。

prc,20) 

#计算20日均线

signal 

〈-c(rep(0,k),0)

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(tink:

signal[t]〈—0

if(sum(MA。

5[(t-n):

(t-1)]〉MA.20[(t—n):

(t-1)])==n 

&stk。

prc[t-1]/MA.20[t—1]〉p) 

signal[t]<

-1

if(MA。

5[t—1]>

=MA.20[t—1]&

MA.5[t]〈=MA。

20[t])signal[t]〈-—1

if(stk.prc[t—1]/MA。

20[t-1]>

q)signal[t]〈--1

state[t]〈-trd。

state[t-1]

cash[t] 

〈-cash[t—1]

share[t]<

—share[t—1]

value[t]〈—value[t-1]

if(trd.state[t—1]==0&signal[t]== 

1){ 

state[t]<

—(m*cash[t-1])/stk.prc[t]

cash[t]〈-cash[t—1]—share[t]*stk。

prc[t]

if(trd.state[t-1]==1&signal[t]==-1){

trd.state[t]<

cash[t]<

—cash[t—1]+share[t—1]*stk.prc[t]

value[t]〈-cash[t]+share[t]*stk.prc[t]

res〈—xts(cbind(stk。

prc,MA。

5,MA.20,signal,trd.state,share,cash,value),

order。

by=Timeline)

-c(”prc"

”MA。

5”,"

20"

signal"

 

"

share”,”cash"

#双均线交叉策略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。

xts,k=50,m=0.8){

-coredata(stk.prc.xts)

Timeline〈-index(stk。

End<

-length(stk。

macd.line〈—MACD(stk。

prc,nFast=12,nSlow=26,nSig=9)[,1]

signal.line〈-MACD(stk。

prc,nFast=12,nSlow=26,nSig=9)[,2]

-c(rep(0,k),0)

-c(rep(0,k),0) 

〈—c(rep(1e4,k),0)

-c(rep(1e4,k),0)

#Sim-——-—

for(tin(k+1):

signal[t]<

—0

if(macd.line[t-1]<

=signal.line[t—1]&

macd.line[t]>

signal.line[t]) 

if(macd.line[t—1]〉=signal。

line[t—1]&

macd。

line[t]<

signal。

line[t]) 

signal[t]〈—-1

state[t—1]

〈—cash[t—1]

-share[t-1]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

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

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