library(zoo)
library(ggplot2)
library(tseries)
library(gridExtra)
library(Quandl)
Quandl.api_key("qZ3LsZXkitPz5KE9XZA5")
library("sqldf")
library("plyr")
library(quantmod)
library(plotrix)
library(grid)
library(rsdmx)
library(lubridate)
library(xtable)
library(RODBC)
library(devtools)
library(plotly)



rm(list=ls())

startdate<-as.Date("2009-01-04", "%Y-%m-%d")  #for Quandl data
startdate2<-as.Date("2009-01-04", "%Y-%m-%d") #for Quandl normalizing data
startdate3<-"20090101"  #for DB

#Stockdata

# KOSPI

KOSPI<-Quandl("YAHOO/INDEX_KS11", trim_start=startdate,order="desc", type="zoo")
KOSPIN<-Quandl("YAHOO/INDEX_KS11", trim_start=startdate2,order="desc", type="zoo", transform="normalize")
KOSPI<-round(KOSPI[,6],digits=2)
KOSPIN<-KOSPIN[,6]

# DOW

DJI <-Quandl("YAHOO/INDEX_DJI", trim_start=startdate,order="desc", type="zoo")
DJIN <-Quandl("YAHOO/INDEX_DJI", trim_start=startdate2,order="desc", type="zoo", transform="normalize")
DJI<-round(DJI[,6],digits=2)
DJIN<-DJIN[,6]

# NIKKEI

NIKKEI <-Quandl("NIKKEI/INDEX", trim_start=startdate,order="desc", type="zoo")
NIKKEIN <-Quandl("NIKKEI/INDEX", trim_start=startdate2,order="desc", type="zoo", transform="normalize")
NIKKEI<-round(NIKKEI[,4], digits=2)
NIKKEIN<-NIKKEIN[,4]

# DAX

DAX <-Quandl("YAHOO/INDEX_GDAXI", trim_start=startdate,order="desc", type="zoo")
DAXN <-Quandl("YAHOO/INDEX_GDAXI", trim_start=startdate2,order="desc", type="zoo", transform="normalize")
DAX<-round(DAX[,6], digits=2)
DAXN<-DAXN[,6]
# EURO

EURO50 <-Quandl("YAHOO/INDEX_STOXX50E", trim_start=startdate,order="desc", type="zoo")
EURO50N <-Quandl("YAHOO/INDEX_STOXX50E", trim_start=startdate2,order="desc", type="zoo", transform="normalize")
EURO50<-round(EURO50[,6], digits=2)
EURO50N<-EURO50N[,6]

#Shanghai

Shanghai <-Quandl("YAHOO/INDEX_SSEC", trim_start=startdate,order="desc", type="zoo")
ShanghaiN <-Quandl("YAHOO/INDEX_SSEC", trim_start=startdate2,order="desc", type="zoo",transform="normalize")
Shanghai<-round(Shanghai[,6], digits=2)
ShanghaiN<-ShanghaiN[,6]

#Hangseng

Hangseng <-Quandl("YAHOO/INDEX_HSI", trim_start=startdate,order="desc", type="zoo")
HangsengN <-Quandl("YAHOO/INDEX_HSI", trim_start=startdate2,order="desc", type="zoo",transform="normalize")
Hangseng<-round(Hangseng[,6], digits=2)
HangsengN<-HangsengN[,6]

#VIX

VIX <-Quandl("YAHOO/INDEX_VIX", trim_start=startdate,order="desc", type="zoo")
VIX<-VIX[,6]

Stock <- merge
Stock<- merge.zoo(KOSPI, DJI, DAX, NIKKEI, EURO50, Shanghai, Hangseng, VIX)
num<-ncol(Stock)

StockN <- merge
StockN<- merge.zoo(KOSPIN, DJIN, DAXN, NIKKEIN, EURO50N, ShanghaiN, HangsengN)

#Commodity

#

Copperp <- Quandl("LME/PR_CU", trim_start=startdate,order="desc", type="zoo")
Copper<-Copperp[,1]

#

Zincp <- Quandl("LME/PR_ZI", trim_start=startdate,order="desc", type="zoo")
Zinc<-Zincp[,1]

#

Goldp <- Quandl("LBMA/GOLD", trim_start=startdate,order="desc", type="zoo")
Gold<-Goldp[,1]

#

WTI<-Quandl("FRED/DCOILWTICO", trim_start=startdate,order="desc", type="zoo")

#

DXY<-Quandl("FRED/DTWEXM", trim_start=startdate,order="desc", type="zoo")

DXYIMTP<-Quandl("FRED/DTWEXO", trim_start=startdate,order="desc", type="zoo")
  
Commodity<-merge.zoo(Copper, Zinc, Gold, WTI, DXY, DXYIMTP)

#Currency data

# Connect to DB

channel <- odbcConnect("KBXUPDB", uid="STARM2SEL", pwd="starm2sel2*")

#Input data

