# MVO

## Description

Maximize expected returns and minimize expected risk. Solve for a mean-variance optimal portfolio. The function allows you to specify both linear and non-linear constraints and is able to account for friction penalties (transaction costs).

## Syntax

The following describes the function signature for use in Microsoft Excel's formula bar.

```excel-formula
=MVO(mu, sigma, rho, aversion, wInitial, tc, lb, ub, constraints, nonlincons)
```

### Input(s)

| Argument        | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **mu**          | Required. Vector of expected returns.                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **sigma**       | Required. Vector of expected risk.                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **rho**         | Required. Correlation matrix.                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **aversion**    | Optional. Scalar value for risk aversion. If the argument is not specified, it defaults to 1.                                                                                                                                                                                                                                                                                                                                                                    |
| **wInitial**    | Optional. Vector of initial weights (or your current weights). This is used to measure the friction penalties or as a starting point should a numerical approach be necessary. If not specified, it defaults to a vector of zeros.                                                                                                                                                                                                                               |
| **tc**          | Optional. Vector of transaction costs. If the argument is not specified, it defaults to a vector zeros.                                                                                                                                                                                                                                                                                                                                                          |
| **lb**          | Optional. Vector of lower bound limits. If the argument is not specified, it defaults to a vector zeros.                                                                                                                                                                                                                                                                                                                                                         |
| **ub**          | Optional. Vector of upper bound limits. If the argument is not specified, it defaults to a vector ones.                                                                                                                                                                                                                                                                                                                                                          |
| **constraints** | <p>Optional. Matrix of constraints, operator enumeration, and values: <span class="math">\begin{bmatrix}A & op \&b\end{bmatrix}</span> </p><p></p><p>The operator enumeration is represented by   <span class="math">op \in \begin{cases} 0: & \leq  \1: & = \ 2: & \geq \end{cases}</span> </p><p></p><p>If the argument is not specified, it will default to a fully-funded constraint. <br>i.e. <span class="math">\[1, 1, \ldots , 1\_{N}, 1, 1]</span> </p> |
| **nonlincons**  | <p>Optional. Matrix to specify nonlinear constraint enumeration, operator enumeration, and values: <span class="math">\begin{bmatrix}nonlinType & op \&value\end{bmatrix}</span> <br></p><p>The nonlinType enumeration is <span class="math">nonlinType \in \begin{cases} 0: & \text{off}  \1: & \text{same risk} \ 2: & \text{same tracking-error} \end{cases}</span> </p>                                                                                      |

### Output(s)

The function returns a vector of optimal weights $$w$$ across $$N$$assets and appends the corresponding optimization's exit flag.&#x20;

&#x20;  $$\text{output}=\begin{bmatrix}w\_1 & w\_2 & \ldots & w\_N & \text{exitFlag}\end{bmatrix}$$&#x20;

The output matrix follows the vector orientation of mu (column / row). If you have specified your inputs as column-vectors, the corresponding output matrix will be transpose of the above.

| exitFlag | Description                                                                                         |
| :------: | --------------------------------------------------------------------------------------------------- |
|  **-2**  | No feasible solution found. Check your constraints and problem definition.                          |
|  **-1**  | Unexpected interruption.                                                                            |
|   **0**  | Number of iterations exceeded.                                                                      |
|   **1**  | First-order optimality measure is less than tolerance threshold and the constraints were satisfied. |
|   **2**  | Delta in optimal weights is less than the configured numerical step size.                           |
|   **3**  | Change in the expected utility value is less than the tolerance threshold.                          |
|   **4**  | Magnitude of search direction was less than the configured threshold.                               |
|   **5**  | Magnitude of directional derivative in the search direction was less than the configured threshold. |

## Example

![](https://258561627-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK66-MGuoULhqCDXLwy%2F-MLsoAw1A3BeoKDkwJKU%2F-MLt-kXczwcWZmVXkobt%2Fimage.png?alt=media\&token=bb7a760f-ced2-4f54-9051-a58a806e4212)

{% file src="<https://258561627-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK66-MGuoULhqCDXLwy%2F-MQVBpQof0nn8qliWiYr%2F-MLt-qotLTK9oF8WC_X9%2FMVO.xlsx?alt=media&token=f1f3479a-aa4e-40b4-92af-f98c06ce73b7>" %}
Example Workbook: MVO
{% endfile %}
