# Rによる株式データの取得とグラフの描画 # http://logics-of-blue.com/get-stock-data-and-plot-with-r/ # 2017年7月6日 # 馬場 真哉 # ----------------------------------------------------------------------- # Webから株式データを取得する関数 # ----------------------------------------------------------------------- getStockFromKdb <- function(code, year){ # 『株価データサイト k-db.com』(http://k-db.com/)様からデータを取得する # # Args: # code: 証券コード # year: 取得対象となる年 # # Returns: # stock: 株価のデータ(日足) stocks <- NULL # 指定された証券コード、年をまとめて取得する for(i in 1:length(code)){ for(j in 1:length(year)){ # 『k-db.com』のURLを指定してデータを取得 url <- paste("http://k-db.com/stocks/", code[i], "-T/1d/", year[j], "?download=csv",sep="") stock <- read.csv(url, header = T) # 列名称を変更 colnames(stock) <- c("Date", "Open", "High", "Low", "Close", "Volume", "Volume_money") # 証券コードを追加 tickerSymbol <- data.frame(tickerSymbol = rep(code[i], nrow(stock))) stock <- cbind(tickerSymbol, stock) # 取得されたデータを保存 if(is.null(stocks)){ stocks <- stock } else{ stocks <- rbind(stocks, stock) } # 次のデータを取得する前に少し待つ if(i < length(code) || j < length(year)){ Sys.sleep(0.5) } } } return(stocks) } # ----------------------------------------------------------------------- # 株価の取得 # ----------------------------------------------------------------------- # みずほHGの株価を取得する mizuho <- getStockFromKdb(8411, 2016) head(mizuho) tail(mizuho) # みずほHGとガンホーの2015-2017年データを取得 stocks_data <- getStockFromKdb(c(3765, 8411), 2015:2017) mizuho <- stocks_data[stocks_data$tickerSymbol == 8411, -1] mizuho ganho <- stocks_data[stocks_data$tickerSymbol == 3765, -1] ganho # ----------------------------------------------------------------------- # xtsによるデータの操作 # ----------------------------------------------------------------------- # install.packages("quantmod") library(quantmod) # xts形式に変換 mizuho_xts <- as.xts(read.zoo(mizuho)) ganho_xts <- as.xts(read.zoo(ganho)) # データの型が変わったことを確認 class(mizuho) class(mizuho_xts) # 最も古いデータ first(mizuho_xts) # 最も新しいデータ last(mizuho_xts) # データの抽出 # 特定の日付 mizuho_xts["2017-01-06"] # 月単位で取得 mizuho_xts["2017-01"] # 範囲を指定して抽出 mizuho_xts["2017-01-06::2017-01-15"] # ある日付以降をすべて取得 mizuho_xts["2017-06-20::"] # ある月以降をすべて取得(mizuho_xts["2017-06-01::"]としても同じ) mizuho_xts["2017-06::"] # ----------------------------------------------------------------------- # 株価の図示 # ----------------------------------------------------------------------- # ローソク足のグラフを描く chartSeries( mizuho_xts, type="candlesticks" ) # 2017年6月のみを対象とする chartSeries( mizuho_xts, subset="2017-06", type="candlesticks" ) mizuho_xts["2017-06"] # テクニカル指標を追加 chartSeries( mizuho_xts, type="candlesticks", subset="2016-07::", TA="addSMA(n=25, col='white'); addSMA(n=75, col='green')" ) # グラフのデザインを大きく変更 chartSeries( mizuho_xts, type="candlesticks", subset="2016-07::", TA="addSMA(n=25); addSMA(n=75, col='green'); addVo()", theme=chartTheme('white', up.col='white',dn.col='blue') ) # ガンホー様の終値の期待値 mean(ganho_xts["2016", "Close"]) # 日付のインデックス idx <- index(ganho_xts["2016"]) idx N <- length(idx) N # 期待値をxts形式で保存する mean_data <- xts(rep(mean(ganho_xts["2016", "Close"]), N), order.by = idx) mean_data # 期待値も併せて描画 chartSeries(ganho_xts, subset = "2016") addTA(mean_data, on=1, lwd=2)