如何使用quantmod在chartSeries图上画一条线?

时间:2011-08-28 04:02:44

标签: r charts quantmod

我想使用quantmod生成类似https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20110826/19da3834/attachment.png的图。

我觉得我有点沮丧,这是一项非常简单的任务。我希望能够使用quantmod在图表上绘制一条线。经过几天的尝试,我无处可去。我看不到有关如何使用quantmod :: addLines函数执行此操作的示例(这是我找到的唯一类似问题,但无法在其上找到答案http://r.789695.n4.nabble.com/quantmod-plot-trendline-td894632.html

我的问题是:我想在指定的日期/时间/条nad y值绘制一条水平线。这条线只允许从某个特定条形开始长n(例如5条)条(另外我还想在指定的y值的行上方添加文本)。

我尝试了几件事:

getSymbols("SPY")

lines.SPY <- (Hi(SPY) + Lo(SPY))/2
names(lines.SPY) <- c("lines")
lines.SPY$BuySell <- ifelse(lag(lines.SPY$lines) > lines.SPY$lines, 1, -1)

chartSeries(SPY, subset="2011-08::", theme=chartTheme('white',
up.col='blue', dn.col='red'))
addTA(lines.SPY$lines[lines.SPY$BuySell == -1,], type='p', col='darkred', pch="_", on=1, cex = 2.5)
addTA(lines.SPY$lines[lines.SPY$BuySell == 1,], type='p', col='green4', pch="_", on=1, cex = 2.5)

但这实际上不是线......而且我不知道要添加文字......

然后我尝试了这个

getSymbols("SPY")

subset = "2011-03::"

dev.new()
chartSeries(SPY, subset=subset, theme="white")
test <- xts(rep(coredata(last(Cl(SPY))), 20), order.by=index(last(SPY, n=20)))
addTA(test, on=1, col="red", legend=NULL, lwd=3)

同样,无法添加文字。这种方法的另一个问题是我无法摆脱顶部的传说。由于我想在一个图表上绘制数十或数百行,不应显示图例...

提前感谢您的想法/代码示例/ ...

祝你好运, 萨莫。

1 个答案:

答案 0 :(得分:3)

(我只是抄袭R-sig-finance的答案,Stergios Marinopoulos) 使用新的chart_Series()函数以及文本和段。

require(quantmod) 
getSymbols("SPY") 
chart_Series(SPY, subset="2011-08::", type = "candlesticks" ) 
text(9, 112.00, "SOME TEXT", adj=0); 
segments(9, 111.5, 12, 111.5) ; 

我的一些额外评论。要添加消息:text(x,y,"message")其中x是条形的数字(最左边的条形图为1;您可以使用0或负条形图来绘制左侧),y是图表中的值。对于adj,0表示左对齐,1表示右对齐,0.5表示居中。在0..1范围之外相应地移动它(但也许不明智地依赖它)。

段(x1,y1,x2,y2)从(x1,y1)到(x2,y2)绘制一条线,其中x是条形索引,y是价格。

以下绘制等腰三角形,20%不透明红色:    polygon(c(20,30,40),c(5290,5320,5290),col =“#ff000033”)

即。所有R图形功能都可用;但你必须使用chart_Series()。