闪亮的股票图表错误:chartSeries需要一个xtsible对象

时间:2019-05-21 00:52:39

标签: r xts shiny-server

我有以下代码。我想输入有效的股票代码并渲染烛台图。我想让用户可以选择在图表上的20天,50天和200天的简单移动平均线之间进行切换。但是,当我运行该应用程序时,mainPanel返回:

Error: chartSeries requires an xtsible object. 

这是我的第一个Shiny App开发项目,我不知道为什么它不起作用。

library(shiny)
library(quantmod)
library(lubridate)

shinyUI(fluidPage(
    titlePanel("Candlestick Stock Charts"),
    sidebarLayout(
        sidebarPanel(
            textInput("symb", "Input a Valid Stock Symbol", "AAPL"),

            radioButtons("radioMoveAvg",
                         "Moving Averages",
                         c("20-day" = "twentyAvg",
                           "50-day" = "fiftyAvg", 
                           "200-day" = "twohundAvg"))
        ),

        mainPanel(
            plotOutput("candleStick")
        )
    )
))

library(shiny)
library(quantmod)
library(lubridate)

shinyServer(function(input, output) {
    cs<-reactive({
        getSymbols(input$symb,
                   src = "yahoo",
                   from = Sys.Date()-years(2),
                   to = Sys.Date(),
                   auto.assign = FALSE)[, 4]

    })

    moveAvg<-reactive({
        if(input$radioMoveAvg=="twentyAvg"){
            x = 20
            col = "blue"
        }
        if(input$radioMoveAvg=="fiftyAvg"){
            x = 50
            col = "green"
        }
        if(input$radioMoveAvg=="twohundAvg"){
            x = 200
            col = "pink"
        }
    })

    output$candleStick <- renderPlot({
        candleChart(cs, up.col = "black", dn.col = "red", theme = "white", subset = "2019-01-01/")
        addSMA(moveAvg)
    })
})

1 个答案:

答案 0 :(得分:0)

在我的代码中发现错误。删除了lubridate软件包,因为在getSymbols函数中不需要它。将addSMA函数移至moveAvg反应式语句中。正如我在开始该项目时所想象的那样,代码正在工作。