Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # using Artificial Neural Networks to predict (unsuccessfully...) stock price changes
- # see more: http://reakkt.com
- rm(list=ls())
- library(neuralnet)
- data.file <- "fw20_d.csv" # EOD data from stooq.com
- # n=500, d=50, l=4 lub 3 dla t=10
- # n=500, d=50, l=3 dla t=5
- d <- 50
- n.train <- 500
- n.test <- 7
- layers <- 3
- repetitions <- 2
- n <- n.train+n.test+d
- fit.n <- 100 # number of s1 date draws
- market.data <- read.csv(data.file,header=TRUE)
- x.market <- log(market.data[-1,"Close"]/
- market.data[-nrow(market.data),"Close"])
- market.n <- length(x.market)
- fit.ratio <- numeric(fit.n)
- random.fit <- numeric(fit.n)
- for (i in 1:fit.n) {
- s1 <- round(runif(1,n,market.n))
- x <- x.market[(s1-n+1):s1]
- x.matrix <- cbind( tail(x,n-d),
- sapply(1:(d-1), function(i) tail(head(x,n-i),n-d) ),
- head(x,n-d) )
- colnames(x.matrix) <- c("X",paste("X",1:d,sep=""))
- x.df <- data.frame(x.matrix)
- x.df.train <- x.df[1:n.train,]
- x.df.test <- x.df[(n.train+1):(n.train+n.test),]
- # some other parameters to try:
- # act.fct="tanh"
- # err.fct="ce"
- f <- paste("X",paste("X",1:d,"+",sep="",collapse=""),sep="~")
- f <- substr(f,1,nchar(f)-1)
- nn <- neuralnet(eval(parse(t=f)),data=x.df.train,
- # act.fct="tanh",
- hidden=layers,rep=repetitions,linear.output=TRUE)
- if (length(nn$weights)==0) stop("No convergence") else {
- # plot(nn)
- x.forecast <- compute(nn,x.df.test[,-1])
- matplot(cbind(x.df[(n-d-n.test+1):(n-d),1],x.forecast$net.result),type="l",lty="solid",ylab="")
- points(x.df[(n-d-n.test+1):(n-d),1],col="Black",pch=16)
- points(x.forecast$net.result,col="Red",pch=16)
- abline(h=0,col="Orange",lty="dotted")
- # cbind(x.df.test[,1],x.forecast$net.result)
- conform.sign <- sum(sign(x.df.test[,1])==sign(x.forecast$net.result))
- # conform.diff <- sum((x.df.test[,1]-x.forecast$net.result)^2)
- }
- fit.ratio[i] <- conform.sign/n.test
- random.fit[i] <- sum(sign(x.df.test[,1])==sapply(runif(n.test,0,1), function(i) if (i>0.5) return(1) else return(-1)))/n.test
- }
- fit.density <- density(fit.ratio)
- random.density <- density(random.fit)
- xlim <- range(c(fit.density$x,random.density$x))
- ylim <- range(c(fit.density$y,random.density$y))
- plot(fit.density,xlim=xlim,ylim=ylim)
- lines(random.density,col="Blue",lty="dotted")
- abline(v=0.5,col="Red",lty="dotted")
- summary(random.fit)
- summary(fit.ratio)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement