|
这是R语言与商业智能的 第八章代码 股票预测 运行后有问题
library(xts)
x<-xts(x=data.frame(x=1:13,y=13:1),order.by = seq(from=as.POSIXct("2012-05-23"),
length.out = 13,by="day")
)
#创建一个简单的xts对象,从外形上看xts类型的数据和普通的数据
#框很像,对于时间序列数据的索引可以采用两种方式,第二种方式是使用日期来索引
class(x)
x[1:2,]#通过数字索引
x["2012-05-23"]#日期索引
x["2012-05-29/"]#日期索引
x["2012-05-23/2012-05-29"]#日期索引
x["/2012-05-23"]#日期索引
x["2012-06"]#日期索引#/间隔时间的标记
time(x)#单独获取索引
coredata(x)#单独获取数据
#help(package="xts") #具体参见
#衡量指标 年中收益率为2.5%,间隔时间设为10天的T,要决定何时买进何时卖出
library("quantmod")
p<-0.025
k<-10
hlc<-HLC(SSEC["2012"])#等价于
#hlc<-SSEC["2012",c("SSEC.Hige","SSEC.Low","SSEC.Close")]
P<-rowMeans(hlc)
V<-matrix(NA,ncol=k,nrow=NROW(P))
for(i in 1:k){
V[,i]<-Next(Delt(P,k=i),k=i)
#Next和Delt来自quantmod包,分别为平移一个序列,计算收益率
}
T<-apply(V,1,function(x) sum(x[abs(x)>p]))
T<-xts(x=T,order.by = time(SSEC["2012"]))
T.Index<-function(data,p,k){
hlc<-HLC(data)
P<-rowMeans(hlc)
V<-matrix(NA,ncol=k,nrow=NROW(P))
for(i in 1:k){
V[,i]<-Next(Delt(P,k=i),k=i)
#Next和Delt来自quantmod包,分别为平移一个序列,计算收益率
}
T<-apply(V,1,function(x) sum(x[abs(x)>p]))
T<-xts(x=T,order.by = time(data))
return(T)
}
#使用什么样的指标来预测
#真实波幅ATR,随机动量指标SMI,Wells定向指标ADX,收盘价位置价值CLV,资金流向指标MFI
#这些指标独在TTR包中找到
#写一个函数
myTTR<-function(data){
require(TTR)
require(quantmod)
names(data)<-sapply(X=names(SSEC),FUN=function(x)
strsplit(x,split=".",fixed=TRUE)[[1]][2])
myATR<-ATR(HLC(data))$atr
mySMI<-SMI(HLC(data))$SMI
myADX<-ADX(HLC(data))$ADX
myAroon<-aroon(HLC(data)[,-3])$oscillator
myBBands<-BBands(HLC(data))$pctB
myChaikin<-Delt(chaikinVolatility(HLC(data)[,-3]))[,1]
myCLV<-EMA(CLV(HLC(data)))[,1]
myMACD<-MACD(data[,"Close"])[,2]
myMFI<-MFI(data[,c("High","Low","Close")],data[,"Volume"])
mySAR<-SAR(data[,c("High","Close")])[,1]
result<-cbind(myATR,myADX,myAroon,myBBands,myChaikin,myCLV,myMACD,myMFI,mySAR)
colnames(result)<-c("myATR","myADX","myAroon","myBBands","myChaikin","myCLV","myMACD","myMFI","mySAR")
return(result)
}
#这10个技术指标作为预测变量,用随机森林的方法精简变量
require(quantmod)
require(randomForest)
model<-specifyModel(formula = T.Index(SSEC,p=0.025,k=10)~Delt(Cl(SSEC),k=1:10)+
myTTR(SSEC)+runMean(Cl(SSEC))+runSD(Cl(SSEC)),na.rm = TRUE)
set.seed(42)
rf<-buildModel(x=model,method="randomForest",training.per=c(start(SSEC),index(SSEC["2011-10-12"])))
varImpPlot(rf@fitted.model)#查看各个变量的重要性
#buildModel()建立模型的第一个参数是x已经构建好的式子,training.per训练数据集,
x<-importance(rf@fitted.model)
rownames(x)[x>12]#给定阈值获得关键指标
#构建两个数据集
#myTTR.data<-myTTR(SSEC)[,c("myATR","mySMI","myADX","myMACD","mySAR")]
#变量重要性的技术指标5个
#model.data<-specifyModel(formula = T.Index(SSEC,p=0.025,k=10)~
# myTTR.data+runMean(Cl(SSEC)))
#~连接因变量和自变量
myTTR.data <- myTTR(SSEC)[,c("myATR","mySMI","myADX","myMACD","mySAR")]
model.data <- specifyModel(formula=T.Index(SSEC,p=0.025,k=10)~
myTTR.data+runMean(Cl(SSEC)))
train.data <- as.data.frame(modelData(model.data,
data.window=c(start(SSEC),"2012-12-31")))
test.data <- as.data.frame(modelData(model.data,
data.window=c(as.Date("2013-01-05"),end(SSEC))))
colnames(train.data)<- c("T","myATR","mySMI","myADX","myMACD","mySAR","runMean")
colnames(test.data)<- c("T","myATR","mySMI","myADX","myMACD","mySAR","runMean")
form<-as.formula("T~.")
library(e1071)#找支持向量机模型
m<-svm(form,train.data,cost=100)
p<-predict(m,na.omit(test.data))
以下是错误提示:
> colnames(train.data)<- c("T","myATR","mySMI","myADX","myMACD","mySAR","runMean")
Error in `colnames<-`(`*tmp*`, value = c("T", "myATR", "mySMI", "myADX", :
'names' attribute [7] must be the same length as the vector [6]
> colnames(test.data)<- c("T","myATR","mySMI","myADX","myMACD","mySAR","runMean")
Error in `colnames<-`(`*tmp*`, value = c("T", "myATR", "mySMI", "myADX", :
'names' attribute [7] must be the same length as the vector [6]
>
> form<-as.formula("T~.")
>
> library(e1071)#找支持向量机模型
> m<-svm(form,train.data,cost=100)
Error in model.frame.default(formula = form, data = train.data, na.action = function (object, :
变数的长度不一样('T.Index.SSEC.p.0.025.k.10')
> p<-predict(m,na.omit(test.data))
Error in predict(m, na.omit(test.data)) : object 'm' not found
>
|
|