This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
library(RODBC) | |
library(jsonlite) | |
library(data.table) | |
library(grid) | |
library(reshape) | |
library(ggplot2) | |
library(sde) | |
library(zoo) | |
library(plyr) | |
#### SCRIPT GLOBALS #### | |
locationID <- 30000142 #JITA=30000142 | |
date_range <- 100 | |
typeid <- 29668 | |
#PLEX = 29668 | |
predict.start <- 50 | |
predict.length <- 50 | |
predict.repeat <- 2000 | |
rolling_window <- 10 | |
plot.path <- getwd() | |
plot.width <- 1600 | |
plot.height <- 900 | |
#### SDE VALS #### | |
# Can be replaced with RODBC connector and lookups | |
# Manually set for wider distribution | |
################# | |
regionID <- 10000002 #THE FORGE=10000002 | |
typeName <- "PLEX" | |
solarSystemName <- "Jita" | |
#### FETCH CREST DATA #### | |
CREST_addr <- paste0("https://public-crest.eveonline.com/market/",regionID,"/types/",typeid,"/history/") | |
print("FETCHING CREST DATA") | |
CREST_json <- fromJSON(readLines(CREST_addr)) | |
CREST_data <- CREST_json$items | |
CREST_data$date <- as.Date(CREST_data$date) | |
#### SPECIAL GROUPINGS #### | |
patch_list <- as.POSIXlt( c("2014-12-09 13:00", "2015-01-13 13:00", "2015-02-17 13:00", | |
"2015-03-24 13:00", "2015-04-28 13:00", "2015-06-02 13:00", | |
"2015-07-07 13:00" | |
)) | |
date.min <- Sys.Date() - date_range | |
patch_list.aux <- c() | |
for (row in 1:NROW(patch_list)){ #Find the patches in the date range | |
tmpdate <- as.Date(patch_list[row]) | |
if (tmpdate > date.min){ | |
patch_list.aux <- c(patch_list.aux, as.character(patch_list[row])) | |
} | |
} | |
patch_list.aux <- as.POSIXlt(patch_list.aux) | |
#### CREST PROCESSING #### | |
CREST_data$rollingAvg <- rollmean(CREST_data$avgPrice,k=rolling_window,na.pad=TRUE,align="right") | |
CREST_data$diff <- CREST_data$avgPrice - CREST_data$rollingAvg | |
CREST_data$perdiff <- CREST_data$diff/CREST_data$avgPrice | |
CREST_data$rollSD_diff <- rollapply(CREST_data$diff,width=rolling_window,FUN=sd,fill=NA,align="right") | |
CREST_data$rollSD_per <- rollapply(CREST_data$perdiff,width=rolling_window,FUN=sd,fill=NA,align="right") | |
var_cdf <- ecdf(CREST_data$rollSD_per) | |
CREST_data <- subset(CREST_data, date > date.min) | |
CREST_predict.low <- rep(NA, NROW(CREST_data)-predict.start-1) | |
CREST_predict.med <- rep(NA, NROW(CREST_data)-predict.start-1) | |
CREST_predict.hi <- rep(NA, NROW(CREST_data)-predict.start-1) | |
predict.window <- as.Date(patch_list.aux[-2]) | |
minDate <- max(CREST_data$date)-predict.start | |
lastPrice <- CREST_data$avgPrice[CREST_data$date==minDate] | |
CREST_predict <- subset(CREST_data, date > minDate-30 & date < minDate) | |
lowVar <- quantile(CREST_predict$rollSD_per,0.25) | |
medVar <- quantile(CREST_predict$rollSD_per,0.50) | |
hiVar <- quantile(CREST_predict$rollSD_per,0.75) | |
lowSig <- (lowVar-mean(CREST_data$rollSD_per,na.rm=TRUE))/sd(CREST_data$rollSD_per,na.rm=TRUE) | |
medSig <- (medVar-mean(CREST_data$rollSD_per,na.rm=TRUE))/sd(CREST_data$rollSD_per,na.rm=TRUE) | |
hiSig <- (hiVar -mean(CREST_data$rollSD_per,na.rm=TRUE))/sd(CREST_data$rollSD_per,na.rm=TRUE) | |
predict_matrix.low <- matrix(data=NA, nrow=predict.length+1, ncol=predict.repeat) | |
predict_matrix.med <- matrix(data=NA, nrow=predict.length+1, ncol=predict.repeat) | |
predict_matrix.hi <- matrix(data=NA, nrow=predict.length+1, ncol=predict.repeat) | |
for(iter in 1:predict.repeat){ | |
predict_matrix.low[,iter] <- GBM(lastPrice,0,lowSig,lowVar,predict.length) | |
predict_matrix.med[,iter] <- GBM(lastPrice,0,medSig,medVar,predict.length) | |
predict_matrix.hi [,iter] <- GBM(lastPrice,0,hiSig ,hiVar ,predict.length) | |
} | |
#TODO: summarize predictions# | |
#CREST_predict.low <- c(CREST_predict.low, predict_matrix.low[,1]) | |
#CREST_predict.med <- c(CREST_predict.med, predict_matrix.low[,1]) | |
#CREST_predict.hi <- c(CREST_predict.hi , predict_matrix.low[,1]) | |
lowVar <- quantile(CREST_predict$perdiff,0.25) / (rolling_window/2) | |
medVar <- quantile(CREST_predict$perdiff,0.50) / (rolling_window/2) | |
hiVar <- quantile(CREST_predict$perdiff,0.75) / (rolling_window/2) | |
for(step in 0:predict.length){#Run Exponential steps with local variance values | |
exp_low <- lastPrice * (1+lowVar)^step | |
exp_med <- lastPrice * (1+medVar)^step | |
exp_hi <- lastPrice * (1+hiVar )^step | |
CREST_predict.low <- c(CREST_predict.low, exp_low) | |
CREST_predict.med <- c(CREST_predict.med, exp_med) | |
CREST_predict.hi <- c(CREST_predict.hi , exp_hi ) | |
} | |
lenPredict <- NROW(CREST_predict.low) | |
lenTarget <- NROW(CREST_data$avgPrice) | |
if(lenPredict < lenTarget){ #pad rows | |
CREST_predict.low <- c(CREST_predict.low, rep(NA,lenTarget-lenPredict)) | |
CREST_predict.med <- c(CREST_predict.med, rep(NA,lenTarget-lenPredict)) | |
CREST_predict.hi <- c(CREST_predict.hi , rep(NA,lenTarget-lenPredict)) | |
} | |
CREST_data$predict.low <- CREST_predict.low | |
CREST_data$predict.med <- CREST_predict.med | |
CREST_data$predict.hi <- CREST_predict.hi | |
CREST_stack <- melt.data.frame(CREST_data, id.vars=c("date"), measure.vars=c("avgPrice","predict.low","predict.med","predict.hi")) | |
#### CREST PLOTTING #### | |
plot.title <- paste0("CREST History - Predictor - ",typeName," - ",Sys.Date()) | |
plot.name <- paste0("CREST-Predictor_",typeName,"_",Sys.Date(),".png") | |
theme_dark <- function( ... ) { | |
theme( | |
text = element_text(color="gray90"), | |
title = element_text(size=rel(2),hjust=0.05,vjust=3.5), | |
axis.title.x = element_text(size=rel(1),hjust=0.5, vjust=0), | |
axis.title.y = element_text(size=rel(1),hjust=0.5, vjust=1.5), | |
plot.margin = unit(c(2,1,1,1), "cm"), | |
plot.background=element_rect(fill="gray8",color="gray8"), | |
panel.background=element_rect(fill="gray10",color="gray10"), | |
panel.grid.major = element_line(colour="gray17"), | |
panel.grid.minor = element_line(colour="gray12"), | |
axis.line = element_line(color = "gray50"), | |
plot.title = element_text(color="gray80"), | |
axis.title = element_text(color="gray70"), | |
axis.text = element_text(color="gray50",size=rel(1.1)), | |
legend.key = element_rect(fill="gray8",color="gray8"), | |
legend.background = element_rect(fill="gray8"), | |
legend.title = element_text(size=rel(0.6)), | |
legend.text = element_text(size=rel(1.1)), | |
strip.background = element_rect(fill="gray1"), | |
strip.text = element_text(size=rel(1.2)) | |
) + theme(...) | |
} | |
#png(plot.name, width=plot.width, height=plot.height) | |
GG <- ggplot(CREST_stack, aes(x=date,y=value,color=variable)) | |
GG <- GG + geom_line() + theme_dark() | |
GG <- GG + labs(title=plot.title, color="PriceKey", x="date", y="Price") | |
GG <- GG + geom_vline(xintercept=as.numeric(as.Date(patch_list.aux)),color="white") | |
print(GG) | |
#dev.off() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment