언어/R

stock price

newlibra 2023. 4. 25. 23:25
library(quantmod)
library(xts)
library(ggplot2)
library(gridExtra) # grid.arrange

graphics.off()
rm(list=ls())

# Data Range
sdate <- as.Date("2022-04-20")
edate <- as.Date("2023-04-24")

# Samsung Electronics (005930), Naver (035420)
ss_stock=getSymbols('005930.KS',from=sdate,to=edate,auto.assign = F)
nv_stock=getSymbols('035420.KS',from=sdate,to=edate,auto.assign = F)

# Typically use previous value for NA
no.na <- which(is.na(ss_stock[,6]))      # no for NA
ss_stock[no.na,6] <- ss_stock[no.na-1,6]

no.na <- which(is.na(nv_stock[,6]))
nv_stock[no.na,6] <- nv_stock[no.na-1,6] 

# Only stock price
ss_price <- ss_stock[,6]
nv_price <- nv_stock[,6]

# log return using adjusted stock price
ss_rtn <- diff(log(ss_price),1)
nv_rtn <- diff(log(nv_price),1)

# draw graph
x11(width=5.5, height=6)
plot1<-ggplot(ss_price, aes(x = index(ss_price), y = ss_price)) +
  geom_line(color = "blue", linewidth=1.2) + 
  ggtitle("SEC stock price") + xlab("Date") + ylab("Price(₩)") + 
  theme(plot.title = element_text(hjust = 0.5)) + 
  scale_x_date(date_labels = "%y-%m", date_breaks = "3 months")

plot2 <- ggplot(ss_rtn, aes(x = index(ss_rtn), y = ss_rtn)) +
  geom_line(color = "red", linewidth=1.2) + 
  ggtitle("SEC stock return") + xlab("Date") + ylab("Return(%)") + 
  theme(plot.title = element_text(hjust = 0.5)) + 
  scale_x_date(date_labels = "%y-%m", date_breaks = "3 months")

grid.arrange(plot1, plot2, ncol=1, nrow = 2)

x11(width=5.5, height=6)
plot1<-ggplot(nv_price, aes(x = index(nv_price), y = nv_price)) +
  geom_line(color = "blue", linewidth=1.2) + 
  ggtitle("Naver stock price") + xlab("Date") + ylab("Price(₩)") + 
  theme(plot.title = element_text(hjust = 0.5)) + 
  scale_x_date(date_labels = "%y-%m", date_breaks = "3 months")

plot2 <- ggplot(nv_rtn, aes(x = index(nv_rtn), y = nv_rtn)) +
  geom_line(color = "red", linewidth=1.2) + 
  ggtitle("Naver stock return") + xlab("Date") + ylab("Return(%)") + 
  theme(plot.title = element_text(hjust = 0.5)) + 
  scale_x_date(date_labels = "%y-%m", date_breaks = "3 months")

grid.arrange(plot1, plot2, ncol=1, nrow = 2)