# estimatePortMoments

## 语法

``[prsk,pret] = estimatePortMoments(obj,pwgt)``

## 说明

``[prsk,pret] = estimatePortMoments(obj,pwgt)` 估计 `Portfolio` 对象的投资组合收益矩。有关工作流的详细信息，请参阅 Portfolio 对象工作流。投资组合矩的估计特定于均值-方差投资组合优化，用于计算投资组合收益的均值和标准差（即方差的平方根）。`

## 示例

```m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; p = Portfolio; p = setAssetMoments(p, m, C); p = setDefaultConstraints(p); pwgt = estimateFrontierLimits(p); [prsk, pret] = estimatePortMoments(p, pwgt); disp([prsk, pret]);```
``` 0.0769 0.0590 0.3500 0.1800 ```

```AssetMean = [ 0.0101110; 0.0043532; 0.0137058 ]; AssetCovar = [ 0.00324625 0.00022983 0.00420395; 0.00022983 0.00049937 0.00019247; 0.00420395 0.00019247 0.00764097 ]; p = Portfolio('AssetMean', AssetMean, 'AssetCovar', AssetCovar); p = setDefaultConstraints(p); ```

`p = setBounds(p, 0.02, 0.5,'BoundType', 'Conditional', 'NumAssets', 3); `

`p = setMinMaxNumAssets(p, 2, 2); `

```pwgt = estimateFrontierLimits(p); [prsk, pret] = estimatePortMoments(p, pwgt)```
```prsk = 2×1 0.0324 0.0695 ```
```pret = 2×1 0.0072 0.0119 ```

`estimatePortMoments` 函数使用 MINLP 求解器来求解此问题。使用 `setSolverMINLP` 函数来配置 `SolverType` 和选项。

`p.solverOptionsMINLP`
```ans = struct with fields: MaxIterations: 1000 AbsoluteGapTolerance: 1.0000e-07 RelativeGapTolerance: 1.0000e-05 NonlinearScalingFactor: 1000 ObjectiveScalingFactor: 1000 Display: 'off' CutGeneration: 'basic' MaxIterationsInactiveCut: 30 ActiveCutTolerance: 1.0000e-07 IntMasterSolverOptions: [1x1 optim.options.Intlinprog] NumIterationsEarlyIntegerConvergence: 30 ```

`Portfolio` 对象能够找到与指定的目标风险相关的有效投资组合。

`load StockStats`

`Portfolio` 对象的默认约束是，它是一个纯多头投资组合并且 100% 全部投资。还可以使用很多其他约束类型。

```P = Portfolio('mean',expRet,'covar',expCov); P = setDefaultConstraints(P);```

`plotFrontier` 函数与 `Portfolio` 对象结合使用以可视化完整边界。还存在其他函数可以让您沿着边界查看特定投资组合。

`P.plotFrontier`

```P_Weights1 = P.estimateFrontierLimits; [P_risklimits, P_returnlimits] = P.estimatePortMoments(P_Weights1)```
```P_risklimits = 2×1 0.0786 0.2868 ```
```P_returnlimits = 2×1 0.0954 0.2370 ```

```targetReturn = 0.15; P_Weights2 = P.estimateFrontierByReturn(targetReturn); [P_risk2, P_return2] = P.estimatePortMoments(P_Weights2)```
```P_risk2 = 0.1068 ```
```P_return2 = 0.1500 ```

`Portfolio` 对象能够使用指定目标风险找到有效投资组合。

```targetRisk = 0.2; P_Weights3 = P.estimateFrontierByRisk(targetRisk); [P_risk3, P_return3] = P.estimatePortMoments(P_Weights3)```
```P_risk3 = 0.2000 ```
```P_return3 = 0.2182 ```

`estimateFrontierByReturn``estimateFrontierByRisk` 函数的另一个有用的功能是，在您指定了不可行（太高或太低）目标时触发特定事件。在这种情况下，这些函数提供一条警告消息来给出最佳方案。

## 输出参数

`pwgt` 中的每个投资组合的投资组合收益标准差估计，以 `NumPorts` 向量形式返回。

`prsk` 输入对象 (`obj`) 返回 `Portfolio`

`pwgt` 中的每个投资组合的投资组合收益均值估计，以 `NumPorts` 向量形式返回。

`pret` 输入对象 (`obj`) 返回 `Portfolio`

## 提示

`[prsk, pret] = obj.estimatePortMoments(pwgt);`