0

我是新手,试图向 Shiny/R quantmod 应用程序添加自定义指标。

R 脚本中的以下代码运行良好。

library(quantmod)
getSymbols('SBUX')
barChart(SBUX)
# create new TA function
myInd <- function(x) {
  return(WMA(Cl(x)))
}
addMyInd <- newTA(FUN = myInd)
addMyInd()

闪亮的等价物

library(shiny)
library(quantmod)

myInd <- function(x) {
  return(WMA(Cl(x)))
}
addMyInd <- newTA(FUN = myInd)

shinyServer(function(input, output,session) {
observe({
  query <- parseQueryString(session$clientData$url_search)
  dataInput <- reactive({ as.xts(getSymbols('SBUX', auto.assign = FALSE)) })
  output$chart <- renderPlot({ chartSeries(dataInput(), name = 'SBUX', TA = c(addMyInd()) ) })  
 })
})

失败并出现错误:找不到函数“myInd”。

而用任何内置函数替换“addMyInd”效果很好。

output$chart <- renderPlot({ chartSeries(dataInput(), name = 'SBUX', TA = c(addWMA()) )

知道如何让 Shiny 找到“myInd”函数吗?

4

2 回答 2

0

对于任何可能面临类似问题的人。

诀窍是将自定义指标的两个函数放在另一个文件中,并将其包含在 server.R 中。

助手.R

library(quantmod)

myInd <- function(x) {
    return(WMA(Cl(x)))
}

addMyInd <- newTA(FUN = myInd)

和 server.R 只是读取

library(shiny)
library(quantmod)

source("helper.R");

shinyServer(function(input, output,session) {
observe({
  query <- parseQueryString(session$clientData$url_search)
  dataInput <- reactive({ as.xts(getSymbols('SBUX', auto.assign = FALSE)) })
  output$chart <- renderPlot({ 
    chartSeries(dataInput(), name = 'SBUX', TA = c(addMyInd()) ) 
    }) 
 })
})
于 2020-06-13T09:18:44.283 回答
0

我无法真正尝试它是否有效,但基于我的 Shiny 应用程序,您可以尝试 a) 使其具有反应性:

myInd <- function(x) {
  reactive(return(WMA(Cl(x))))
}

b) 将其放入服务器调用中:

shinyServer(function(input, output,session) {

  myInd <- function(x) {
    reactive(return(WMA(Cl(x))))
  }
  addMyInd <- newTA(FUN = myInd)

  observe({
    query <- parseQueryString(session$clientData$url_search)
    dataInput <- reactive({ as.xts(getSymbols('SBUX', auto.assign = FALSE)) })
    output$chart <- renderPlot({ chartSeries(dataInput(), name = 'SBUX', TA = c(addMyInd()) ) })  
  })
})
于 2020-06-07T13:29:13.247 回答