Below is an app I am trying to make using flexdashboard, which consists of multiple pages.(Right now making second page which is called CH2)
---
title: "Financial TS Analysis"
runtime: shiny
output:
flexdashboard::flex_dashboard:
orientation: rows
vertical_layout: fill
smooth_scroll: true
theme: simplex
---
```{r setup, include=FALSE}
library(flexdashboard)
library(fBasics)
library(FinTS)
library(tidyquant)
library(shiny)
library(quantmod)
library(ggplot2)
library(highcharter)
library(shinyjs)
library(htmltools)
scroll_css = "<style> #section-text {overflow-y: scroll;}</style>"
```
Sidebar {.sidebar}
=========================================
```{r echo=FALSE}
tags$h5("Please click the submit button after every input change")
tags$hr()
textInput("tickers","Ticker",value = "",placeholder = "tickers")
dateInput("from","Starting Date",format = "yyyy-mm-dd")
sliderInput("k","Number of Period",min = 0,max = 250,value = 10)
checkboxGroupInput("priceKind","Kind (Choose 1)",c("Open","High","Low","Close"),selected = "Close",inline = TRUE)
# Close = Adjusted
kind = c("Open","High","Low","Close")
kindIndex = c(1,2,3,4)
names(kindIndex) = kind
numericInput("x","Initial Investment in $",value = 0)
sliderInput("m","Number of Periods of Interest Payment per annum",min = 1,max = 365,value = 2)
sliderInput("r","Interest year per annum",min = 0,max = 1,value = 0.05)
actionButton("go","Submit")
```
CH 1
=========================================
Row {data-height=300}
-----------------------------------------
```{css my-style, echo=FALSE}
#section-notes-and-formulas
.chart-stage-flex {
overflow-y: scroll;
}
```
### Notes and Formulas
```{r}
htmltools::includeMarkdown('Notes.Rmd')
```
Row {.tabset .tabset-fade}
---------------------------------------------
### Price
```{r}
## Data retrieval based on starting date and tickers
data = eventReactive(input$go,{
data = getSymbols(Symbols = input$tickers,src = "yahoo",from = input$from,to = Sys.Date(),auto.assign = FALSE)
data =data[,kindIndex[input$priceKind]]
data
})
## Showing data
renderHighchart({
data = data()
highchart(type="stock") %>% hc_title(text = paste("price of ",input$tickers,sep = "")) %>%
hc_add_series(data,name="Price",color="blue") %>%
hc_navigator(enabled=TRUE) %>%
hc_scrollbar(enabled=TRUE) %>%
hc_exporting(enabled=TRUE) %>%
hc_chart(zoomType = "xy")
})
```
### Return (1)
```{r}
get_One_Period_Simple_Return = function(price){
n = length(price)
Return = (price[2:n]/price[1:(n-1)])
return(Return)
}
renderHighchart({
data = data()
data = as.xts(apply(data,2,get_One_Period_Simple_Return))
highchart(type="stock") %>% hc_title(text = paste("One-Period Simple Return of ",input$tickers,sep = "")) %>%
hc_add_series(data,name="Return",color="blue") %>%
hc_navigator(enabled=TRUE) %>%
hc_scrollbar(enabled=TRUE) %>%
hc_exporting(enabled=TRUE) %>%
hc_chart(zoomType = "xy")
})
```
### Return (2)
```{r}
get_One_Period_Simple_Net_Return = function(price){
n = length(price)
Return = (price[2:n]/price[1:(n-1)]) - 1
return(Return)
}
renderHighchart({
data = data()
data = as.xts(apply(data,2,get_One_Period_Simple_Net_Return))
highchart(type="stock") %>% hc_title(text = paste("One-Period Simple Net Return of ",input$tickers,sep="")) %>%
hc_add_series(data,name="Return",color="blue") %>%
hc_navigator(enabled=TRUE) %>%
hc_scrollbar(enabled=TRUE) %>%
hc_exporting(enabled=TRUE) %>%
hc_chart(zoomType = "xy")
})
```
### Return (3)
```{r}
get_multi_Period_Simple_Return = function(price,k){
n = length(price)
Return = (price[k:n]/price[1:(n-k)])
return(Return)
}
renderHighchart({
data = data()
data = as.xts(apply(data,2,get_multi_Period_Simple_Return,input$k))
highchart(type="stock") %>% hc_title(text = paste("Multiperiod Simple Gross Return of ",input$tickers,sep="")) %>%
hc_add_series(data,name="Return",color="blue") %>%
hc_navigator(enabled=TRUE) %>%
hc_scrollbar(enabled=TRUE) %>%
hc_exporting(enabled=TRUE) %>%
hc_chart(zoomType = "xy")
})
```
### Return (4)
```{r}
get_multi_Period_Simple_Return = function(price,k){
n = length(price)
Return = (price[k:n]-price[1:(n-k)])/price[1:(n-k)]
return(Return)
}
renderHighchart({
data = data()
data = as.xts(apply(data,2,get_multi_Period_Simple_Return,input$k))
highchart(type="stock") %>% hc_title(text = paste("k-period Simple Net Return of ",input$tickers,sep="")) %>%
hc_add_series(data,name="Return",color="blue") %>%
hc_navigator(enabled=TRUE) %>%
hc_scrollbar(enabled=TRUE) %>%
hc_exporting(enabled=TRUE) %>%
hc_chart(zoomType = "xy")
})
```
### Return (5)
```{r}
get_multi_Period_Simple_Return = function(price,k){
n = length(price)
Return = ((price[k:n]/price[1:(n-k)]))^(1/k) -1
return(Return)
}
renderHighchart({
data = data()
data = as.xts(apply(data,2,get_multi_Period_Simple_Return,input$k))
highchart(type="stock") %>% hc_title(text = paste("Annualized Return of ",input$tickers,sep="")) %>%
hc_add_series(data,name="Return",color="blue") %>%
hc_navigator(enabled=TRUE) %>%
hc_scrollbar(enabled=TRUE) %>%
hc_exporting(enabled=TRUE) %>%
hc_chart(zoomType = "xy")
})
```
### Compounding Effect (6)
```{r}
compounder = function(C,m,r) {
values = c()
for (i in 1:m) {
val = C*(1+r/i)^i
values = c(values,val)
}
t = 1:m
names(values) = t
return(values)
}
renderPlot({
data = compounder(input$x,input$m,input$r)
plot(1:input$m,data,xlab = "period",ylab = "value",main=paste("growth of ",input$x,"$ principal when r = ",input$r," and number of compounding period is ",input$m,sep=""))
})
```
### Return (7)
```{r}
log_return = function(price){
n = length(price)
Return = log(price[2:n]/price[1:(n-1)])
return(Return)
}
renderHighchart({
data = data()
data = as.xts(apply(data,2,log_return))
highchart(type="stock") %>% hc_title(text = paste("Log Return of ",input$tickers,sep = "")) %>%
hc_add_series(data,name="Return",color="blue") %>%
hc_navigator(enabled=TRUE) %>%
hc_scrollbar(enabled=TRUE) %>%
hc_exporting(enabled=TRUE) %>%
hc_chart(zoomType = "xy")
})
```
### Basic Statistics of Return in \%
```{r}
returns = eventReactive(input$go,{
data = data()
returns = apply(data,2,get_One_Period_Simple_Net_Return)*100
returns
})
renderTable({basicStats(returns())},rownames = TRUE,border = TRUE,striped = TRUE,hover = TRUE)
```
### t-test (log returns)
```{r}
logR = eventReactive(input$go,{
data = data()
returns = apply(data,2,log_return)*100
returns
})
renderPrint({t.test(logR())})
```
### Normality Test (JB)
```{r}
renderPrint({normalTest(logR(),method='jb')})
```
CH2
============================================
what I am wondering is how can I have a sidebar with different input widgets for my second page(CH2). as you can see I have a sidebar for first page (CH1) but want a different sidebar just for second page.
you can use Inputs {.sidebar} on each page. See https://rmarkdown.rstudio.com/flexdashboard/layouts.html#input_sidebar
---
title: "Sidebar"
output: flexdashboard::flex_dashboard
runtime: shiny
---
Page 1
=====================================
Inputs {.sidebar}
-------------------------------------
```{r}
# shiny inputs for first page defined here
```
Column
-------------------------------------
### Chart 1
```{r}
```
### Chart 2
```{r}
```
Page 2
=====================================
Inputs {.sidebar}
-------------------------------------
```{r}
# shiny inputs for second page defined here
```
Column
-------------------------------------
### Chart 1
```{r}
```
### Chart 2
```{r}
```