R:动量策略

szcode=read.table("clipboard",header=T)#上证代码
sccode=read.table("clipboard",header=T)#深证代码
zxcode=read.table("clipboard",header=T)#中小代码

code=paste0(szcode[,1],".ss")
Z=paste0("A",1:length(code))
price=list()
for(i in 1:length(code)){
  name=code[i]
  from=szcode[i,3]
  setSymbolLookup(STOCK=list(name=name,src='yahoo'))
  getSymbols("STOCK",from=from,to="2020-01-01")
  price[[i]]=monthlyReturn(Cl(na.approx(STOCK)))
}

for(i in 57:length(code)){
  name=code[i]
  from=szcode[i,3]
  setSymbolLookup(STOCK=list(name=name,src='yahoo'))
  getSymbols("STOCK",from=from,to="2020-01-01")
  price[[i-1]]=monthlyReturn(Cl(na.approx(STOCK)))
}

for(i in 499:length(code)){
  name=code[i]
  from=szcode[i,3]
  setSymbolLookup(STOCK=list(name=name,src='yahoo'))
  getSymbols("STOCK",from=from,to="2020-01-01")
  price[[i-1]]=monthlyReturn(Cl(na.approx(STOCK)))
}

for(i in 500:length(code)){
  name=code[i]
  from=szcode[i,3]
  setSymbolLookup(STOCK=list(name=name,src='yahoo'))
  getSymbols("STOCK",from=from,to="2020-01-01")
  price[[i-2]]=monthlyReturn(Cl(na.approx(STOCK)))
}

for(i in 500:length(code)){
  name=code[i]
  from=szcode[i,3]
  setSymbolLookup(STOCK=list(name=name,src='yahoo'))
  getSymbols("STOCK",from=from,to="2020-01-01")
  price[[i-2]]=monthlyReturn(Cl(na.approx(STOCK)))
}

for(i in 807:length(code)){
  name=code[i]
  from=szcode[i,3]
  setSymbolLookup(STOCK=list(name=name,src='yahoo'))
  getSymbols("STOCK",from=from,to="2020-01-01")
  price[[i-3]]=monthlyReturn(Cl(na.approx(STOCK)))
}

for(i in 957:length(code)){
  name=code[i]
  from=szcode[i,3]
  setSymbolLookup(STOCK=list(name=name,src='yahoo'))
  getSymbols("STOCK",from=from,to="2020-01-01")
  price[[i-2]]=monthlyReturn(Cl(na.approx(STOCK)))
}

for(i in 1123:length(code)){
  name=code[i]
  from=szcode[i,3]
  setSymbolLookup(STOCK=list(name=name,src='yahoo'))
  getSymbols("STOCK",from=from,to="2020-01-01")
  price[[i-3]]=monthlyReturn(Cl(na.approx(STOCK)))
}

for(i in 1370:length(code)){
  name=code[i]
  from=szcode[i,3]
  setSymbolLookup(STOCK=list(name=name,src='yahoo'))
  getSymbols("STOCK",from=from,to="2020-01-01")
  price[[i-8]]=monthlyReturn(Cl(na.approx(STOCK)))
}

p=price[[1]]
for(i in 2:length(price)){
  a=price[[i]]
  p=merge.xts(p,a,join="outer")
}

pp=tk_tbl(p)
ppp=tk_xts(pp,silent=T)
m=pp %>%
  tq_mutate(mutate_fun = rollapply,
            width      = 10,
            FUN        = sum,
            by.column  = TRUE,
            col_rename = paste0("history",1:1430))
mm=tk_xts(m,silent=T)
history=mm[,1431:2860]
return=mm[,1:1430]
nh=history-return
x=merge.xts(history,nh,type="outer")
xx=as.matrix(x)
h=na.approx(x[,1:1430])
r=na.approx(x[,1431:2860])
hh=na.approx(xx[,1:1430])
rr=na.approx(xx[,1431:2860])
for(i in 1:nrow(hh)){
  m=matrix(nrow=2,ncol=ncol(hh))
  m[1,]=rr[i,]
  m[2,]=hh[i,]
  mm=t(m)
  mm=tk_tbl(mm)
  colnames(mm)=c("returns","historyr")
  assign(paste0("perform",i),arrange(mm,desc(historyr)))
}

avr=vector(length=196)
for(j in 1:196){
  cr=0
  num=0
  t=get(paste0("perform",j))
  t=as.matrix(t)
  numh=1430-sum(is.na(t[,2]))
  numr=1430-sum(is.na(t[,1]))
  for(i in 1:numh){
    if(t[i,2]>quantile(t[1:numh,2],0.9)){
      cr=cr+t[j,1]
      num=num+1
    }
  }
  avr[j]=cr/num
}

avr=vector(length=322)
for(j in 1:322){
  cr=0
  num=0
  t=get(paste0("perform",j))
  t=as.matrix(t)
  numh=1430-sum(is.na(t[,2]))
  numr=1430-sum(is.na(t[,1]))
  for(i in 1:numh){
    if(t[i,2]>quantile(t[1:numh,2],0.9)){
      cr=cr+t[j,1]
      num=num+1
    }
    else{0}
  }
  avr[j]=cr/num
}

  

猜你喜欢

转载自www.cnblogs.com/amosding/p/12404585.html
今日推荐