忍者ブログ
やったことの記録 主にlinuxとかperlとか
プロフィール
HN:
隠居SE
性別:
非公開
カテゴリー
P R
ブログ内検索
忍者カウンター
[8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Rでローソク足チャートを描くには、quantmodと言うライブラリがあって、
Yahooファイナンスからデータを取ってきたり、
よく利用される指標なども描くことができるようで、
なかなかに優秀なライブラリらしいです。
でも、自分で作ったデータを重ねてプロットするのはあまり得意ではないようです。

また、xtsライブラリにもローソク足を描く機能が備わってるものの、
ちょっとしょんぼりしちゃうレベルだったので、
そのplot.xtsを参考に、作ってみました。

plot.candle.r
#ローソク足グラフ描画
plot.candle <- function( x,
	xlim = NULL,		#x範囲
	ylim = NULL,		#y範囲
	main = "plot.candle",	#グラフタイトル
	up.col   = "#ff3300",	#上昇色
	down.col = "#3385ff",	#下落色
	width    = 30000,	#ローソク足の太さ(日足の場合、60 * 60 * 24 * 0.25)
	date.format = "%m/%d"	#x軸の日付の書式
) {
	up <- subset( x, Close>Open )
	dw <- subset( x, Close<=Open )
	idx <- index( x )
	if( is.null( xlim ) ) {
		min <- min( idx )
		max <- max( idx )
		xlim <- c( min, max )
	}
	if( is.null( ylim ) ) {
		min <- min( x$Low )
		max <- max( x$High )
		ylim <- c( min, max )
	}
	
	#枠描画
	plot( NULL, type="l", cex=0.8, xlim=xlim, ylim=ylim, main=main, xlab="", ylab="", xaxt="n" )
	axis( side=1, at=idx, labels=format( idx, date.format ) )
	
	#ローソク足描画
	n <- names(x)
	order <- c( grep("Open",n),  grep("High",n), grep("Low",n), grep("Close",n) )
	segments( .index(up), up[,order[2]], .index(up), up[,order[3]], col=up.col,   lwd=2 )
	segments( .index(dw), dw[,order[2]], .index(dw), dw[,order[3]], col=down.col, lwd=2 )
	rect( .index(up)-width, up[,order[1]], .index(up)+width, up[,order[4]], col=up.col,   border=up.col   )
	rect( .index(dw)-width, dw[,order[1]], .index(dw)+width, dw[,order[4]], col=down.col, border=down.col )
}

描画するとこんな感じです。


データはxts形式とし、
また、カラム名はplot.xtsやquantmod同様Open,High,Low,Closeであることを前提にし、
xts形式の日付によるインデックス値をそのままx軸に使った関係で土日部分に隙間がありますが、
オプションの引き数をセットしてもwarning出ないし、
陰線と陽線で色分けできてるし、
日付も成型できるし、
何よりも、自分で作ったデータも重ねて描けます♪

xtsやめてtsやdata.frameを使い、
日付をcharacter形式で与えるようにすれば、
もう少し柔軟なグラフになるでしょうけど、
それは次の機会に^^


#R言語 #ローソク足
PR
Powerd by NINJAブログ / Designed by SUSH
Copyright © 隠居SEの備忘録 All Rights Reserved.
忍者ブログ/[PR]