input_data<-c("USD", "JPY", "EUR", "GBP", "CNY", "AUD", "CAD", "CHF", "INR", "BRL")

for(i in 1:length(input_data)){ 
  
  sql <- paste(" Select BASE_DT, TRADE_RT_LAST from KBFMSDB.DBO.BFZAR10 where BASE_DT >= '", startdate3, sep="")
  sql <- paste(sql,"'", sep="")
  sql <- paste(sql, "and CCY_cd in ('",input_data[i],sep="")
  sql <- paste(sql, "') order by BASE_DT", sep="")
  myresult <- (sqlQuery(channel, sql))
  
  if(i==1){
    crn <-myresult
    colnames(crn)[2]<-input_data[i]}
  
  else {
    colnames(myresult)[2]<-input_data[i]
    crn<-merge(crn, myresult, by.x="BASE_DT", by.y="BASE_DT", all.x=T)
  }
  
}

odbcClose(channel)

currency<-zoo(crn[,-1])
index(currency)<-as.Date(as.character(crn[,1]),"%Y%m%d")
currency2<-currency
colnames(currency)<-c("USDKRW", "USDJPY", "EURUSD", "GBPUSD", "USDCNY", "AUDUSD", "USDCAD", "USDCHF", "USDINR", "USDBRL")
colnames(currency2)<-c("USD", "JPY", "EUR", "GBP", "CNY", "AUD", "CAD", "CHF", "INR", "BRL")

currency$USDJPY <-round(crn$USD/crn$JPY, digits=2)
currency$EURUSD <-round(crn$EUR/crn$USD, digits=2)
currency$GBPUSD <-round(crn$GBP/crn$USD, digits=2)
currency$USDCNY <-round(crn$USD/crn$CNY, digits=2)
currency$AUDUSD <-round(crn$AUD/crn$USD, digits=2)
currency$USDCAD <-round(crn$USD/crn$CAD, digits=2)
currency$USDCHF <-round(crn$USD/crn$CHF, digits=2)
currency$USDINR <-round(crn$USD/crn$INR, digits=2)
currency$USDBRL <-round(crn$USD/crn$BRL, digits=2)



#Filling missing data 

for(i in 1:ncol(Stock)){
  
  ind<-which(is.na(Stock[,i]))
  if(length(ind)>0){
    if(ind[1]==1) ind<-ind[-1]
    for(j in 1:length(ind)){
      Stock[ind[j], i] <- Stock[ind[j]-1, i]
      
    }
  }
}

for(i in 1:ncol(StockN)){
  
  ind<-which(is.na(StockN[,i]))
  if(length(ind)>0){
    if(ind[1]==1) ind<-ind[-1]
    for(j in 1:length(ind)){
      StockN[ind[j], i] <- StockN[ind[j]-1, i]
          }
  }
}

for(i in 1:ncol(Commodity)){
  
  ind<-which(is.na(Commodity[,i]))
  if(length(ind)>0){
    if(ind[1]==1) ind<-ind[-1]
    for(j in 1:length(ind)){
      Commodity[ind[j], i] <- Commodity[ind[j]-1, i]
      
    }
  }
}

#Making stock return matrix

mcolnames<-colnames(Stock)
mrownames <-c("current", "1d", "1w", "1m", "3m","1y")
return<-matrix(NA, length(mrownames), length(mcolnames))
rownames(return)<-mrownames
colnames(return)<-mcolnames

  return[1,]<-round(Stock[nrow(Stock)], digits=0)
  return[2,]<-round(tail(diff(log(Stock), lag=1),1)*100, digits=2)
  return[3,]<-round(tail(diff(log(Stock), lag=7),1)*100, digits=2)
  return[4,]<-round(tail(diff(log(Stock), lag=30),1)*100, digits=2)
  return[5,]<-round(tail(diff(log(Stock), lag=90),1)*100, digits=2)
  return[6,]<-round(tail(diff(log(Stock), lag=365),1)*100, digits=2)

#Making commodity return matrix

mcolnames<-colnames(Commodity)
mrownames <-c("current", "1d", "1w", "1m", "3m","1y")
creturn<-matrix(NA, length(mrownames), length(mcolnames))
rownames(creturn)<-mrownames
colnames(creturn)<-mcolnames

  creturn[1,]<-round(Commodity[nrow(Commodity)], digits=0)
  creturn[2,]<-round(tail(diff(log(Commodity), lag=1),1)*100, digits=2)
  creturn[3,]<-round(tail(diff(log(Commodity), lag=7),1)*100, digits=2)
  creturn[4,]<-round(tail(diff(log(Commodity), lag=30),1)*100, digits=2)
  creturn[5,]<-round(tail(diff(log(Commodity), lag=90),1)*100, digits=2)
  creturn[6,]<-round(tail(diff(log(Commodity), lag=365),1)*100, digits=2)


#Making FX return matrix

