由于数据文件未提供,以下代码仅为参考。

1)画出这5支股票的构成的效率前缘图

library(tidyverse)
library(PerformanceAnalytics)
library(RColorBrewer)

# 读取数据
data <- read_csv("five_a.csv")

# 计算年化均值和协方差矩阵
mean_ret <- apply(data, 2, mean) * 252
cov_mat <- cov(data) * 252

# 计算有效前沿
eff_frontier <- portfolio.optim(mean_ret, cov_mat)

# 绘制效率前沿图
colors <- brewer.pal(length(eff_frontier$ps), "Set1")
plot(eff_frontier$p, eff_frontier$ps, type = "l", lwd = 2, col = colors[1])
points(eff_frontier$p, eff_frontier$ps, col = colors[-1], pch = 20, cex = 0.8)
title("Efficient Frontier of Five Stocks")

2)以2016-11-22到2020-12-31的数据为训练集,2021-01-4到2021-11-18的数据为测试集,计算出目标日收益率为0.002时,各资产组合的比例,并画出最优配置与随机配置绩效比较图。

library(ROI)
library(ROI.optim)
library(ROI.plugin.quadprog)
library(ROI.plugin.glpk)

# 划分训练集和测试集
train_data <- data[1:1013, ]
test_data <- data[1014:1260, ]

# 计算训练集的均值和协方差矩阵
train_mean_ret <- apply(train_data, 2, mean) * 252
train_cov_mat <- cov(train_data) * 252

# 定义目标函数和限制条件
obj_fun <- function(w) -w %*% train_mean_ret
const_mat <- rbind(rep(1, ncol(train_data)), diag(ncol(train_data)))
const_dir <- c(1, rep(0, ncol(train_data)))

# 计算最优配置
opt_port <- ROI::ROI_optimization(fn = obj_fun, 
                                   constraints = list(A = const_mat, 
                                                      dir = const_dir, 
                                                      type = rep(">=", ncol(train_data))),
                                   solver = "quadprog")

# 计算随机配置
set.seed(123)
rand_port <- runif(ncol(train_data))
rand_port <- rand_port / sum(rand_port)

# 计算测试集的收益率和波动率
test_ret <- apply(test_data, 2, mean) * 252
test_vol <- apply(test_data, 2, sd) * sqrt(252)

# 计算最优配置和随机配置的收益率和波动率
opt_ret <- sum(test_ret * opt_port$optimum)
rand_ret <- sum(test_ret * rand_port)
opt_vol <- sqrt(t(opt_port$optimum) %*% train_cov_mat %*% opt_port$optimum)
rand_vol <- sqrt(t(rand_port) %*% train_cov_mat %*% rand_port)

# 计算目标收益率为0.002时的最优配置
target_ret <- 0.002
target_port <- ROI::ROI_solveLP(obj_fun = obj_fun,
                                const_mat = const_mat,
                                const_dir = const_dir,
                                const_rhs = c(target_ret, rep(0, ncol(train_data))),
                                max = TRUE,
                                solver = "glpk")

# 绘制最优配置和随机配置绩效比较图
plot(test_vol, test_ret, pch = 20, cex = 0.8, col = "gray50",
     xlab = "Volatility", ylab = "Return", main = "Performance Comparison")
abline(a = 0, b = opt_ret / opt_vol, lwd = 2, col = "blue")
abline(a = 0, b = rand_ret / rand_vol, lwd = 2, col = "red")
abline(v = opt_vol, lty = 2, col = "blue")
abline(v = rand_vol, lty = 2, col = "red")
text(opt_vol, opt_ret, "Optimal", pos = 4, col = "blue")
text(rand_vol, rand_ret, "Random", pos = 4, col = "red")
points(sqrt(t(target_port$optimum) %*% train_cov_mat %*% target_port$optimum),
       target_ret, pch = 20, col = "green", cex = 1.2)
text(sqrt(t(target_port$optimum) %*% train_cov_mat %*% target_port$optimum),
     target_ret, "Target", pos = 4, col = "green")
R语言题目:利用浦发银行、中国石化、上汽集团、三一重工和海螺水泥5支上证500成分股five_acsv完成下列操作注意数据已为对数收益率不需要换算:1画出这5支股票的构成的效率前缘图2以2016-11-22到2020-12-31的数据为训练集2021-01-4到2021-11-18的数据为测试集计算出目标日收益率为0002时各资产组合的比例并画出最优配置与随机配置绩效比较图。

原文地址: https://www.cveoy.top/t/topic/bJj6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录