这是一个动量效应的程序,运行后的结果与大多数已有的研究结果有很大的不同,然而又感觉自己的程序没错,想让大神看看问题出在哪了?
附上程序与 数据。数据是若干只股票的近三年的周收益率。
#这是我自己对动量效应的研究的构思
#第一步是读取数据,数据的排列方式是以日期(时间段)为行,股票类型为列,这样的排列刚好适用于动量效应的研
#究。首先是选定一个起始点,从这一个起始点开始计算之前一段时间K内的每只股票的累计收益率,然后选取最好的10%
#与最差的10%,而这种操作在这个程序上我是先用suma这个向量存储每一只股票在过去K段时间内的累计收益率,然后
#用y<-quantile(suma,c(0.1,0.9),na.rm=T)来选取收益率排序为10%与90%的分割点,这样小于10%的就
#是最差的10%,高于90%的就是最好的10%。而用lo=suma<=y[1]来提取出股票,再用a<-data[(i+k):(i+k+j-1), lo]
#表示最差10%股票持有J期后的收益率表现,而sum(a)即是这些股票的累积收益率之和。同样lg=suma>=y[2]
#即最好的10%的股票也是类似处理的。
data=read.csv("周收益率.csv")
col=ncol(data) #计算数据的列数
nr=nrow(data) #计算行数
#创建一个动量函数,通过输入不同的k,j来计算动量收益与显著性t值
mom<-function(k,j){
#用一个列表来装载各种数据
L<-list()
#新建几个向量,用来存储每个(k,j)组合每次计算的赢家收益率b_ret,与输家收益率a_ret,以及动量收益c_ret
a_ret<-vector(length=nr-k-j+1)
b_ret<-vector(length=nr-k-j+1)
c_ret<-vector(length=nr-k-j+1)
v=1
for(i in 1:(nr-k-j+1)){ #表示每个(k,j)组合要计算(nr-k-j+1)次动量收益
#(参考点要移动(nr-k-j+1)次)
suma<-vector(length=(col)) #存储参考点之前K期的每支股票累计收益率
for(x in 1:col){
suma[x]<-sum(data[i:(i+k-1),x],na.rm=T)
}
y<-quantile(suma,c(0.1,0.9),na.rm=T) #计算上10%点与下10%点
lo=suma<=y[1] #选取(锁定)下10%的股票
lg=suma>=y[2] #选取(锁定)上10%的股票
a<-data[(i+k):(i+k+j-1), lo] #下10%的股票持有期的累计收益率
b<-data[(i+k):(i+k+j-1), lg] #上10%的股票持有期的累计收益率
sum_a=sum(a)
sum_b=sum(b)
#等权重平均后的收益率
a_ret[v]<-sum_a/(col/10)
b_ret[v]<-sum_b/(col/10)
v=v+1
}
c_ret=b_ret-a_ret #所有参照点的动量收益向量
meas=mean(c_ret,na.rm=T) #动量效应收益
sds=sd(c_ret,na.rm=T) #样本方差
t<-meas/(sds/sqrt(nr-k-j)) #计算t值
#存储各类值
L$t<-t
L$m<-meas
L$sd<-sds
return(L)
}
若令 t<-mom(8,2) 则8 为动量效应的形成期,2为动量效应的持有期。算出的结果无论(k,j)的组合为什么总是为翻转效应,且大多数显著,很是困惑!!
希望大神来解答困惑啊!!十万火急!