Markowitz投资组合模型—基于R

2022/6/3 23:20:09

本文主要是介绍Markowitz投资组合模型—基于R,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

模型的介绍

1952年Markowitz给出了现代投资组合理论的基本框架,并于1990年获得诺贝尔经济学奖.

其基本思想是用收益率的期望来度量投资股票的收益率,用收益率的方差来衡量投资的风险,方差越大风险越大,方差越小风险越小.

模型的建立

假设有三种股票 \(A,B,C\),它们的年收益率分别为 \(R_1,R_2,R_3\),则 \(R_i\) 为一个随机变量,利用概率论相关知识可以得出

\[E(R_1) = \mu_1,\quad E(R_2) = \mu_2,\quad E(R_3) = \mu_3 \]

年收益率的协方差矩阵为 \(M\).

用决策变量 \(x_1,x_2,x_3\) 分别表示投资人投资股票 \(A,B,C\) 的比例. 假设市场上没有其他投资渠道,且手上资金必须全部用于投资这3种股票,则

\[x_1,x_2,x_3 \geq 0, \quad x_1+x_2+x_3 = 1 \]

于是投资的年期望收益率为

\[E(R) = E(x_1R_1+x_2R_2+x_3R_3)=x_1ER_1+x_2ER_2+x_3ER_3 \]

年投资的方差为

\[\begin{aligned} V &= D(x_1R_1+x_2R_2+x_3R_3)\\ &= D(x_1R_1)+D(x_2R_2)+D(x_3R_3)+2cov(x_1R_1,x_2R_2)+2cov(x_1R_1,x_3R_3)+2cov(x_2R_2,x_3R_3)\\ &= x_1^2DR_1+x_2^2DR_2+x_3^2DR_3+2x_1x_2cov(R_1,R_2)+2x_1x_3cov(R_1,R_3)+2x_2x_3cov(R_2,R_3)\\ &=\sum_{j=1}^3\sum_{i=1}^3x_ix_jcov(R_i,R_j) \end{aligned} \]

然后,根据问题列出风险(方差)最小化的规划模型或者收益(期望)最大化的规划模型.

案例分析

已知三种股票A,B,C从1943年到1954年价格每年的增长如下表所示,表中第一个数据1.3的含义是股票A再1943年末的价值是其年初价值的1.3倍,即年收益率为30%,其余数据依此类推. 假设你在1955年有一笔资金准备投资这三种股票,期望年收益率至少为15%,问应如何投资?

年份 股票A 股票B 股票C
1943 1.300 1.225 1.149
1944 1.103 1.290 1.260
1945 1.216 1.216 1.419
1946 0.954 0.728 0.922
1947 0.929 1.144 1.169
1948 1.056 1.107 0.965
1949 1.038 1.321 1.133
1950 1.089 1.305 1.732
1951 1.090 1.195 1.021
1952 1.083 1.390 1.131
1953 1.035 0.928 1.006
1954 1.176 1.715 1.908

问题求解

根据题意可知,表中数据减1即为年收益率.

Step1. 计算三种股票年收益率期望及协方差矩阵

> A <- c(0.3, 0.103, 0.216, -0.046, -0.071, 0.056, 0.038, 0.089, 
+        0.09, 0.083, 0.035, 0.176)
> B <- c(0.225, 0.290, 0.216, -0.272, 0.144, 0.107, 0.321, 0.305, 
+        0.195, 0.390, -0.072, 0.715)
> C <- c(0.149, 0.260, 0.419, -0.078, 0.169, -0.035, 0.133, 0.732, 
+        0.021, 0.131, 0.006, 0.908)
> ## 计算均值和协方差
> # 写入一个矩阵
> M <- matrix(c(A,B,C), nrow = 12)
> apply(M, 2, mean)
[1] 0.08908333 0.21366667 0.23458333
> round(cov(M), 4)
       [,1]   [,2]   [,3]
[1,] 0.0108 0.0124 0.0131
[2,] 0.0124 0.0584 0.0554
[3,] 0.0131 0.0554 0.0942

于是,

\[ER_1 = 0.0891, \quad ER_2 = 0.2137, \quad ER_3 = 0.2346\\ COV = \left[ \begin{array}{c} 0.0108 & 0.0124 & 0.0131\\ 0.0124 & 0.0584 & 0.0554\\ 0.0131 & 0.0554 & 0.0942 \end{array} \right] \]

Step2. 规划模型的建立

  • 决策变量:用 \(x_1,x_2,x_3\) 表示投资者投资三种股票的比例,于是就有

\[x_1+x_2+x_3 = 1,\quad x_1,x_2,x_3 \geq 0 \]

  • 目标函数:由于要使得风险最小化,即年收益率的方差最小化,故目标为

\[\min \ V = \sum_{j=1}^3\sum_{i=1}^3x_ix_jcov(R_i,R_j) \]

  • 约束条件:根据题意,期望年收益率至少为15%,即

\[x_1ER_1 + x_2ER_2 + x_3ER_3 \geq 0.15 \]

综上,构造出了一个二次规划问题

\[\begin{aligned} &\min \ V = \sum_{j=1}^3\sum_{i=1}^3x_ix_jcov(R_i,R_j)\\ & \quad\quad x_1ER_1 + x_2ER_2 + x_3ER_3 \geq 0.15\\ & \quad\quad x_1+x_2+x_3 = 1\\ & \quad\quad x_1,x_2,x_3 \geq 0 \end{aligned} \]

下面利用 R 求解

> ## 二次规划的求解
> #install.packages("quadprog")
> library(quadprog)
> round(cov(M), 4) -> COV_M
> d <- c(0,0,0)
> A <- t(matrix(c(Mean, 1, 1, 1, -1, -1, -1), nr = 3, byrow = T))
> b0 <- c(0.15, 1, -1)
> solve.QP(Dmat = COV_M, dvec = d, Amat = A, bvec = b0)
$solution
[1] 0.5300751 0.3565292 0.1133957

$value
[1] 0.01120525

$unconstrained.solution
[1] 0 0 0

$iterations
[1] 4 1

$Lagrangian
[1] 0.176950638 0.000000000 0.004132096

$iact
[1] 1 3

于是投资三种股股票的比例为 A: 53.01%, B: 35.65%, C: 11.34%,风险最小为 \(0.0112 \times 2 = 0.0224\).

R语言二次规划:> https://blog.csdn.net/littlely_ll/article/details/53946628>



这篇关于Markowitz投资组合模型—基于R的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程