Recently Published
HTML
port_2_max_ret <- portfolio.spec(assets = colnames(returns_date_droped_dividened2))
# Add objectives - here we minimize risk (VAR)
port_2_max_ret <- add.objective(portfolio = port_2_max_ret, type = "risk", name = "CVaR")#added
#port_2_max_ret <- add.objective(portfolio=port_2_max_ret, type = "risk_adjusted_return", name = "SharpeRatio", risk_free_rate = risk_free_rate)
# Add constraints - fully invested portfolio with no short sales
port_2_max_ret <- add.constraint(portfolio = port_2_max_ret, type = "long_only")
port_2_max_ret <- add.constraint(portfolio = port_2_max_ret, type = "full_investment")
# Optimize the portfolio to minimize risk
optimal_portfolio_2 <- optimize.portfolio(R = returns_date_droped_dividened2,
portfolio = port_2_max_ret, optimize_method = "ROI")
optimal_weights <- extractWeights(optimal_portfolio_2)
asset_names <- names(optimal_weights)
weights_df <- data.frame(Asset = asset_names, Weight = optimal_weights)
plot_ly(data = weights_df, x = ~Asset, y = ~Weight, type = 'bar') %>%
layout(title = "Interactive Portfolio Weights",
xaxis = list(title = "Asset"),
yaxis = list(title = "Weight"))
HTML
initial_portfolio <- portfolio.spec(assets = colnames(returns_date_droped_dividened2))
# Add objectives - here we minimize risk (VAR)
initial_portfolio <- add.objective(portfolio = initial_portfolio, type = "risk", name = "VaR")
initial_portfolio <- add.objective(portfolio = initial_portfolio, type = "return", name = "mean")
initial_portfolio <- add.objective(portfolio = initial_portfolio, type = "risk-adjusted", name = "SortinoRatio")
# Add constraints - fully invested portfolio with no short sales
initial_portfolio <- add.constraint(portfolio = initial_portfolio, type = "long_only")
initial_portfolio <- add.constraint(portfolio = initial_portfolio, type = "full_investment")
initial_portfolio <- add.constraint(portfolio = initial_portfolio, type = "box", min = 0, max = 1)
# Optimize the portfolio to minimize risk
optimal_portfolio <- optimize.portfolio(R = returns_date_droped_dividened2,
portfolio = initial_portfolio, optimize_method = "DEoptim")
# View the optimal weights
optimal_weights <- extractWeights(optimal_portfolio)
asset_names <- names(optimal_weights)
weights_df <- data.frame(Asset = asset_names, Weight = optimal_weights)
plot_ly(data = weights_df, x = ~Asset, y = ~Weight, type = 'bar') %>%
layout(title = "Interactive Portfolio Weights",
xaxis = list(title = "Asset"),
yaxis = list(title = "Weight"))
HTML
port_2_max_ret <- portfolio.spec(assets = colnames(returns_date_droped_dividened2))
# Add objectives - here we minimize risk (VAR)
port_2_max_ret <- add.objective(portfolio = port_2_max_ret, type = "risk", name = "StdDev")#added
#port_2_max_ret <- add.objective(portfolio = port_2_max_ret, type = "return", name = "mean")
# Add constraints - fully invested portfolio with no short sales
port_2_max_ret <- add.constraint(portfolio = port_2_max_ret, type = "long_only")
port_2_max_ret <- add.constraint(portfolio = port_2_max_ret, type = "full_investment")
port_2_max_ret <- add.constraint(portfolio = port_2_max_ret, type = "box", min = 0, max = 1)
# Optimize the portfolio to minimize risk
optimal_portfolio_2 <- optimize.portfolio(R = returns_date_droped_dividened2,
portfolio = port_2_max_ret, optimize_method = "ROI")
optimal_weights <- extractWeights(optimal_portfolio_2)
asset_names <- names(optimal_weights)
weights_df <- data.frame(Asset = asset_names, Weight = optimal_weights)
plot_ly(data = weights_df, x = ~Asset, y = ~Weight, type = 'bar') %>%
layout(title = "Interactive Portfolio Weights",
xaxis = list(title = "Asset"),
yaxis = list(title = "Weight"))
HTML
port_2_max_ret <- portfolio.spec(assets = colnames(returns_date_droped_dividened2))
# Add objectives - here we minimize risk (VAR)
port_2_max_ret <- add.objective(portfolio = port_2_max_ret, type = "risk", name = "StdDev")#added
port_2_max_ret <- add.objective(portfolio = port_2_max_ret, type = "return", name = "mean")
# Add constraints - fully invested portfolio with no short sales
port_2_max_ret <- add.constraint(portfolio = port_2_max_ret, type = "long_only")
port_2_max_ret <- add.constraint(portfolio = port_2_max_ret, type = "full_investment")
port_2_max_ret <- add.constraint(portfolio = port_2_max_ret, type = "box", min = 0, max = 1)
# Optimize the portfolio to minimize risk
optimal_portfolio_2 <- optimize.portfolio(R = returns_date_droped_dividened2,
portfolio = port_2_max_ret, optimize_method = "DEoptim")
# expected_return_optimal_portfolio_2 <- sum(optimal_portfolio_2$weights * colMeans(returns_date_droped_dividened2))
# expected_risk_optimal_portfolio_2 <- sqrt(t(weights) %*% cov(returns_df) %*% weights)
#
# annualized_return_optimal_portfolio_2 <- Return.annualized(expected_return_optimal_portfolio_2, scale = 252)
#
# # Step 2: Annualize the risk
# trading_days <- 252 # Number of trading days in a year
# annualized_risk_tan <- tanRisk * sqrt(trading_days)
optimal_weights <- extractWeights(optimal_portfolio_2)
asset_names <- names(optimal_weights)
weights_df <- data.frame(Asset = asset_names, Weight = optimal_weights)
plot_ly(data = weights_df, x = ~Asset, y = ~Weight, type = 'bar') %>%
layout(title = "Interactive Portfolio Weights",
xaxis = list(title = "Asset"),
yaxis = list(title = "Weight"))
HTML
# Calculate mean returns
mean_returns <- colMeans(returns_date_droped_dividened2)
# Function to calculate VaR (assuming normal distribution)
VaR <- function(x, alpha = 0.05) {
mean(x) - qnorm(1 - alpha) * sd(x)
}
# Calculate VaR for each stock
VaR_values <- apply(returns_date_droped_dividened2, 2, VaR)
# Create a dataframe for plotting
plot_data <- data.frame(Stock = names(mean_returns),
Mean_Return = mean_returns,
VaR = VaR_values)
# Create the ggplot
p <- ggplot(plot_data, aes(x = Mean_Return, y = VaR, text = paste("Stock:", Stock, "<br>Return:", round(Mean_Return, 4), "<br>VaR:", round(VaR, 4)))) +
geom_point(color = 'blue', size = 3) +
labs(title = "Mean Return vs VaR for Each Stock",
x = "Mean Return",
y = "Value at Risk (VaR)") +
theme_minimal()
# Convert ggplot to plotly for interactivity
interactive_plot <- ggplotly(p, tooltip = "text")
# Display the interactive plot
interactive_plot
HTML
initial_portfolio <- portfolio.spec(assets = colnames(returns_date_droped_dividened2))
# Add objectives - here we minimize risk (VAR)
initial_portfolio <- add.objective(portfolio = initial_portfolio, type = "risk", name = "VaR")
initial_portfolio <- add.objective(portfolio = initial_portfolio, type = "risk-adjusted", name = "SortinoRatio")
# Add constraints - fully invested portfolio with no short sales
initial_portfolio <- add.constraint(portfolio = initial_portfolio, type = "long_only")
initial_portfolio <- add.constraint(portfolio = initial_portfolio, type = "full_investment")
initial_portfolio <- add.constraint(portfolio = initial_portfolio, type = "box", min = 0, max = 1)
# Optimize the portfolio to minimize risk
optimal_portfolio <- optimize.portfolio(R = returns_date_droped_dividened2, portfolio = initial_portfolio, optimize_method = "DEoptim")
# View the optimal weights
optimal_weights <- extractWeights(optimal_portfolio)
asset_names <- names(optimal_weights)
weights_df <- data.frame(Asset = asset_names, Weight = optimal_weights)
plot_ly(data = weights_df, x = ~Asset, y = ~Weight, type = 'bar') %>%
layout(title = "Interactive Portfolio Weights",
xaxis = list(title = "Asset"),
yaxis = list(title = "Weight"))
HTML
portfolio <- add.constraint(portfolio, type = "full_investment")
portfolio <- add.constraint(portfolio, type = "box", min = 0, max = 1)
# Add objective to maximize the Sharpe Ratio
portfolio <- add.objective(portfolio, type = "risk", name = "StdDev")
portfolio <- add.objective(portfolio, type = "return", name = "mean", target = 0.35/109)
portfolio <- add.objective(portfolio, type = "risk_adjusted_return", name = "SharpeRatio", risk_free_rate = risk_free_rate)
opt_portfolio_deoptim <- optimize.portfolio(R = returns_xts, portfolio = portfolio, optimize_method = "DEoptim", trace = TRUE)
HTML
portfolio <- add.constraint(portfolio, type = "full_investment")
portfolio <- add.constraint(portfolio, type = "box", min = 0, max = 1)
# Add objective to maximize the Sharpe Ratio
portfolio <- add.objective(portfolio, type = "risk", name = "StdDev")
portfolio <- add.objective(portfolio, type = "return", name = "mean", target = risk_free_rate)
portfolio <- add.objective(portfolio, type = "risk_adjusted_return", name = "SharpeRatio", risk_free_rate = risk_free_rate)
opt_portfolio_deoptim <- optimize.portfolio(R = returns_xts, portfolio = portfolio, optimize_method = "DEoptim", trace = TRUE)
HTML
portfolio <- add.constraint(portfolio, type = "full_investment")
portfolio <- add.constraint(portfolio, type = "box", min = 0, max = 1)
# Add objective to maximize the Sharpe Ratio
portfolio <- add.objective(portfolio, type = "risk", name = "StdDev")
portfolio <- add.objective(portfolio, type = "return", name = "mean", target = 0.35/109)
portfolio <- add.objective(portfolio, type = "risk_adjusted_return", name = "SharpeRatio", risk_free_rate = risk_free_rate)
opt_portfolio_deoptim <- optimize.portfolio(R = returns_xts, portfolio = portfolio, optimize_method = "DEoptim", trace = TRUE)
HTML
7:10
HTML
lina
HTML
235% return
HTML
latest
HTML
50% geom mean
HTML
using roi
HTML
optimal wight
# Add constraints
portfolio <- add.constraint(portfolio, type = "full_investment")
portfolio <- add.constraint(portfolio, type = "box", min = 0, max = 1)
# Add objective to maximize the Sharpe Ratio
portfolio <- add.objective(portfolio, type = "risk", name = "StdDev")
portfolio <- add.objective(portfolio, type = "return", name = "mean", target = 0.35/109)
portfolio <- add.objective(portfolio, type = "risk_adjusted_return", name = "SharpeRatio", risk_free_rate = risk_free_rate)
opt_portfolio_deoptim <- optimize.portfolio(R = returns_xts, portfolio = portfolio, optimize_method = "DEoptim", trace = TRUE)
#
HTML
lina
HTML
lina 4.9% return port
HTML
max return, min risk
HTML
portfolio, type = "return", name = "mean"
HTML
123
HTML
according expected shortfall
HTML
Low Risk Portfolio last 6 month
HTML
interactive stocks 2
HTML
interactive chart 1