gpt4 book ai didi

r - 使用 chartSeries 的 react 语句绘制多个符号

转载 作者:行者123 更新时间:2023-12-04 11:29:42 25 4
gpt4 key购买 nike

我是 Shiny 的新手,在这里完成了 Shiny 教程: http://shiny.rstudio.com/tutorial/

在第 6 课中,本教程向我们展示了如何创建一个应用程序,您可以在其中输入股票代码和日期范围以在主面板上查看其图表。

我试图更进一步,将应用程序更改为采用 2 个股票代码并将它们绘制在同一个图表上以比较它们随时间变化的应用程序(重叠在同一个图表上)。

我已经将 server.R 修改为:

library(quantmod)

shinyServer(function(input, output) {



dataInput <- reactive({
getSymbols(c(input$symb1, input$symb2), src = "yahoo",
from = input$dates[1],
to = input$dates[2],
auto.assign = TRUE)
})


output$plot <- renderPlot({
chartSeries(dataInput(), theme = chartTheme("white"),
type = "line", log.scale = input$log, TA = NULL)
})
})

我的 uiR 是:

library(shiny)

shinyUI(fluidPage(
titlePanel("StockComp"),

sidebarLayout(
sidebarPanel(
helpText("Select two stocks and a time frame to compare.
Information will be collected from yahoo finance."),

textInput("symb1", "1st Stock Symbol", "GOOG"),
textInput("symb2", "2nd Stock Symbol", "AAPL"),

dateRangeInput("dates",
"Date range",
start = "2012-01-01",
end = as.character(Sys.Date())),

actionButton("get", "Compare Stocks"),

br(),
br(),

checkboxInput("log", "Plot y axis on log scale",
value = FALSE)

),

mainPanel(plotOutput("plot"))
)
))

我得到:

try.xts(x, error = "chartSeries requires an x​​tsible object") 错误: chartSeries 需要一个 xtsible 对象

我曾尝试将 dataInput 转换为 XTS,但由于我对发生的事情的理解有限,XTS 和响应式(Reactive)似乎给我带来了很多问题。

最佳答案

正如@RHertel 提到的,这不是那么容易做到的。但只是为了说明,我稍微调整了您的 server.R 脚本,这样您就可以看到结果如何。我在脚本中添加了一些注释,以便您了解更改内容。

首先,我将两个数据集分开,因为一旦设置了 auto.assign=TRUE,您就不能再调用 dataInput,希望它返回两个数据集。 auto.assign=TRUE 的作用是自动将您的两个数据集分别分配给全局环境。所以在这种情况下有一种不同的方式来调用数据集。为了避免麻烦,将两个数据集分开,这样您就可以设置 auto.assign=FALSE 并从 `dataInput.

调用数据集。

接下来,我将这两个数据集存储在一个列表中,以便您稍后可以在脚本中的 output$plot 中分别调用它们。

最后,我添加了 TA 参数,正如@RHertel 上面所解释的那样。我必须使用 paste 功能来自动执行该过程。

如您所见,输出看起来很难看,仍然需要一些清理。但我只是想让你知道它会是什么样子。我不是金融专家,但我几乎从不希望在一张图表上看到多个股票价格,因为它们可能会有很大差异,你可能会得到如下图所示的奇怪图表。为了标准化比例,通常将股票返回绘制在一张图表上,因为即使价格可能不同,返回也有 0-100% 的下限和上限。所以它们会落在相同的尺度上。

library(quantmod)

shinyServer(function(input, output) {



dataInput <- reactive({
data1 <- getSymbols(input$symb1, src = "yahoo", #Seperated the data into two seperate data sets and set auto.assign=FALSE
from = input$dates[1],
to = input$dates[2],
auto.assign = FALSE)
data2 <- getSymbols(input$symb2, src = "yahoo", #Seperated the data into two seperate data sets and set auto.assign=FALSE
from = input$dates[1],
to = input$dates[2],
auto.assign = FALSE)
return (list(data1,data2)) #Stored the data sets in a single list
})


output$plot <- renderPlot({
chartSeries(dataInput()[[1]], TA=paste0("addTA(",input$symb1,",on=1)"),theme = chartTheme("white"), #added the TA argument with the paste helper function
type = "line", log.scale = input$log)
chartSeries(dataInput()[[2]], TA=paste0("addTA(",input$symb2,",on=1)"),theme = chartTheme("white"),
type = "line", log.scale = input$log)
})
})

关于r - 使用 chartSeries 的 react 语句绘制多个符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31641704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com