How to add a custom indicator to Shiny, R quantmod 问题
How to add a custom indicator to Shiny, R quantmod question
我是新手,尝试将自定义指标添加到 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" 函数吗?
我无法真正尝试它是否有效,但基于我的 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()) ) })
})
})
对于可能遇到类似问题的任何人。
诀窍是将自定义指标的两个函数放在另一个文件中,并将其包含在 server.R.
中
helper.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()) )
})
})
})
我是新手,尝试将自定义指标添加到 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" 函数吗?
我无法真正尝试它是否有效,但基于我的 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()) ) })
})
})
对于可能遇到类似问题的任何人。
诀窍是将自定义指标的两个函数放在另一个文件中,并将其包含在 server.R.
中helper.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()) )
})
})
})