mcolnames<-colnames(currency)
mrownames <-c("current", "1d", "1w", "1m", "3m","1y")
fxreturn<-matrix(NA, length(mrownames), length(mcolnames))
rownames(fxreturn)<-mrownames
colnames(fxreturn)<-mcolnames

  fxreturn[1,]<-round(currency[nrow(currency)], digits=2)
  fxreturn[2,]<-round(tail(diff(log(currency), lag=1),1)*100, digits=2)
  fxreturn[3,]<-round(tail(diff(log(currency), lag=7),1)*100, digits=2)
  fxreturn[4,]<-round(tail(diff(log(currency), lag=30),1)*100, digits=2)
  fxreturn[5,]<-round(tail(diff(log(currency), lag=90),1)*100, digits=2)
  fxreturn[6,]<-round(tail(diff(log(currency), lag=365),1)*100, digits=2)

#Making FX return matrix2
  
  mcolnames<-colnames(currency2)
mrownames <-c("current", "1d", "1w", "1m", "3m","1y")
fxreturn2<-matrix(NA, length(mrownames), length(mcolnames))
rownames(fxreturn2)<-mrownames
colnames(fxreturn2)<-mcolnames

  fxreturn2[1,]<-round(currency2[nrow(currency2)], digits=2)
  fxreturn2[2,]<-round(tail(diff(log(currency2), lag=1),1)*100, digits=2)
  fxreturn2[3,]<-round(tail(diff(log(currency2), lag=7),1)*100, digits=2)
  fxreturn2[4,]<-round(tail(diff(log(currency2), lag=30),1)*100, digits=2)
  fxreturn2[5,]<-round(tail(diff(log(currency2), lag=90),1)*100, digits=2)
  fxreturn2[6,]<-round(tail(diff(log(currency2), lag=365),1)*100, digits=2)

  
  
#Making stock plots

num<-ncol(Stock)
for(i in 1:(num/2)){
op <- par(mfrow=c(1,2))
chartSeries(Stock[,(2*i)-1], layout=NULL, TA='addBBands()', name=colnames(Stock)[2*i-1], theme=chartTheme("white"))

chartSeries(Stock[,(2*i)], layout=NULL, TA='addBBands()', name=colnames(Stock)[2*i], theme=chartTheme("white"))

}

StockNMelt<-fortify(StockN, melt=TRUE)

ggplot(data=StockNMelt, aes(x=Index, y=Value, colour=Series))+
 geom_line()+
  xlab("")+
  ylab("")

plot.new()
grid.table(return)


#Making Commomdity plots

num<-ncol(Commodity)
for(i in 1:(num/2)){
op <- par(mfrow=c(1,2))
chartSeries(Commodity[,(2*i)-1], layout=NULL, TA='addBBands()', name=colnames(Commodity)[2*i-1], theme=chartTheme("white"))

chartSeries(Commodity[,(2*i)], layout=NULL, TA='addBBands()', name=colnames(Commodity)[2*i], theme=chartTheme("white"))

}

plot.new()
grid.table(creturn)

#Making fx plots

i<-1
num<-ncol(currency)
for(i in 1:(num/2)){
op <- par(mfrow=c(1,2))
chartSeries(currency[,(2*i)-1], layout=NULL, TA='addBBands()', name=colnames(currency)[2*i-1], theme=chartTheme("white"))

chartSeries(currency[,(2*i)], layout=NULL, TA='addBBands()', name=colnames(currency)[2*i], theme=chartTheme("white"))

}

#for(i in 1:(num/2)){

#a<-ggplot(currency, aes(x=Index, y=currency[,(2*i)-1]))+ 
  #geom_line(aes(y=currency[,(2*i)-1]))+
  #geom_text(colour="blue", aes(x=Sys.Date(), y=fxreturn[1,(2*i)-1], label=fxreturn[1,(2*i)-1]))+
  #theme_bw()+
  #ggtitle(colnames(fxreturn)[(2*i)-1])+
  #xlab("")+
  #ylab("")
  
#b<-ggplot(currency, aes(x=Index, y=currency[,2*i]))+ 
  #geom_line(aes(y=currency[,2*i]))+
  #geom_text(colour="blue", aes(x=Sys.Date(), y=fxreturn[1,2*i], label=fxreturn[1,2*i]))+
  #theme_bw()+
  #ggtitle(colnames(fxreturn)[2*i])+
  #xlab("")+
  #ylab("")

#grid.arrange(a,b, ncol=2)
#}
plot.new()
grid.table(fxreturn)


#Makign fx2 plots

i<-1
num<-ncol(currency2)

for(i in 1:(num/2)){
op <- par(mfrow=c(1,2))
chartSeries(currency2[,(2*i)-1], layout=NULL, TA='addBBands()', name=colnames(currency2)[2*i-1], theme=chartTheme("white"))

chartSeries(currency2[,(2*i)], layout=NULL, TA='addBBands()', name=colnames(currency2)[2*i],theme=chartTheme("white"))

}

plot.new()
grid.table(fxreturn2)
plot.new()

par(mfrow=c(1,1))

plot(Stock)

plot(Commodity)

plot(currency)