Skip to content
Snippets Groups Projects
Commit 544fd82f authored by victarr's avatar victarr
Browse files

Upload New File

parent 7a5057be
Branches
No related tags found
No related merge requests found
library(tidyquant)
library(tidyverse)
library(plotly)
load("../../RData/activos.RData")
server <- function(input, output, session) {
Data <- reactive({
empresas <- paste(input$empresas)
# Datos
valores <- NULL
for(i in 1:length(empresas)){
valores <- c(valores, activos$simbolo[activos$activo == empresas[i]][1])
}
datos <- NULL
minDim <- 999999
for(i in 1:length(valores)){
aux <- getSymbols(valores[i], from = input$date_range[1],
to = input$date_range[2], warnings = FALSE, auto.assign = FALSE)
naux <- names(aux)[6]
names(aux) <- c("open", "high", "low", "close", "volume", "adjusted")
if(length(aux$adjusted) < minDim){
minDim <- length(aux$adjusted)
}
}
for(i in 1:length(valores)){
aux <- tail(getSymbols(valores[i], from = input$date_range[1],
to = input$date_range[2], warnings = FALSE, auto.assign = FALSE), n = minDim)
naux <- names(aux)[6]
names(aux) <- c("open", "high", "low", "close", "volume", "adjusted")
datos <- cbind(datos, aux$adjusted)
names(datos)[dim(datos)[2]] <- naux
}
# Eliminar valores na generados como fruto de mezclar valores que pueden haber
# cotizado en diferentes dias al ser de mercados diferentes y que se produzca el
# caso de que un valor un dia no ha cotizado y otros valores si lo han hecho
datos <- na.omit(datos)
returns <- 1 + Return.calculate(datos)
returns <- returns[-1,]
})
pdf(NULL)
output$grafico <- renderPlotly({
if(input$start > 0){
returns <- Data()
if(length(input$empresas) > 2){
media <- apply(returns, 2, mean)
varianza <- apply(returns, 2, var)
}
else{
media <- mean(returns)
varianza <- var(returns)
}
media <- (media - 1)*100
varianza <- varianza * 100
n_activos <- length(input$empresas)
medias <- NULL
varianzas <- NULL
for(i in 1:input$n){
muestra <- sample(0:10000, size = n_activos)
proporciones <- muestra/sum(muestra)
media_aux <- sum(media*proporciones)
varianza_aux <- sum(varianza*proporciones)
medias <- c(medias, media_aux)
varianzas <- c(varianzas, varianza_aux)
}
sharpe <- (medias - (input$sharpe - 1)*100)/sqrt(varianzas)
data <- data.frame("rentabilidad" = medias, "riesgo" = varianzas, "sharpe" = sharpe)
data_aux <- data[order(data$sharpe, decreasing = TRUE),]
data_sharpe <- data_aux[1,]
data_aux <- data[order(data$rentabilidad, decreasing = TRUE),]
data_max <- data_aux[1,]
data_aux <- data[order(data$riesgo),]
data_min <- data_aux[1,]
fig <- plot_ly(data, type = 'scatter', mode = 'markers')
fig <- fig %>%
add_trace(x = ~riesgo, y = ~rentabilidad, name = ' ', marker = list(size = 5,
colorbar = list(title = "Ratio Sharpe"), color = ~sharpe, colorscale = 'Viridis', reversescale = T),
hovertemplate = "Rentabilidad: %{y}<br>Riesgo: %{x}", showlegend = F)
# Se anaden los puntos de las carteras notables obtenidas en la simulacion
fig <- fig %>%
add_trace(x = data_min$riesgo, y = data_min$rentabilidad,
name = "Mínimo riesgo", marker = list(size = 10, color = "orange", symbol = 'diamond-dot'),
hovertemplate = "Rentabilidad: %{y}<br>Riesgo: %{x}", showlegend = F)
fig <- fig %>%
add_trace(x = data_max$riesgo, y = data_max$rentabilidad,
name = "Máxima rentabilidad", marker = list(size = 10, color = "blue", symbol = 'diamond-dot'),
hovertemplate = "Rentabilidad: %{y}<br>Riesgo: %{x}", showlegend = F)
fig <- fig %>%
add_trace(x = data_sharpe$riesgo, y = data_sharpe$rentabilidad,
name = "Máximo ratio Sharpe", marker = list(size = 10, color = "red", symbol = 'diamond-dot'),
hovertemplate = "Rentabilidad: %{y}<br>Riesgo: %{x}", showlegend = F)
}
}) %>% bindEvent(input$start)
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment