やったことの記録
主にlinuxとかperlとか
プロフィール
HN:
隠居SE
性別:
非公開
最新記事
(12/12)
(09/28)
(09/26)
(09/25)
(09/21)
P R
ブログ内検索
忍者カウンター
2025/04/20 (Sun)
03:46:34
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
2017/07/01 (Sat)
10:39:04
[R言語] ローソク足を描く
Rでローソク足チャートを描くには、quantmodと言うライブラリがあって、
Yahooファイナンスからデータを取ってきたり、
よく利用される指標なども描くことができるようで、
なかなかに優秀なライブラリらしいです。
でも、自分で作ったデータを重ねてプロットするのはあまり得意ではないようです。
また、xtsライブラリにもローソク足を描く機能が備わってるものの、
ちょっとしょんぼりしちゃうレベルだったので、
そのplot.xtsを参考に、作ってみました。
plot.candle.r
描画するとこんな感じです。
データはxts形式とし、
また、カラム名はplot.xtsやquantmod同様Open,High,Low,Closeであることを前提にし、
xts形式の日付によるインデックス値をそのままx軸に使った関係で土日部分に隙間がありますが、
オプションの引き数をセットしてもwarning出ないし、
陰線と陽線で色分けできてるし、
日付も成型できるし、
何よりも、自分で作ったデータも重ねて描けます♪
xtsやめてtsやdata.frameを使い、
日付をcharacter形式で与えるようにすれば、
もう少し柔軟なグラフになるでしょうけど、
それは次の機会に^^
#R言語 #ローソク足
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