以下是书中的作者的代码。
红色部分运行出来总是显示: Error in Delt(Cl(quotes), v, k = x) : x1 and x2 must be of same length
但是这是书上的代码我一点也没有动
求大神指点、、、、、、、、
R Code of Chapter 3 (right-click here to save the code in a local file)
###################################################### The Available Data###################################################library(DMwR)data(GSPC)###################################################### Handling time dependent data in R###################################################library(xts)x1 <- xts(rnorm(100),seq(as.POSIXct("2000-01-01"),len=100,by="day"))x1[1:5]x2 <- xts(rnorm(100),seq(as.POSIXct("2000-01-01 13:00"),len=100,by="min"))x2[1:4]x3 <- xts(rnorm(3),as.Date(c('2005-01-01','2005-01-10','2005-01-12')))x3x1[as.POSIXct("2000-01-04")]x1["2000-01-05"]x1["20000105"]x1["2000-04"]x1["2000-03-27/"]x1["2000-02-26/2000-03-03"]x1["/20000103"]mts.vals <- matrix(round(rnorm(25),2),5,5)colnames(mts.vals) <- paste('ts',1:5,sep='')mts <- xts(mts.vals,as.POSIXct(c('2003-01-01','2003-01-04', '2003-01-05','2003-01-06','2003-02-16')))mtsmts["2003-01",c("ts2","ts5")]index(mts)coredata(mts)###################################################### Reading the data from the CSV file###################################################GSPC <- as.xts(read.zoo('sp500.csv',header=T))###################################################### Getting the data from the Web###################################################library(tseries)GSPC <- as.xts(get.hist.quote("^GSPC",start="1970-01-02", quote=c("Open", "High", "Low", "Close","Volume","AdjClose")))head(GSPC)GSPC <- as.xts(get.hist.quote("^GSPC", start="1970-01-02",end='2009-09-15', quote=c("Open", "High", "Low", "Close","Volume","AdjClose")))library(quantmod)getSymbols('^GSPC')getSymbols('^GSPC',from='1970-01-01',to='2009-09-15')colnames(GSPC) <- c("Open", "High", "Low", "Close","Volume","AdjClose")setSymbolLookup(IBM=list(name='IBM',src='yahoo'), USDEUR=list(name='USD/EUR',src='oanda', from=as.Date('2009-01-01')))getSymbols(c('IBM','USDEUR'))head(IBM)head(USDEUR)###################################################### Reading the data from a MySQL database###################################################library(RODBC)ch <- odbcConnect("QuotesDSN",uid="myusername",pwd="mypassword")allQuotes <- sqlFetch(ch,"gspc")GSPC <- xts(allQuotes[,-1],order.by=as.Date(allQuotes[,1]))head(GSPC)odbcClose(ch)library(DBI)library(RMySQL)drv <- dbDriver("MySQL")ch <- dbConnect(drv,dbname="Quotes","myusername","mypassword")allQuotes <- dbGetQuery(ch,"select * from gspc")GSPC <- xts(allQuotes[,-1],order.by=as.Date(allQuotes[,1]))head(GSPC)dbDisconnect(ch)dbUnloadDriver(drv)setSymbolLookup(GSPC=list(name='gspc',src='mysql', db.fields=c('Index','Open','High','Low','Close','Volume','AdjClose'), user='xpto',password='ypto',dbname='Quotes'))getSymbols('GSPC') ###################################################### Defining the Prediction Tasks###################################################T.ind <- function(quotes,tgt.margin=0.025,n.days=10) { v <- apply(HLC(quotes),1,mean) r <- matrix(NA,ncol=n.days,nrow=NROW(quotes)) ## The following statment is wrong in the book (page 109)! for(x in 1:n.days) r[,x] <- Next(Delt(Cl(quotes),v,k=x),x) x <- apply(r,1,function(x) sum(x[x > tgt.margin | x < -tgt.margin])) if (is.xts(quotes)) xts(x,time(quotes)) else x}candleChart(last(GSPC,'3 months'),theme='white',TA=NULL)avgPrice <- function(p) apply(HLC(p),1,mean)addAvgPrice <- newTA(FUN=avgPrice,col=1,legend='AvgPrice')addT.ind <- newTA(FUN=T.ind,col='red',legend='tgtRet')addAvgPrice(on=1)addT.ind()myATR <- function(x) ATR(HLC(x))[,'atr']mySMI <- function(x) SMI(HLC(x))[,'SMI']myADX <- function(x) ADX(HLC(x))[,'ADX']myAroon <- function(x) aroon(x[,c('High','Low')])$oscillatormyBB <- function(x) BBands(HLC(x))[,'pctB']myChaikinVol <- function(x) Delt(chaikinVolatility(x[,c("High","Low")]))[,1]myCLV <- function(x) EMA(CLV(HLC(x)))[,1]myEMV <- function(x) EMV(x[,c('High','Low')],x[,'Volume'])[,2]myMACD <- function(x) MACD(Cl(x))[,2]myMFI <- function(x) MFI(x[,c("High","Low","Close")], x[,"Volume"])mySAR <- function(x) SAR(x[,c('High','Close')]) [,1]myVolat <- function(x) volatility(OHLC(x),calc="garman")[,1]library(randomForest)data.model <- specifyModel(T.ind(GSPC) ~ Delt(Cl(GSPC),k=1:10) + myATR(GSPC) + mySMI(GSPC) + myADX(GSPC) + myAroon(GSPC) + myBB(GSPC) + myChaikinVol(GSPC) + myCLV(GSPC) + CMO(Cl(GSPC)) + EMA(Delt(Cl(GSPC))) + myEMV(GSPC) + myVolat(GSPC) + myMACD(GSPC) + myMFI(GSPC) + RSI(Cl(GSPC)) + mySAR(GSPC) + runMean(Cl(GSPC)) + runSD(Cl(GSPC)))set.seed(1234)rf <- buildModel(data.model,method='randomForest', training.per=c(start(GSPC),index(GSPC["1999-12-31"])), ntree=50, importance=T)ex.model <- specifyModel(T.ind(IBM) ~ Delt(Cl(IBM),k=1:3))data <- modelData(ex.model,data.window=c('2009-01-01','2009-08-10'))varImpPlot(rf@fitted.model,type=1)imp <- importance(rf@fitted.model,type=1)rownames(imp)[which(imp > 10)]data.model <- specifyModel(T.ind(GSPC) ~ Delt(Cl(GSPC),k=1) + myATR(GSPC) + myADX(GSPC) + myEMV(GSPC) + myVolat(GSPC) + myMACD(GSPC) + mySAR(GSPC) + runMean(Cl(GSPC)) )Tdata.train <- as.data.frame(modelData(data.model, data.window=c('1970-01-02','1999-12-31')))Tdata.eval <- na.omit(as.data.frame(modelData(data.model, data.window=c('2000-01-01','2009-09-15'))))Tform <- as.formula('T.ind.GSPC ~ .')