本文是课程《数据科学与金融计算》第8章的学习笔记,主要介绍均值-方差模型、均值-VaR模型、均值-CVaR模型,用于知识点总结和代码练习,Q&A为问题及解决方案。
往期回顾:
博文 | 内容 |
---|---|
【R】【课程笔记】01 R软件基础知识 | 数据类型、数据结构、运算、绘图等 |
【R】【课程笔记】02+03 基于R软件的计算 | 聚类分析、因子分析、神经网络、支持向量机等 |
【R】【课程笔记】04+05 数据预处理+收益率计算 | 金融数据处理、收益率、R与C++等 |
【R】【课程笔记】06 金融波动模型 | GARCH、SV、高频波动模型等 |
【R】【课程笔记】07 分位数回归与VaR(ES)计算 | VaR、ES、极值模型等 |
【R】【课程笔记】08 金融投资组合决策分析 | 均值-方差模型、均值-VaR模型、均值-CVaR模型等 |
8.1 均值-方差分析
证明题:求w(见笔记,图片有误)
options(digits=4, width=70)
library(fPortfolio)
library(timeSeries)
# 1. 投资线
# (1) 设置参数
mu.1 <- 0.10
mu.2 <- 0.05
sig.1 <- 0.08
sig.2 <- 0.04
rhos <- seq(-1, 1, by = 0.5)
weights <- seq(0, 1, length = 100)
# (2) 建立投资组合
twoAssetsPortfolio <- function(mu, sigma, weight, rho) {
# (1) 计算组合的期望收益和方差
mu.p <- weight * mu[1] + (1 - weight) * mu[2]
sig2.p <- weight ^ 2 * sigma[1] ^ 2 + 2 * weight * (1 - weight) * rho * sigma[1] *
sigma[2] + (1 - weight) ^ 2 * sigma[2] ^ 2
sig.p <- sqrt(sig2.p)
# (2) 输出
ans <- cbind(weight, mu.p, sig.p)
colnames(ans) <- c('weights', 'return', 'Std.')
return(ans)
}
# (3) 画图
portfolio.results_1 <- matrix(NA, nrow = length(weights), ncol = 3)
colnames(portfolio.results_1) <- c('weights', 'return', 'Std.')
portfolio.results_5 <-portfolio.results_4 <-portfolio.results_3 <-portfolio.results_2 <- portfolio.results_1
for (i in seq_along(weights)){
weight <- weights[i]
portfolio.results_1[i,] <- twoAssetsPortfolio(mu=c(mu.1, mu.2), sigma=c(sig.1, sig.2), weight=weight, rho=1)
portfolio.results_2[i,] <- twoAssetsPortfolio(mu=c(mu.1, mu.2), sigma=c(sig.1, sig.2), weight=weight, rho=0.5)
portfolio.results_3[i,] <- twoAssetsPortfolio(mu=c(mu.1, mu.2), sigma=c(sig.1, sig.2), weight=weight, rho=0)
portfolio.results_4[i,] <- twoAssetsPortfolio(mu=c(mu.1, mu.2), sigma=c(sig.1, sig.2), weight=weight, rho=-0.5)
portfolio.results_5[i,] <- twoAssetsPortfolio(mu=c(mu.1, mu.2), sigma=c(sig.1, sig.2), weight=weight, rho=-1)
}
par(mfrow=c(1,1))
plot(portfolio.results_1[,'Std.'], portfolio.results_1[,'return'], xlim=c(0, max(sig.1, sig.2)),
ylim=c(0.04, max(mu.1, mu.2)), type='l', xlab=expression(sigma[p]), ylab=expression(mu[p]))
lines(portfolio.results_2[,'Std.'], portfolio.results_2[,'return'], lty=2)
lines(portfolio.results_3[,'Std.'], portfolio.results_3[,'return'], lty=3)
lines(portfolio.results_4[,