R入門その2(最終回)
そもそも、なぜ R をやりはじめたかというと株の歩み値データから 1分足チャートを書きたかったのだった。そんなわけで、自分のやりたい事をひたすら調べながらトライアンドエラーでコードを書いているのでブログの内容がぜんぜん入門な感じじゃない上、出来たコードは未熟だろうけど、まぁ自分向け備忘録ということでひとつ。
やりたかったこと
こんな感じ↓のSBI証券からダウンロードできる歩み値データの CSV ファイルを読み込んで
日付,時間,出来高,約定値 20120104,1500, 11000, 202 20120104,1459, 1000, 202 20120104,1459, 1000, 202 20120104,1459, 1000, 201 20120104,1459, 1000, 202 20120104,1458, 10000, 202 20120104,1458, 1000, 201 20120104,1452, 10000, 201 20120104,1451, 1000, 201 20120104,1451, 1000, 200
歩み値をこんな感じ↓の4本足データに変換して
Open High Low Close Volume Adjusted 2012-01-04 09:00:00 195 196 193 193 119000 193 2012-01-04 09:01:00 195 195 195 195 12000 195 2012-01-04 09:02:00 195 195 195 195 4000 195 2012-01-04 09:04:00 196 196 195 195 30000 195 2012-01-04 09:09:00 195 195 195 195 1000 195 2012-01-04 09:17:00 195 195 194 194 22000 194
任意の日付の日中足チャートを書きたかったのであった。
出来たもの
コード
library(quantmod) ohlc <- function(ttime,tprice,tvolume,fmt) { ttime.int <- format(ttime,fmt) data.frame( time = ttime[tapply(1:length(ttime),ttime.int,function(x) {head(x,1)})], Open = tapply(tprice,ttime.int,function(x) {head(x,1)}), High = tapply(tprice,ttime.int,max), Low = tapply(tprice,ttime.int,min), Close = tapply(tprice,ttime.int,function(x) {tail(x,1)}), Volume = tapply(tvolume,ttime.int,function(x) {sum(x)}), Adjusted = tapply(tprice,ttime.int,function(x) {tail(x,1)})) } # CSVを読み込んで、列名の設定をする csv <- read.csv("1234.csv", header=TRUE, fileEncoding="CP932") names(csv) <- c("Date", "Time", "Volume", "Price") # 日付,時刻をまとめて、日時を作成 times <- sprintf("%04d", as.numeric(csv$Time)) dateTimes <- as.character(paste(csv$Date, times, sep="")) csv$Date <- NULL # Date 列を削除 csv[1] <- as.POSIXct(dateTimes, tz="", format="%Y%m%d%H%M") names(csv) <- c("Datetime", "Volume", "Price") # 歩み値を1分足に変換する ohlc.1min <- ohlc(csv$Datetime, csv$Price, csv$Volume, "%Y%m%d %H%M") # 日時を index にして、time 列を drop rownames(ohlc.1min) <- ohlc.1min$time ohlc.1min$time <- NULL # xts に変換後、ローソク足チャート表示 HOGE <- as.xts(ohlc.1min) candleChart(HOGE, subset='2012-01-18 09:00::2012-01-18 15:00', theme='white')