2011-08-28 56 views
9

我想用quantmod来产生一个这样的图形https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20110826/19da3834/attachment.png如何使用quantmod在chartSeries图上绘制一条线?

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

我的问题是这样的:我想绘制在指定的日期/时间/酒吧和价值的水平线。这条线只允许在某些特定的条形开始处为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) 

同样,添加文本是不可能的。这种方法的另一个问题是我无法摆脱顶部的传说。因为我想提请几十或几百上一个图表图例这些线路的不应该显示...

预先感谢您的想法/代码示例/ ...

最好的问候, 萨莫。

+0

我收到了一个很好的答案/解决方案https://mailman.stat.ethz.ch/pipermail/r-sig-finance/2011q3/008425.html。谢谢。 – Samo

回答

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%的不透明红色: 多边形(C(20,30,40),C(5290,5320,5290),山口= “#ff000033”)

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

+0

Darren,thnx。我有这种方法的一个问题,当我嵌入功能的内部代码需要(quantmod) getSymbols( “SPY”) 你画我猜<-function(){ \t chart_Series(SPY,子集=“2011-08 :: “,type =”candlesticks“) \t text(9,112.00,”SOME TEXT“,adj = 0); \t段(9,111.5,12,111。5);如果我这样做,我得到错误在text.default(9,112,“一些文本”,adj = 0): plot.new尚未被调用。我明白,使用情节(chart_series(...))解决了这个问题,但我有数百行,文本和add_TA,所以它需要年龄replotting ...如何处理? – Samo

+0

@Samo错误信息是一个分心,因为问题是上一行。当您使用在功能中创建绘图的功能时,您必须将其打印出来。即改变你的第一行为'print(chart_Series(SPY,subset =“2011-08 ::”,type =“candlesticks”))' –

+0

你可能有这个解决方案http://stackoverflow.com/questions/8639928/issue-with-quantmod-add-ta-and-chart-series-lines-and-text-disappear-after-nex问题我发布了吗? – Samo

相关问题