mathematica写一个,马科维茨模型
时间: 2023-08-30 14:10:28 浏览: 150
mathematica板弹性力学问题模型
以下是一个简单的马科维茨模型的Mathematica代码:
1. 输入数据
首先,我们需要输入数据。这里我们输入了三个股票的历史收益率数据。
```mathematica
s1 = {0.05, 0.02, -0.01, 0.03, -0.02, 0.01, -0.03, 0.02};
s2 = {-0.01, 0.03, 0.06, 0.01, -0.02, -0.03, 0.02, 0.04};
s3 = {0.03, -0.02, -0.01, 0.04, 0.01, 0.02, -0.01, -0.02};
```
2. 计算预期收益率和协方差矩阵
接下来,我们可以计算每个股票的预期收益率和协方差矩阵。
```mathematica
μ = {Mean[s1], Mean[s2], Mean[s3]};
Σ = Covariance[{s1, s2, s3}];
```
3. 画出资产组合的有效前沿
然后,我们可以利用马科维茨模型的公式,计算资产组合的有效前沿,并画出图像。
```mathematica
n = Length[μ];
μp = Table[w.μ, {w, Table[{1/n, 1/n, 1/n}, {n}]}];
σp = Table[Sqrt[w.Σ.w], {w, Table[{w1, w2, 1 - w1 - w2}, {w1, 0, 1, 0.05}, {w2, 0, 1, 0.05}]}];
ListLinePlot[Transpose[{σp, μp}], PlotRange -> All, AxesLabel -> {"σ", "μ"}]
```
这里我们将资产组合的权重设为三个变量w1、w2、w3的线性组合,从0到1每隔0.05取一个值,计算出对应的预期收益率和风险,并画出图像。
完整代码如下:
```mathematica
s1 = {0.05, 0.02, -0.01, 0.03, -0.02, 0.01, -0.03, 0.02};
s2 = {-0.01, 0.03, 0.06, 0.01, -0.02, -0.03, 0.02, 0.04};
s3 = {0.03, -0.02, -0.01, 0.04, 0.01, 0.02, -0.01, -0.02};
μ = {Mean[s1], Mean[s2], Mean[s3]};
Σ = Covariance[{s1, s2, s3}];
n = Length[μ];
μp = Table[w.μ, {w, Table[{1/n, 1/n, 1/n}, {n}]}];
σp = Table[Sqrt[w.Σ.w], {w, Table[{w1, w2, 1 - w1 - w2}, {w1, 0, 1, 0.05}, {w2, 0, 1, 0.05}]}];
ListLinePlot[Transpose[{σp, μp}], PlotRange -> All, AxesLabel -> {"σ", "μ"}]
```
阅读全文