library(Tushare)
library(tidyverse)
library(quantmod)
library(stringr)
#获取数据
pro<-pro_api(token="***************************************************************")
df1 = pro(api_name="fut_settle",trade_date='20210827')
df2 = pro(api_name="fut_settle",trade_date='20210927')
d1=df1[,1:3]
d2=df2[,1:3]
#将不同月份的数据根据合约一一对应,并计算动量
d=nrow(d1)
dd=nrow(d2)
name<-c()
weekly<-c()
m=1
for(i in 1:d){
for(j in 1:dd){
if(d1[i,1]==d2[j,1]){
weeklymom=(d2[j,3]-d1[i,3])/d1[i,3]
name[m]<-d1[i,1]
weekly[m]<-weeklymom
m=m+1
}
}
}
#依据动量进行排序
wmom=cbind.data.frame(name,weekly)
wmom=arrange(wmom,desc(weekly))
#计算需做多的前10%,需做空的后10%
long<-c()
short<-c()
l=1
s=1
n=nrow(wmom)
for(i in 1:n){
d=as.numeric(wmom[i,2])
if(d>quantile(as.numeric(wmom[,2]),0.9)){
long[l]=wmom[i,1]
l=l+1
}
else if(d<quantile(as.numeric(wmom[,2]),0.1)){
short[s]=wmom[i,1]
s=s+1
}
}
print(long)
print(short)
此处也可不依据动量策略的经典方法,做多前10%,做空后10%,可以构建依据市场调整收益(market-adjusted returns)作为权重进行投资,这也是我下一步要做的。(ID:446541)
前几天尝试了郑商所杯,用的是同样的思想,但没能用到这段代码(今天才完善完),收益还好,不过在后半段有点动量崩溃。
代码有的部分效率不高,我会继续改进的,前几天跑另一个程序,差点把电池跑废了,我的代码效率是有多低。