如何使用 quantmod 在新绘图中叠加多个 TA?
How to overlay multiple TA in new plot using quantmod?
我们可以使用图表系列函数绘制蜡烛图 chartSeries(Cl(PSEC))
我创建了一些自定义值 (I1,I2和 I3) 我想在烛台图案之外一起绘制(叠加)。为此,我使用了 addTA()
chartSeries(Cl(PSEC)), TA="addTA(I1,col=2);addTA(I2,col=3);addTA(I3,col=4)")
问题是它分别为 Cl(PSEC)、I1、I2 和 I3 绘制了四个图,而不是两个图我想要 Cl(PSEC) 和 (I1,I2,I3)
已编辑
为清楚起见,我给出了一个示例代码,其中包含为此目的创建的 I1、I2 和 I3 变量
library(quantmod)
PSEC=getSymbols("PSEC",auto.assign=F)
price=Cl(PSEC)
I1=SMA(price,3)
I2=SMA(price,10)
I3=SMA(price,15)
chartSeries(price, TA="addTA(I1,col=2);addTA(I2,col=3);addTA(I3,col=4)")
这里有一个选项,它主要保留了您的原始代码。
您可以在第一个之后使用选项 on=2
为每个 TA 获得所需的结果:
library(quantmod)
getSymbols("PSEC")
price <- Cl(PSEC)
I1 <- SMA(price,3)
I2 <- SMA(price,10)
I3 <- SMA(price,15)
chartSeries(price, TA=list("addTA(I1, col=2)", "addTA(I2, col=4, on=2)",
"addTA(I3, col=5, on=2)"), subset = "last 6 months")
如果您想在一张图表中叠加价格和 SMA,您可以为每个 TA 使用选项 on=1
。
感谢@hvollmeier,他的回答让我意识到我在之前版本的回答中误解了你的问题。
PS:请注意?addSMA()
中描述了几个选项,包括with.col
可用于select时间序列的特定列(Cl是默认列)。
如果我对你的理解正确,你希望 3 个 SMA 在子图中而不是在你的主图表中 window.You 可以使用 newTA
执行以下操作。
使用您的数据:
PSEC=getSymbols("PSEC",auto.assign=F)
price=Cl(PSEC)
现在在主要 window 下方的 window 中绘制 10、30、50 天 SMA:
chartSeries(price['2016'])
newSMA <- newTA(SMA, Cl, on=NA)
newSMA(10)
newSMA(30,on=2)
newSMA(50,on=2)
关键是参数on
。在定义新的 TA 函数时使用 on = NA
,因为 on
的默认值为 1,这是主要的 window。 on = NA
新情节 window。然后将剩余的 SMA 绘制到与第一个 SMA 相同的 window。根据自己的喜好设置颜色 etc.to :-)。
您可能需要考虑使用 quantmod
包中较新的 quantmod 图表绘图来解决此任务(chart_Series
而不是 chartSeries
)。
优点:
-情节看起来更干净更好(?)
- 通过将 pars
和 themes
选项编辑为 chart_Series
来获得更大的灵活性(请参阅此处关于 SO 的其他示例,了解使用 pars
和 [=15 可以做的事情的基础知识=])
缺点:
-没有很好的记录。
PSEC=getSymbols("PSEC",auto.assign=F)
price=Cl(PSEC)
chart_Series(price, subset = '2016')
add_TA(SMA(price, 10))
add_TA(SMA(price, 30), on = 2, col = "green")
add_TA(SMA(price, 50), on = 2, col = "red")
# Make plot all at once (this approach is useful in shiny applications):
print(chart_Series(price, subset = '2016', TA = 'add_TA(SMA(price, 10), yaxis = list(0, 10));
add_TA(SMA(price, 30), on = 2, col = "purple"); add_TA(SMA(price, 50), on = 2, col = "red")'))
我们可以使用图表系列函数绘制蜡烛图 chartSeries(Cl(PSEC))
我创建了一些自定义值 (I1,I2和 I3) 我想在烛台图案之外一起绘制(叠加)。为此,我使用了 addTA()
chartSeries(Cl(PSEC)), TA="addTA(I1,col=2);addTA(I2,col=3);addTA(I3,col=4)")
问题是它分别为 Cl(PSEC)、I1、I2 和 I3 绘制了四个图,而不是两个图我想要 Cl(PSEC) 和 (I1,I2,I3)
已编辑
为清楚起见,我给出了一个示例代码,其中包含为此目的创建的 I1、I2 和 I3 变量
library(quantmod)
PSEC=getSymbols("PSEC",auto.assign=F)
price=Cl(PSEC)
I1=SMA(price,3)
I2=SMA(price,10)
I3=SMA(price,15)
chartSeries(price, TA="addTA(I1,col=2);addTA(I2,col=3);addTA(I3,col=4)")
这里有一个选项,它主要保留了您的原始代码。
您可以在第一个之后使用选项 on=2
为每个 TA 获得所需的结果:
library(quantmod)
getSymbols("PSEC")
price <- Cl(PSEC)
I1 <- SMA(price,3)
I2 <- SMA(price,10)
I3 <- SMA(price,15)
chartSeries(price, TA=list("addTA(I1, col=2)", "addTA(I2, col=4, on=2)",
"addTA(I3, col=5, on=2)"), subset = "last 6 months")
如果您想在一张图表中叠加价格和 SMA,您可以为每个 TA 使用选项 on=1
。
感谢@hvollmeier,他的回答让我意识到我在之前版本的回答中误解了你的问题。
PS:请注意?addSMA()
中描述了几个选项,包括with.col
可用于select时间序列的特定列(Cl是默认列)。
如果我对你的理解正确,你希望 3 个 SMA 在子图中而不是在你的主图表中 window.You 可以使用 newTA
执行以下操作。
使用您的数据:
PSEC=getSymbols("PSEC",auto.assign=F)
price=Cl(PSEC)
现在在主要 window 下方的 window 中绘制 10、30、50 天 SMA:
chartSeries(price['2016'])
newSMA <- newTA(SMA, Cl, on=NA)
newSMA(10)
newSMA(30,on=2)
newSMA(50,on=2)
关键是参数on
。在定义新的 TA 函数时使用 on = NA
,因为 on
的默认值为 1,这是主要的 window。 on = NA
新情节 window。然后将剩余的 SMA 绘制到与第一个 SMA 相同的 window。根据自己的喜好设置颜色 etc.to :-)。
您可能需要考虑使用 quantmod
包中较新的 quantmod 图表绘图来解决此任务(chart_Series
而不是 chartSeries
)。
优点:
-情节看起来更干净更好(?)
- 通过将 pars
和 themes
选项编辑为 chart_Series
来获得更大的灵活性(请参阅此处关于 SO 的其他示例,了解使用 pars
和 [=15 可以做的事情的基础知识=])
缺点:
-没有很好的记录。
PSEC=getSymbols("PSEC",auto.assign=F)
price=Cl(PSEC)
chart_Series(price, subset = '2016')
add_TA(SMA(price, 10))
add_TA(SMA(price, 30), on = 2, col = "green")
add_TA(SMA(price, 50), on = 2, col = "red")
# Make plot all at once (this approach is useful in shiny applications):
print(chart_Series(price, subset = '2016', TA = 'add_TA(SMA(price, 10), yaxis = list(0, 10));
add_TA(SMA(price, 30), on = 2, col = "purple"); add_TA(SMA(price, 50), on = 2, col = "red")'))